# Mealie changelog
> A self-hosted recipe manager, meal planner and shopping-list app.
- Vendor: Mealie
- Category: Productivity
- Official site: https://mealie.io
- Tracked by: What's New (https://whatsnew.fyi/product/mealie)
- Harvested from: GitHub (mealie-recipes/mealie)
- Entries below: 10 (newest first)
What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog.
Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'.
## Releases
### v3.22.0
- Date: 2026-07-28
- Version: v3.22.0
- Original notes: https://github.com/mealie-recipes/mealie/releases/tag/v3.22.0
- Permalink: https://whatsnew.fyi/product/mealie/releases/v3.22.0
- **added** — Add proxy support for recipe and image requests to help with sites that block your server's IP address
- **added** — Add FlareSolverr support to handle bot protection challenges as a last resort using a headless browser
- **changed** — Improve scraper resiliency by making Mealie look like a real browser, rotating between several browser signatures, and retrying more intelligently
- **added** — Add feedback for bad JSON in HTML-JSON pages
- **fixed** — Clear InputLabelType item-id as null instead of empty string
- **security** — Update js-yaml to v5.2.2 to address security vulnerability
#### 🍴🍴🍴🍴🍴🍴
The previous version of Mealie ([v3.21.0](https://github.com/mealie-recipes/mealie/releases/tag/v3.21.0)) introduced a ⚠️BREAKING CHANGE⚠️ for instances using OIDC: Mealie now requires your OIDC provider to confirm the user's email address before allowing the login. This prevents an unverified, self-asserted email address from being used to match (and sign in) to an existing Mealie account.
If an identity provider does not emit the `email_verified` claim, logins now fail. If you cannot configure your identity provider to include the `email_verified` claim, you can set `OIDC_REQUIRES_EMAIL_VERIFICATION` to `false` (this is not recommended per the above security concerns). [See the docs](https://docs.mealie.io/documentation/getting-started/authentication/oidc-v2/#email-verification) for more details.
##### 🎉 Highlights
New to this release, many improvements have been made to make importing recipes more reliable. Mealie does a better job of looking like a real browser, rotates between several browser signatures, and retries more intelligently when a site pushes back. This works out of the box, with no configuration.
For sites sitting behind extra bot protection (such as Cloudflare) server admins have two additional controls:
- Proxy support, which routes recipe and image requests through a proxy. This helps with sites that block your server's IP address.
- FlareSolverr support, which hands the page to a real headless browser as a last resort. This helps with challenges that Mealie can't get past on its own.
Both require additional configuration to work. Mealie does not ship or manage either one. You supply the proxy, and host FlareSolverr yourself (it runs nicely as a sidecar container). See the [configuration docs](https://docs.mealie.io/documentation/getting-started/installation/backend-config/#recipe-scraper) for the settings, setup details, and an example compose file.
##### ✨ New features
- feat: Improve scraper resiliency and add both proxy and FlareSolverr support @michael-genson (#7953)
- feat: Add feedback for bad JSON in HTML-JSON page @michael-genson (#7956)
- feat: Announce OIDC email change and announce new scraper capabilities @michael-genson (#7963)
##### 🐛 Bug fixes
- fix: Clear InputLabelType item-id as null instead of empty string @lehnerpat (#7950)
##### 🧰 Maintenance
5 changes
- chore(l10n): New Crowdin updates @hay-kot (#7943)
- chore(l10n): New Crowdin updates @hay-kot (#7945)
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7948)
- chore(l10n): New Crowdin updates @hay-kot (#7952)
- chore(l10n): New Crowdin updates @hay-kot (#7960)
##### 🔨 Internal development
- dev: Update front end unit test dependencies @miah120 (#7949)
##### ⬆️ Dependency updates
5 changes
- chore(deps): update dependency js-yaml to v5.2.2 [security] @[renovate[bot]](https://github.com/apps/renovate) (#7951)
- chore(deps): update dependency pre-commit to v4.6.1 @[renovate[bot]](https://github.com/apps/renovate) (#7955)
- chore(deps): lock file maintenance @[renovate[bot]](https://github.com/apps/renovate) (#7958)
- fix(deps): update dependency pillow-heif to v1.5.0 @[renovate[bot]](https://github.com/apps/renovate) (#7959)
- fix(deps): update dependency openai to v2.47.0 @[renovate[bot]](https://github.com/apps/renovate) (#7962)
#### 🍴🍴🍴🍴🍴🍴
### v3.21.0
- Date: 2026-07-23
- Version: v3.21.0
- Original notes: https://github.com/mealie-recipes/mealie/releases/tag/v3.21.0
- Permalink: https://whatsnew.fyi/product/mealie/releases/v3.21.0
- **added** — Add sitewide statistics
- **added** — Add UI fixes and backup link on onboarding screen
- **added** — Add floating save button when editing recipe
- **fixed** — Manually implement nltk.downloader using cURL
- **fixed** — Clear cached recipe actions on logout to prevent cross-user leak
- **fixed** — Improve shopping list UI
- **fixed** — Fix embedded tokens not persisting across sessions
- **fixed** — Re-enable automatic merges with crowding CI
- **fixed** — Preserve deep link when redirecting to login
- **fixed** — Truncate scraped recipe slug to filesystem-safe length
- **fixed** — Handle IntegrityError with 409 conflict response
- **fixed** — Prevent empty bulk add from clearing import URLs
- **fixed** — Wrap long words in timeline to prevent horizontal scroll
- **fixed** — Scope bulk update/delete repository methods to caller's group/household
- **security** — Harden LDAP and OIDC authentication providers
- **security** — Restrict user ratings and favorites reads to the requesting user
- **fixed** — Fix flaky ratings on mobile
- **fixed** — Simplify rating logic
- **fixed** — Fix New Asset dialog Type dropdown broken by Vuetify 4.1.2 item slot
- **fixed** — Replace shadowed ref var name when adding recipe to shopping list
#### 🍴🍴🍴🍴🍴🍴
This release brings a couple new features and a slew of bug fixes.
##### ✨ New features
- feat: Added sitewide statistics @Choromanski (#7322)
- feat: ui fixes & backup link on onboarding screen @p0lycarpio (#7743)
- feat: floating save button when editing recipe @DeepReef11 (#7320)
##### 🐛 Bug fixes
- fix: Manually implement nltk.downloader using cURL @michael-genson (#7817)
- fix: clear cached recipe actions on logout to prevent cross-user leak @shved270189 (#7815)
- fix: shopping list UI improvements @p0lycarpio (#7215)
- fix: Fix embedded tokens not persisting across sessions @michael-genson (#7860)
- fix: re-enable automatic merges with crowding CI @hay-kot (#7886)
- fix: preserve deep link when redirecting to login @henricook (#7876)
- fix: truncate scraped recipe slug to filesystem-safe length @TowyTowy (#7862)
- fix: handle IntegrityError with 409 conflict response @gitolicious (#7712)
- fix: prevent empty bulk add from clearing import URLs @ft4453080 (#7820)
- fix: wrap long words in timeline to prevent horizontal scroll @shved270189 (#7819)
- fix: scope bulk update/delete repository methods to caller's group/household @hay-kot (#7899)
- fix: harden LDAP and OIDC authentication providers @hay-kot (#7902)
- fix: restrict user ratings and favorites reads to the requesting user @hay-kot (#7903)
- fix: Fix flaky ratings on mobile @michael-genson (#7916)
- fix: Simplify rating logic @michael-genson (#7918)
- fix: New Asset dialog Type dropdown broken by Vuetify 4.1.2 item slot… @bferd (#7931)
- fix: Replace shadowed `ref` var name when adding recipe to shopping list @michael-genson (#7937)
##### 🧰 Maintenance
20 changes
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7818)
- chore(l10n): New Crowdin updates @hay-kot (#7805)
- chore(l10n): New Crowdin updates @hay-kot (#7824)
- chore(l10n): New Crowdin updates @hay-kot (#7836)
- chore(l10n): New Crowdin updates @hay-kot (#7837)
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7842)
- chore(l10n): New Crowdin updates @hay-kot (#7839)
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7870)
- chore(l10n): New Crowdin updates @hay-kot (#7853)
- chore(l10n): New Crowdin updates @hay-kot (#7871)
- chore(l10n): New Crowdin updates @hay-kot (#7891)
- chore(l10n): New Crowdin updates @hay-kot (#7894)
- chore(l10n): New Crowdin updates @hay-kot (#7904)
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7906)
- chore(l10n): New Crowdin updates @hay-kot (#7908)
- chore(l10n): New Crowdin updates @hay-kot (#7911)
- chore(l10n): New Crowdin updates @hay-kot (#7915)
- chore(l10n): New Crowdin updates @hay-kot (#7920)
- chore(l10n): New Crowdin updates @hay-kot (#7923)
- chore(l10n): New Crowdin updates @hay-kot (#7930)
##### 📚 Documentation
- docs: clarify manage and organize permissions @archit-goyal (#7823)
##### 🔨 Internal development
- dev: Skip template check on Crowdin PRs @michael-genson (#7854)
- dev: Add GH CLI to devcontainer @michael-genson (#7857)
##### ⬆️ Dependency updates
39 changes
- chore(deps): remove unused aiofiles dependency @lukehsiao (#7872)
- chore(deps): update nltk to 3.10.0 @hay-kot (#7901)
- chore(deps): update dependency coverage to v7.14.3 @[renovate[bot]](https://github.com/apps/renovate) (#7816)
- chore(deps): lock file maintenance @[renovate[bot]](https://github.com/apps/renovate) (#7822)
- chore(deps): update dependency ruff to v0.15.19 @[renovate[bot]](https://github.com/apps/renovate) (#7821)
- fix(deps): update dependency openai to v2.44.0 @[renovate[bot]](https://github.com/apps/renovate) (#7830)
- chore(deps): update dependency ruff to v0.15.20 @[renovate[bot]](https://git
_[Truncated at 4000 characters — full notes: https://github.com/mealie-recipes/mealie/releases/tag/v3.21.0]_
### v3.20.1
- Date: 2026-06-26
- Version: v3.20.1
- Original notes: https://github.com/mealie-recipes/mealie/releases/tag/v3.20.1
- Permalink: https://whatsnew.fyi/product/mealie/releases/v3.20.1
- **fixed** — Invisible quantities in number inputs not rendering their value until the value changes
- **security** — Update pydantic-settings to v2.14.2
- **changed** — Update fastapi to v0.138.0
#### 🍴🍴🍴🍴🍴🍴
Patch release to fix a bug with the number inputs not rendering its value until the value changes.
##### 🐛 Bug fixes
- fix: Invisible quantities @michael-genson (#7811)
##### ⬆️ Dependency updates
4 changes
- fix(deps): update dependency pydantic-settings to v2.14.2 [security] @[renovate[bot]](https://github.com/apps/renovate) (#7782)
- chore(deps): update node.js to fdddfb3 @[renovate[bot]](https://github.com/apps/renovate) (#7803)
- fix(deps): update dependency fastapi to v0.138.0 @[renovate[bot]](https://github.com/apps/renovate) (#7806)
- chore(deps): update dependency coverage to v7.14.2 @[renovate[bot]](https://github.com/apps/renovate) (#7807)
#### 🍴🍴🍴🍴🍴🍴
### v3.20.0
- Date: 2026-06-24
- Version: v3.20.0
- Original notes: https://github.com/mealie-recipes/mealie/releases/tag/v3.20.0
- Permalink: https://whatsnew.fyi/product/mealie/releases/v3.20.0
- **added** — Enhanced PR Lint/Validation
- **added** — Warn when deleting foods used in recipes
- **added** — Added version info to backup file
- **fixed** — Add missing dependencies in package.json
- **fixed** — Support CSV/TXT upload and add validation for Plan to Eat import
- **security** — Harden recipe content against stored XSS (chips, instructions, asset media)
- **fixed** — Default ingredient_references on RecipeInstruction init
- **fixed** — Upgrade pytest-asyncio
- **fixed** — Refactor cookie settings for Home Assistant i-frame login
- **fixed** — Send default_headers with curl_cffi impersonation (fixes 403 on WAF sites)
- **removed** — Drop unused python dependencies aniso8601 and appdirs
- **security** — Update vitest to v4 for security fixes
- **security** — Update dompurify to v3.4.11 for security fixes
#### 🍴🍴🍴🍴🍴🍴
This release contains several fixes and security updates, including a fix for the recipe parser which should hopefully make it more consistent on some less-trusted networks.
##### ✨ New features
- feat: Enhanced PR Lint/Validation @Choromanski (#7329)
- feat: warn when deleting foods used in recipes @ZacharySchaffter (#7117)
- feat: Added version info to backup file @Choromanski (#7416)
##### 🐛 Bug fixes
- fix: add missing dependencies in package.json @p0lycarpio (#7709)
- fix: support CSV/TXT upload and add validation for Plan to Eat import (#6360) @hay-kot (#7622)
- fix: harden recipe content against stored XSS (chips, instructions, asset media) @hay-kot (#7719)
- fix: default ingredient_references on RecipeInstruction init @alexander-wenzel-dev (#7732)
- fix: Upgrade pytest-asyncio @michael-genson (#7746)
- fix: refactor cookie settings for Home Assistant i-frame login @cheebreezee (#7741)
- fix: Various lint issues @michael-genson (#7766)
- fix: send default_headers with curl_cffi impersonation (fixes 403 on WAF sites) @xenoputtss (#7792)
##### 🧰 Maintenance
11 changes
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7713)
- chore: add 5-day dependency cooling period for supply-chain hardening @hay-kot (#7718)
- chore: drop unused python dependencies aniso8601 and appdirs @hay-kot (#7717)
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7734)
- chore(l10n): New Crowdin updates @hay-kot (#7747)
- chore(l10n): New Crowdin updates @hay-kot (#7749)
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7757)
- chore(l10n): New Crowdin updates @hay-kot (#7756)
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7784)
- chore(l10n): New Crowdin updates @hay-kot (#7765)
- chore(l10n): New Crowdin updates @hay-kot (#7791)
##### 📚 Documentation
- docs: fix broken link to backend configuration in AI providers page @BuildmodeOne (#7793)
##### 🔨 Internal development
- dev: Improve support for front end unit tests @miah120 (#7163)
##### ⬆️ Dependency updates
30 changes
- chore(deps): update dependency pytest-asyncio to v1.4.0 @[renovate[bot]](https://github.com/apps/renovate) (#7694)
- chore(deps): update dependency vitest to v4 [security] @[renovate[bot]](https://github.com/apps/renovate) (#7723)
- chore(deps): lock file maintenance @[renovate[bot]](https://github.com/apps/renovate) (#7742)
- fix(deps): update dependency python-multipart to v0.0.32 @[renovate[bot]](https://github.com/apps/renovate) (#7729)
- fix(deps): update dependency apprise to v1.11.0 @[renovate[bot]](https://github.com/apps/renovate) (#7728)
- fix(deps): update dependency uvicorn to v0.49.0 @[renovate[bot]](https://github.com/apps/renovate) (#7744)
- chore(deps): update dependency ruff to v0.15.16 @[renovate[bot]](https://github.com/apps/renovate) (#7726)
- fix(deps): update dependency openai to v2.41.0 @[renovate[bot]](https://github.com/apps/renovate) (#7733)
- chore(deps): update node.js to 9c1d881 @[renovate[bot]](https://github.com/apps/renovate) (#7748)
- chore(deps): update node.js to 40ad9f3 @[renovate[bot]](https://github.com/apps/renovate) (#7752)
- fix(deps): update dependency beautifulsoup4 to v4.15.0 @[renovate[bot]](https://github.com/apps/renovate) (#7753)
- chore(deps): lock file maintenance @[renovate[bot]](https://github.com/apps/renovate) (#7759)
- fix(deps): update dependency yt-dlp to v2026.6.9 @[renovate[bot]](https://github.com/apps/renovate) (#7758)
- fix(deps): update dependency openai to v2.41.1 @[renovate[bot]](https://github.com/apps/renovate) (#7761)
- fix(deps): update dependency pillow-heif to v1.4.0 @[renovate[bot]](https://github.com/apps/renovate) (#7762)
- chore(deps)
_[Truncated at 4000 characters — full notes: https://github.com/mealie-recipes/mealie/releases/tag/v3.20.0]_
### v3.19.2
- Date: 2026-05-29
- Version: v3.19.2
- Original notes: https://github.com/mealie-recipes/mealie/releases/tag/v3.19.2
- Permalink: https://whatsnew.fyi/product/mealie/releases/v3.19.2
- **fixed** — Ensure secret key is not empty to allow local authentication login
- **changed** — Secret key is regenerated with a valid value, which invalidates existing tokens including API keys
#### 🍴🍴🍴🍴🍴🍴
This release contains a fix for users with an empty `.secret` file not being able to log-in with local auth. Your `.secret` file will be regenerated with a valid value. Note that this will invalidate existing tokens, including API keys.
##### 🐛 Bug fixes
- fix: Ensure secret key is not empty @michael-genson (#7701)
##### 🔨 Internal development
- dev: Set renovarte bot PRs to "immediate" @michael-genson (#7690)
##### ⬆️ Dependency updates
6 changes
- fix(deps): update dependency fastapi to v0.136.3 @[renovate[bot]](https://github.com/apps/renovate) (#7692)
- chore(deps): update dependency coverage to v7.14.1 @[renovate[bot]](https://github.com/apps/renovate) (#7691)
- fix(deps): update dependency uvicorn to v0.48.0 @[renovate[bot]](https://github.com/apps/renovate) (#7696)
- fix(deps): update dependency sqlalchemy to v2.0.50 @[renovate[bot]](https://github.com/apps/renovate) (#7693)
- fix(deps): update dependency ingredient-parser-nlp to v2.7.0 @[renovate[bot]](https://github.com/apps/renovate) (#7695)
- chore(deps): lock file maintenance @[renovate[bot]](https://github.com/apps/renovate) (#7697)
#### 🍴🍴🍴🍴🍴🍴
### v3.19.1
- Date: 2026-05-27
- Version: v3.19.1
- Original notes: https://github.com/mealie-recipes/mealie/releases/tag/v3.19.1
- Permalink: https://whatsnew.fyi/product/mealie/releases/v3.19.1
- **fixed** — Make most recipe action columns filterable
- **security** — Update dependency nuxt to v4.4.6
#### 🍴🍴🍴🍴🍴🍴
This update fixes a bug with recipe actions not loading. Also included are several dependency updates.
##### 🐛 Bug fixes
- fix: Make most recipe action columns filterable @michael-genson (#7689)
##### 🧰 Maintenance
- chore(l10n): New Crowdin updates @hay-kot (#7660)
- chore(l10n): New Crowdin updates @hay-kot (#7661)
- chore(l10n): New Crowdin updates @hay-kot (#7687)
##### 🔨 Internal development
- dev: Disable approvals for lockfile maintenance PR creation @michael-genson (#7666)
##### ⬆️ Dependency updates
19 changes
- chore(deps): update dependency nuxt to v4.4.6 [security] @[renovate[bot]](https://github.com/apps/renovate) (#7667)
- chore(deps): update dependency types-pyyaml to v6.0.12.20260518 @[renovate[bot]](https://github.com/apps/renovate) (#7670)
- fix(deps): update dependency pydantic-settings to v2.14.1 @[renovate[bot]](https://github.com/apps/renovate) (#7674)
- fix(deps): update dependency lxml to v6.1.1 @[renovate[bot]](https://github.com/apps/renovate) (#7679)
- fix(deps): update dependency python-multipart to v0.0.29 @[renovate[bot]](https://github.com/apps/renovate) (#7675)
- fix(deps): update dependency uvicorn to v0.47.0 @[renovate[bot]](https://github.com/apps/renovate) (#7684)
- fix(deps): update dependency requests to v2.34.2 @[renovate[bot]](https://github.com/apps/renovate) (#7683)
- chore(deps): update dependency coverage to v7.14.0 @[renovate[bot]](https://github.com/apps/renovate) (#7676)
- chore(deps): update dependency mypy to v2.1.0 @[renovate[bot]](https://github.com/apps/renovate) (#7681)
- fix(deps): update dependency pyjwt to v2.13.0 @[renovate[bot]](https://github.com/apps/renovate) (#7682)
- chore(deps): lock file maintenance @[renovate[bot]](https://github.com/apps/renovate) (#7685)
- fix(deps): update dependency pydantic to v2.13.4 @[renovate[bot]](https://github.com/apps/renovate) (#7673)
- chore(deps): update node.js to 8530f76 @[renovate[bot]](https://github.com/apps/renovate) (#7668)
- fix(deps): update dependency openai to v2.38.0 @[renovate[bot]](https://github.com/apps/renovate) (#7677)
- chore(deps): update dependency types-requests to v2.33.0.20260518 @[renovate[bot]](https://github.com/apps/renovate) (#7671)
- chore(deps): update dependency types-python-dateutil to v2.9.0.20260518 @[renovate[bot]](https://github.com/apps/renovate) (#7669)
- fix(deps): update dependency orjson to v3.11.9 @[renovate[bot]](https://github.com/apps/renovate) (#7672)
- fix(deps): update dependency python-ldap to v3.4.7 @[renovate[bot]](https://github.com/apps/renovate) (#7680)
- chore(deps): update dependency ruff to v0.15.14 @[renovate[bot]](https://github.com/apps/renovate) (#7678)
#### 🍴🍴🍴🍴🍴🍴
### v3.19.0
- Date: 2026-05-24
- Version: v3.19.0
- Original notes: https://github.com/mealie-recipes/mealie/releases/tag/v3.19.0
- Permalink: https://whatsnew.fyi/product/mealie/releases/v3.19.0
- **added** — Add in-app AI Provider Configuration to manage multiple AI providers for different tasks
- **fixed** — Fix inconsistent translation between "from an image" and "from images"
- **security** — Protect sensitive data in query filter API
- **fixed** — Enforce organize-group-data permission on food/tag/category mutations
- **fixed** — Prevent swiping and scrolling simultaneously on shopping list
#### 🍴🍴🍴🍴🍴🍴
❗❗❗This release contains important security fixes in the query filter API. For more information, see: #7629
##### 🎉 Highlights
This release adds more flexible, in-app management of AI providers. You can now add multiple AI providers for different tasks (e.g. one provider for general use, and one provider for importing recipes from videos). These providers can be mixed between completely unrelated services (e.g. OpenAI, Azure, locally-hosted via Ollama, etc.).
Existing settings configured via environment variables (e.g. `OPENAI_API_KEY`) will automatically be imported one time upon upgrading your instance. For more information, check out [the PR](https://github.com/mealie-recipes/mealie/pull/7650) or the in-app announcement!
##### ✨ New features
- feat: In-app AI Provider Configuration @michael-genson (#7650)
##### 🐛 Bug fixes
- fix: Inconsistent "from an image" vs "from images" translation @michael-genson (#7642)
- fix: Protect sensitive data in query filter API (GHSA-8m57-7cv5-rjp8) @michael-genson (#7629)
- fix: enforce organize-group-data permission on food/tag/category mutations @hay-kot (#7651)
- fix: Prevent swiping AND scrolling on shopping list @michael-genson (#7659)
##### 🧰 Maintenance
6 changes
- chore(l10n): New Crowdin updates @hay-kot (#7643)
- chore(l10n): New Crowdin updates @hay-kot (#7646)
- chore(l10n): New Crowdin updates @hay-kot (#7649)
- chore(l10n): New Crowdin updates @hay-kot (#7652)
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7655)
- chore(l10n): New Crowdin updates @hay-kot (#7653)
#### 🍴🍴🍴🍴🍴🍴
### v3.18.0
- Date: 2026-05-20
- Version: v3.18.0
- Original notes: https://github.com/mealie-recipes/mealie/releases/tag/v3.18.0
- Permalink: https://whatsnew.fyi/product/mealie/releases/v3.18.0
- **added** — Improve new shopping list UI
- **added** — Remember screen lock preference
- **fixed** — Query Filter Builder Advanced bug
- **fixed** — Make PWA share target functional on Android Chrome
- **fixed** — Redirect to login and validate input on password reset flow
- **fixed** — Update backend normalization to match search normalization logic
- **fixed** — Update OpenAI recipe parse prompt to return the same number of ingredients as given
- **fixed** — Redirect to new slug URL after recipe rename
- **fixed** — Prevent double-scaling of sub-recipe ingredients in shopping list
- **fixed** — Infinite API request loop on empty stores
- **fixed** — Downgrade OIDC missing-claims log from ERROR to DEBUG
- **fixed** — Use locale for Recipe Created timeline event
- **security** — Block scriptable asset extensions and force Content-Disposition: attachment
- **security** — Enforce ownership check on recipe deletion
#### 🍴🍴🍴🍴🍴🍴
##### ✨ New features
- feat: Improve new shopping list UI @michael-genson (#7600)
- feat: Remember screen lock preference @michael-genson (#7609)
##### 🐛 Bug fixes
- fix: Query Filter Builder "Advanced" bug @michael-genson (#7599)
- fix: make PWA share target functional on Android Chrome @zdenek-stursa (#7468)
- fix: redirect to login and validate input on password reset flow @zdenek-stursa (#7521)
- fix: Update backend normalization to match search normalization logic @michael-genson (#7603)
- fix: Update OpenAI recipe parse prompt to return the same number of ingredients as given @michael-genson (#7604)
- fix: redirect to new slug URL after recipe rename @zdenek-stursa (#7522)
- fix: prevent double-scaling of sub-recipe ingredients in shopping list @zdenek-stursa (#7537)
- fix: Infinite API request loop on empty stores @michael-genson (#7613)
- fix: downgrade OIDC missing-claims log from ERROR to DEBUG (#6801) @hay-kot (#7620)
- fix: use locale for Recipe Created timeline event (#4497) @hay-kot (#7623)
- fix: block scriptable asset extensions and force Content-Disposition: attachment (GHSA-gfwc-pjx4-mg9p) @hay-kot (#7626)
- fix: enforce ownership check on recipe deletion (GHSA-x5v9-9jvh-7c7q) @hay-kot (#7625)
##### 🧰 Maintenance
8 changes
- chore(l10n): New Crowdin updates @hay-kot (#7571)
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7595)
- chore(l10n): New Crowdin updates @hay-kot (#7589)
- chore(l10n): New Crowdin updates @hay-kot (#7605)
- chore(l10n): New Crowdin updates @hay-kot (#7608)
- chore: update SECURITY.md for GitHub private vulnerability reporting @hay-kot (#7612)
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7637)
- chore(l10n): New Crowdin updates @hay-kot (#7617)
##### ⬆️ Dependency updates
7 changes
- chore(deps): update dependency mypy to v2 @[renovate[bot]](https://github.com/apps/renovate) (#7584)
- chore(deps): update dependency types-requests to v2.33.0.20260503 @[renovate[bot]](https://github.com/apps/renovate) (#7587)
- chore(deps): update node.js to 34f0eb9 @[renovate[bot]](https://github.com/apps/renovate) (#7590)
- chore(deps): update node.js to 050bf2b @[renovate[bot]](https://github.com/apps/renovate) (#7592)
- fix(deps): update dependency authlib to v1.7.1 @[renovate[bot]](https://github.com/apps/renovate) (#7593)
- fix(deps): update dependency openai to v2.34.0 @[renovate[bot]](https://github.com/apps/renovate) (#7594)
- fix(deps): update dependency authlib to v1.7.2 @[renovate[bot]](https://github.com/apps/renovate) (#7606)
#### 🍴🍴🍴🍴🍴🍴
### v3.17.0
- Date: 2026-05-06
- Version: v3.17.0
- Original notes: https://github.com/mealie-recipes/mealie/releases/tag/v3.17.0
- Permalink: https://whatsnew.fyi/product/mealie/releases/v3.17.0
- **added** — Create menu for new shopping list items
- **added** — Swipe controls to check off shopping list items on mobile
- **fixed** — Prevent delete-image dialog from reopening in a loop inside v-menu
- **fixed** — Use correct title and icon on Recipe Actions data page
- **fixed** — Allow user-configurable OIDC timeout
- **fixed** — Pressing Enter in dialogs now confirms instead of silently closing
- **fixed** — Add missing search bar to Recipe Data management page
- **fixed** — Do not hit authenticated endpoints when logged out
- **fixed** — Restore create-item button in recipe dropdowns for categories, tags, and tools
- **fixed** — Adjust ingredient section spacing
- **security** — Update lxml to v6.1.0
- **security** — Update axios to v1.15.2
#### 🍴🍴🍴🍴🍴🍴
##### 🎉 Highlights
The shopping list experience has been improved, especially for mobile users, including:
- a new create menu for new items
- swipe controls to check off an item (for mobile users)
##### ✨ New features
- feat: Improve add shopping list item form @miah120 (#7091)
- feat: Shopping list / Swipe to check off @miah120 (#7118)
##### 🐛 Bug fixes
- fix: prevent delete-image dialog from reopening in a loop inside v-menu @zdenek-stursa (#7469)
- fix: use correct title and icon on Recipe Actions data page @zdenek-stursa (#7498)
- fix: Allow user-configurable OIDC timeout @t0xicCode (#7496)
- fix: pressing Enter in dialogs now confirms instead of silently closing @zdenek-stursa (#7503)
- fix: add missing search bar to Recipe Data management page @zdenek-stursa (#7504)
- fix: Don't hit authenticated endpoints when logged out @garlic-hub (#7563)
- fix: restore create-item button in recipe dropdowns (categories, tags, tools) @zdenek-stursa (#7564)
- fix: Adjust ingredient section spacing @michael-genson (#7580)
##### 🧰 Maintenance
13 changes
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7497)
- chore(l10n): New Crowdin updates @hay-kot (#7500)
- chore(l10n): New Crowdin updates @hay-kot (#7502)
- chore(l10n): New Crowdin updates @hay-kot (#7506)
- chore(l10n): New Crowdin updates @hay-kot (#7509)
- chore(l10n): New Crowdin updates @hay-kot (#7515)
- chore(l10n): New Crowdin updates @hay-kot (#7523)
- chore(l10n): New Crowdin updates @hay-kot (#7526)
- chore(l10n): New Crowdin updates @hay-kot (#7536)
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7541)
- chore(l10n): New Crowdin updates @hay-kot (#7546)
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7569)
- chore(l10n): New Crowdin updates @hay-kot (#7558)
##### 📚 Documentation
- docs: Update recipe creation docs @michael-genson (#7494)
- docs: Enhance BASE_URL description in backend config @BadCo-NZ (#7449)
- docs: document necessity of forwarded-allow-ips with OIDC behind reverse-proxy https in oidc-v2.md @aristaeus (#7424)
##### ⬆️ Dependency updates
26 changes
- chore(deps): update dependency mypy to v1.20.1 @[renovate[bot]](https://github.com/apps/renovate) (#7490)
- fix(deps): update dependency pydantic to v2.13.0 @[renovate[bot]](https://github.com/apps/renovate) (#7492)
- fix(deps): update dependency pydantic to v2.13.1 @[renovate[bot]](https://github.com/apps/renovate) (#7505)
- fix(deps): update dependency openai to v2.32.0 @[renovate[bot]](https://github.com/apps/renovate) (#7507)
- fix(deps): update dependency fastapi to v0.136.0 @[renovate[bot]](https://github.com/apps/renovate) (#7511)
- chore(deps): update dependency ruff to v0.15.11 @[renovate[bot]](https://github.com/apps/renovate) (#7514)
- fix(deps): update dependency lxml to v6.1.0 [security] @[renovate[bot]](https://github.com/apps/renovate) (#7513)
- chore(deps): update node.js to 807109d @[renovate[bot]](https://github.com/apps/renovate) (#7516)
- fix(deps): update dependency pydantic to v2.13.2 @[renovate[bot]](https://github.com/apps/renovate) (#7517)
- chore(deps): update node.js to 91447bc @[renovate[bot]](https://github.com/apps/renovate) (#7519)
- chore(deps): update node.js to e989123 @[renovate[bot]](https://github.com/apps/renovate) (#7520)
- fix(deps): update dependency authlib to v1.7.0 @[renovate[bot]](https://github.com/apps/renovate) (#7525)
- fix(deps): update dependency pydantic to v2.13.3 @[renovate[bot]](https://github.com/apps/renovate) (#7533)
- fix(deps): update dependency psycopg2-binary to v2.9.12 @[renovate[bot]](https://github.com/apps/renovate) (#7539)
- fix(deps): update dependency uvicorn to v0.45.0 @[renovate[bot]](https://github.com/apps/renovat
_[Truncated at 4000 characters — full notes: https://github.com/mealie-recipes/mealie/releases/tag/v3.17.0]_
### v3.16.0
- Date: 2026-04-17
- Version: v3.16.0
- Original notes: https://github.com/mealie-recipes/mealie/releases/tag/v3.16.0
- Permalink: https://whatsnew.fyi/product/mealie/releases/v3.16.0
- **added** — Migrate PWA manifest to backend
- **fixed** — PWA now respects custom theme color setting
- **fixed** — Blank query filter builder fields
- **fixed** — Preserve ingredient section titles when parsing recipe ingredients
- **fixed** — Misc frontend layout fixes
- **security** — Update dependency authlib to v1.6.11
#### 🍴🍴🍴🍴🍴🍴
This release contains a few fixes, and migrates our PWA manifest to the backend. Among other things, this fixes a bug with the PWA where it doesn't respect your custom theme color if you have it set.
##### ✨ New features
- feat: Migrate PWA manifest to backend @Choromanski (#7331)
##### 🐛 Bug fixes
- fix: Blank query filter builder fields @michael-genson (#7480)
- fix: preserve ingredient section titles when parsing recipe ingredients @zdenek-stursa (#7483)
- fix: Misc frontend layout fixes @michael-genson (#7487)
##### 🧰 Maintenance
- chore: Update yarn deps @michael-genson (#7486)
##### 📚 Documentation
- docs: Added copy button to codeblocks @Choromanski (#7343)
##### 🔨 Internal development
- dev: Enable lockfile maintenance and update deps @michael-genson (#7484)
##### ⬆️ Dependency updates
- chore(deps): update node.js to 33cf7f0 @[renovate[bot]](https://github.com/apps/renovate) (#7478)
- fix(deps): update dependency authlib to v1.6.11 [security] @[renovate[bot]](https://github.com/apps/renovate) (#7481)
- fix(deps): update dependency lxml to v6.0.4 @[renovate[bot]](https://github.com/apps/renovate) (#7485)
##### 🙏 New Contributors
* @zdenek-stursa made their first contribution in https://github.com/mealie-recipes/mealie/pull/7483
#### 🍴🍴🍴🍴🍴🍴