Mealie

Productivity

A self-hosted recipe manager, meal planner and shopping-list app.

Latest v3.22.0 · by MealieWebsitemealie-recipes/mealie

Release activity

Release activity — 10 releases across 10 days since Apr 17, 2026. Each cell is one day; darker means more releases that day. Nothing is recorded before Apr 17, 2026. Older weeks are hidden at this screen width.
MayJunJulAug
SundayNo releases on Apr 26, 2026No releases on May 3, 2026No releases on May 10, 2026No releases on May 17, 20261 release on May 24, 2026No releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026
MondayNo releases on Apr 27, 2026No releases on May 4, 2026No releases on May 11, 2026No releases on May 18, 2026No releases on May 25, 2026No releases on Jun 1, 2026No releases on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 2026No releases on Aug 10, 2026
TuesdayNo releases on Apr 28, 2026No releases on May 5, 2026No releases on May 12, 2026No releases on May 19, 2026No releases on May 26, 2026No releases on Jun 2, 2026No releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 2026No releases on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 20261 release on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 2026
WednesdayNo releases on Apr 29, 20261 release on May 6, 2026No releases on May 13, 20261 release on May 20, 20261 release on May 27, 2026No releases on Jun 3, 2026No releases on Jun 10, 2026No releases on Jun 17, 20261 release on Jun 24, 2026No releases on Jul 1, 2026No releases on Jul 8, 2026No releases on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 2026
ThursdayNo releases on Apr 30, 2026No releases on May 7, 2026No releases on May 14, 2026No releases on May 21, 2026No releases on May 28, 2026No releases on Jun 4, 2026No releases on Jun 11, 2026No releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 2026No releases on Jul 9, 2026No releases on Jul 16, 20261 release on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 2026
FridayNo releases on May 1, 2026No releases on May 8, 2026No releases on May 15, 2026No releases on May 22, 20261 release on May 29, 2026No releases on Jun 5, 2026No releases on Jun 12, 2026No releases on Jun 19, 20261 release on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 2026
SaturdayNo releases on May 2, 2026No releases on May 9, 2026No releases on May 16, 2026No releases on May 23, 2026No releases on May 30, 2026No releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026

10 releases since Apr 17, 2026

Changelog

v3.22.0

Added 3
  • Add proxy support for recipe and image requests to help with sites that block your server's IP address
  • Add FlareSolverr support to handle bot protection challenges as a last resort using a headless browser
  • Add feedback for bad JSON in HTML-JSON pages
Changed 1
  • Improve scraper resiliency by making Mealie look like a real browser, rotating between several browser signatures, and retrying more intelligently
Fixed 1
  • Clear InputLabelType item-id as null instead of empty string
Security 1
  • Update js-yaml to v5.2.2 to address security vulnerability

🍴🍴🍴🍴🍴🍴

The previous version of Mealie (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 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 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
  • chore(l10n): New Crowdin updates @hay-kot (#7943)
  • chore(l10n): New Crowdin updates @hay-kot (#7945)
  • chore(l10n): Crowdin locale sync @mealie-actions[bot] (#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
  • chore(deps): update dependency js-yaml to v5.2.2 [security] @renovate[bot] (#7951)
  • chore(deps): update dependency pre-commit to v4.6.1 @renovate[bot] (#7955)
  • chore(deps): lock file maintenance @renovate[bot] (#7958)
  • fix(deps): update dependency pillow-heif to v1.5.0 @renovate[bot] (#7959)
  • fix(deps): update dependency openai to v2.47.0 @renovate[bot] (#7962)

🍴🍴🍴🍴🍴🍴

View originalPermalink
How v3.22.0 went

v3.21.0

Added 3
  • Add sitewide statistics
  • Add UI fixes and backup link on onboarding screen
  • Add floating save button when editing recipe
Fixed 15
  • Manually implement nltk.downloader using cURL
  • Clear cached recipe actions on logout to prevent cross-user leak
  • Improve shopping list UI
  • Fix embedded tokens not persisting across sessions
  • Re-enable automatic merges with crowding CI
  • Preserve deep link when redirecting to login
Security 2
  • Harden LDAP and OIDC authentication providers
  • Restrict user ratings and favorites reads to the requesting user

🍴🍴🍴🍴🍴🍴

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
  • chore(l10n): Crowdin locale sync @mealie-actions[bot] (#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] (#7842)
  • chore(l10n): New Crowdin updates @hay-kot (#7839)
  • chore(l10n): Crowdin locale sync @mealie-actions[bot] (#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] (#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
  • 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] (#7816)
  • chore(deps): lock file maintenance @renovate[bot] (#7822)
  • chore(deps): update dependency ruff to v0.15.19 @renovate[bot] (#7821)
  • fix(deps): update dependency openai to v2.44.0 @renovate[bot] (#7830)
  • chore(deps): update dependency ruff to v0.15.20 @renovate[bot] (#7832)
  • fix(deps): update dependency alembic to v1.18.5 @renovate[bot] (#7833)
  • fix(deps): update dependency fastapi to v0.138.1 @renovate[bot] (#7834)
  • fix(deps): update dependency fastapi to v0.138.2 @renovate[bot] (#7841)
  • chore(deps): lock file maintenance @renovate[bot] (#7846)
  • fix(deps): update dependency pillow to v12.3.0 @renovate[bot] (#7848)
  • fix(deps): update dependency fastapi to v0.139.0 @renovate[bot] (#7849)
  • chore(deps): update dependency coverage to v7.15.0 @renovate[bot] (#7855)
  • fix(deps): update dependency typing-extensions to v4.16.0 @renovate[bot] (#7856)
  • chore(deps): update node.js to 392e1e2 @renovate[bot] (#7858)
  • fix(deps): update dependency uvicorn to v0.50.0 @renovate[bot] (#7861)
  • chore(deps): update dependency setuptools to v83 @renovate[bot] (#7865)
  • fix(deps): update dependency apprise to v1.12.0 @renovate[bot] (#7864)
  • fix(deps): update dependency yt-dlp to v2026.7.4 @renovate[bot] (#7866)
  • fix(deps): update dependency uvicorn to v0.50.1 @renovate[bot] (#7867)
  • fix(deps): update dependency uvicorn to v0.50.2 @renovate[bot] (#7868)
  • chore(deps): lock file maintenance @renovate[bot] (#7874)
  • chore(deps): update dependency mypy to v2.2.0 @renovate[bot] (#7873)
  • fix(deps): update dependency uvicorn to v0.51.0 @renovate[bot] (#7875)
  • chore(deps): update node.js to d5adb04 @renovate[bot] (#7878)
  • fix(deps): update dependency openai to v2.45.0 @renovate[bot] (#7882)
  • chore(deps): update dependency ruff to v0.15.21 @renovate[bot] (#7884)
  • chore(deps): update node.js to 5711a0d @renovate[bot] (#7883)
  • fix(deps): update dependency tzdata to v2026.3 @renovate[bot] (#7887)
  • chore(deps): update dependency types-requests to v2.33.0.20260712 @renovate[bot] (#7889)
  • chore(deps): update dependency coverage to v7.15.1 @renovate[bot] (#7892)
  • chore(deps): update dependency mypy to v2.3.0 @renovate[bot] (#7898)
  • chore(deps): lock file maintenance @renovate[bot] (#7913)
  • chore(deps): update dependency coverage to v7.15.2 @renovate[bot] (#7917)
  • chore(deps): update dependency types-python-dateutil to v2.9.0.20260716 @renovate[bot] (#7921)
  • fix(deps): update dependency fastapi to v0.139.1 @renovate[bot] (#7922)
  • fix(deps): update dependency fastapi to v0.139.2 @renovate[bot] (#7927)
  • chore(deps): update dependency ruff to v0.15.22 @renovate[bot] (#7926)
  • fix(deps): update dependency openai to v2.46.0 @renovate[bot] (#7928)
  • chore(deps): update dependency mkdocs-material to v9.7.7 @renovate[bot] (#7932)
🙏 New Contributors

🍴🍴🍴🍴🍴🍴

View originalPermalink
How v3.21.0 went

v3.20.1

Changed 1
  • Update fastapi to v0.138.0
Fixed 1
  • Invisible quantities in number inputs not rendering their value until the value changes
Security 1
  • Update pydantic-settings to v2.14.2

🍴🍴🍴🍴🍴🍴

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
  • fix(deps): update dependency pydantic-settings to v2.14.2 [security] @renovate[bot] (#7782)
  • chore(deps): update node.js to fdddfb3 @renovate[bot] (#7803)
  • fix(deps): update dependency fastapi to v0.138.0 @renovate[bot] (#7806)
  • chore(deps): update dependency coverage to v7.14.2 @renovate[bot] (#7807)

🍴🍴🍴🍴🍴🍴

View originalPermalink
How v3.20.1 went

v3.20.0

Added 3
  • Enhanced PR Lint/Validation
  • Warn when deleting foods used in recipes
  • Added version info to backup file
Fixed 6
  • Add missing dependencies in package.json
  • Support CSV/TXT upload and add validation for Plan to Eat import
  • Default ingredient_references on RecipeInstruction init
  • Upgrade pytest-asyncio
  • Refactor cookie settings for Home Assistant i-frame login
  • Send default_headers with curl_cffi impersonation (fixes 403 on WAF sites)
Removed 1
  • Drop unused python dependencies aniso8601 and appdirs
Security 3
  • Harden recipe content against stored XSS (chips, instructions, asset media)
  • Update vitest to v4 for security fixes
  • 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
  • chore(l10n): Crowdin locale sync @mealie-actions[bot] (#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] (#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] (#7757)
  • chore(l10n): New Crowdin updates @hay-kot (#7756)
  • chore(l10n): Crowdin locale sync @mealie-actions[bot] (#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
  • chore(deps): update dependency pytest-asyncio to v1.4.0 @renovate[bot] (#7694)
  • chore(deps): update dependency vitest to v4 [security] @renovate[bot] (#7723)
  • chore(deps): lock file maintenance @renovate[bot] (#7742)
  • fix(deps): update dependency python-multipart to v0.0.32 @renovate[bot] (#7729)
  • fix(deps): update dependency apprise to v1.11.0 @renovate[bot] (#7728)
  • fix(deps): update dependency uvicorn to v0.49.0 @renovate[bot] (#7744)
  • chore(deps): update dependency ruff to v0.15.16 @renovate[bot] (#7726)
  • fix(deps): update dependency openai to v2.41.0 @renovate[bot] (#7733)
  • chore(deps): update node.js to 9c1d881 @renovate[bot] (#7748)
  • chore(deps): update node.js to 40ad9f3 @renovate[bot] (#7752)
  • fix(deps): update dependency beautifulsoup4 to v4.15.0 @renovate[bot] (#7753)
  • chore(deps): lock file maintenance @renovate[bot] (#7759)
  • fix(deps): update dependency yt-dlp to v2026.6.9 @renovate[bot] (#7758)
  • fix(deps): update dependency openai to v2.41.1 @renovate[bot] (#7761)
  • fix(deps): update dependency pillow-heif to v1.4.0 @renovate[bot] (#7762)
  • chore(deps): update dependency ruff to v0.15.17 @renovate[bot] (#7763)
  • chore(deps): update dependency dompurify to v3.4.11 [security] @renovate[bot] (#7772)
  • chore(deps): update node.js to 032e78d @renovate[bot] (#7773)
  • chore(deps): update dependency pytest to v9.1.0 @renovate[bot] (#7776)
  • chore(deps): update dependency pylint to v4.0.6 @renovate[bot] (#7777)
  • fix(deps): update dependency fastapi to v0.137.1 @renovate[bot] (#7778)
  • fix(deps): update dependency sqlalchemy to v2.0.51 @renovate[bot] (#7783)
  • chore(deps): lock file maintenance @renovate[bot] (#7788)
  • fix(deps): update dependency openai to v2.42.0 @renovate[bot] (#7787)
  • fix(deps): update dependency openai to v2.43.0 @renovate[bot] (#7794)
  • fix(deps): update dependency fastapi to v0.137.2 @renovate[bot] (#7796)
  • chore(deps): update dependency ruff to v0.15.18 @renovate[bot] (#7797)
  • chore(deps): update node.js to 012c19a @renovate[bot] (#7799)
  • chore(deps): update node.js to 733e1c0 @renovate[bot] (#7800)
  • chore(deps): update dependency pytest to v9.1.1 @renovate[bot] (#7801)
🙏 New Contributors

🍴🍴🍴🍴🍴🍴

View originalPermalink
How v3.20.0 went

v3.19.2

Changed 1
  • Secret key is regenerated with a valid value, which invalidates existing tokens including API keys
Fixed 1
  • Ensure secret key is not empty to allow local authentication login

🍴🍴🍴🍴🍴🍴

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
  • fix(deps): update dependency fastapi to v0.136.3 @renovate[bot] (#7692)
  • chore(deps): update dependency coverage to v7.14.1 @renovate[bot] (#7691)
  • fix(deps): update dependency uvicorn to v0.48.0 @renovate[bot] (#7696)
  • fix(deps): update dependency sqlalchemy to v2.0.50 @renovate[bot] (#7693)
  • fix(deps): update dependency ingredient-parser-nlp to v2.7.0 @renovate[bot] (#7695)
  • chore(deps): lock file maintenance @renovate[bot] (#7697)

🍴🍴🍴🍴🍴🍴

View originalPermalink
How v3.19.2 went

v3.19.1

Fixed 1
  • Make most recipe action columns filterable
Security 1
  • 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
  • chore(deps): update dependency nuxt to v4.4.6 [security] @renovate[bot] (#7667)
  • chore(deps): update dependency types-pyyaml to v6.0.12.20260518 @renovate[bot] (#7670)
  • fix(deps): update dependency pydantic-settings to v2.14.1 @renovate[bot] (#7674)
  • fix(deps): update dependency lxml to v6.1.1 @renovate[bot] (#7679)
  • fix(deps): update dependency python-multipart to v0.0.29 @renovate[bot] (#7675)
  • fix(deps): update dependency uvicorn to v0.47.0 @renovate[bot] (#7684)
  • fix(deps): update dependency requests to v2.34.2 @renovate[bot] (#7683)
  • chore(deps): update dependency coverage to v7.14.0 @renovate[bot] (#7676)
  • chore(deps): update dependency mypy to v2.1.0 @renovate[bot] (#7681)
  • fix(deps): update dependency pyjwt to v2.13.0 @renovate[bot] (#7682)
  • chore(deps): lock file maintenance @renovate[bot] (#7685)
  • fix(deps): update dependency pydantic to v2.13.4 @renovate[bot] (#7673)
  • chore(deps): update node.js to 8530f76 @renovate[bot] (#7668)
  • fix(deps): update dependency openai to v2.38.0 @renovate[bot] (#7677)
  • chore(deps): update dependency types-requests to v2.33.0.20260518 @renovate[bot] (#7671)
  • chore(deps): update dependency types-python-dateutil to v2.9.0.20260518 @renovate[bot] (#7669)
  • fix(deps): update dependency orjson to v3.11.9 @renovate[bot] (#7672)
  • fix(deps): update dependency python-ldap to v3.4.7 @renovate[bot] (#7680)
  • chore(deps): update dependency ruff to v0.15.14 @renovate[bot] (#7678)

🍴🍴🍴🍴🍴🍴

View originalPermalink
How v3.19.1 went

v3.19.0

Added 1
  • Add in-app AI Provider Configuration to manage multiple AI providers for different tasks
Fixed 3
  • Fix inconsistent translation between "from an image" and "from images"
  • Enforce organize-group-data permission on food/tag/category mutations
  • Prevent swiping and scrolling simultaneously on shopping list
Security 1
  • Protect sensitive data in query filter API

🍴🍴🍴🍴🍴🍴

❗❗❗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 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
  • 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] (#7655)
  • chore(l10n): New Crowdin updates @hay-kot (#7653)

🍴🍴🍴🍴🍴🍴

View originalPermalink
How v3.19.0 went

v3.18.0

Added 2
  • Improve new shopping list UI
  • Remember screen lock preference
Fixed 10
  • Query Filter Builder Advanced bug
  • Make PWA share target functional on Android Chrome
  • Redirect to login and validate input on password reset flow
  • Update backend normalization to match search normalization logic
  • Update OpenAI recipe parse prompt to return the same number of ingredients as given
  • Redirect to new slug URL after recipe rename
Security 2
  • Block scriptable asset extensions and force Content-Disposition: attachment
  • 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
  • chore(l10n): New Crowdin updates @hay-kot (#7571)
  • chore(l10n): Crowdin locale sync @mealie-actions[bot] (#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] (#7637)
  • chore(l10n): New Crowdin updates @hay-kot (#7617)
⬆️ Dependency updates
  • chore(deps): update dependency mypy to v2 @renovate[bot] (#7584)
  • chore(deps): update dependency types-requests to v2.33.0.20260503 @renovate[bot] (#7587)
  • chore(deps): update node.js to 34f0eb9 @renovate[bot] (#7590)
  • chore(deps): update node.js to 050bf2b @renovate[bot] (#7592)
  • fix(deps): update dependency authlib to v1.7.1 @renovate[bot] (#7593)
  • fix(deps): update dependency openai to v2.34.0 @renovate[bot] (#7594)
  • fix(deps): update dependency authlib to v1.7.2 @renovate[bot] (#7606)

🍴🍴🍴🍴🍴🍴

View originalPermalink
How v3.18.0 went

v3.17.0

Added 2
  • Create menu for new shopping list items
  • Swipe controls to check off shopping list items on mobile
Fixed 8
  • Prevent delete-image dialog from reopening in a loop inside v-menu
  • Use correct title and icon on Recipe Actions data page
  • Allow user-configurable OIDC timeout
  • Pressing Enter in dialogs now confirms instead of silently closing
  • Add missing search bar to Recipe Data management page
  • Do not hit authenticated endpoints when logged out
  • Restore create-item button in recipe dropdowns for categories, tags, and tools
  • Adjust ingredient section spacing
Security 2
  • Update lxml to v6.1.0
  • 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
  • chore(l10n): Crowdin locale sync @mealie-actions[bot] (#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] (#7541)
  • chore(l10n): New Crowdin updates @hay-kot (#7546)
  • chore(l10n): Crowdin locale sync @mealie-actions[bot] (#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
  • chore(deps): update dependency mypy to v1.20.1 @renovate[bot] (#7490)
  • fix(deps): update dependency pydantic to v2.13.0 @renovate[bot] (#7492)
  • fix(deps): update dependency pydantic to v2.13.1 @renovate[bot] (#7505)
  • fix(deps): update dependency openai to v2.32.0 @renovate[bot] (#7507)
  • fix(deps): update dependency fastapi to v0.136.0 @renovate[bot] (#7511)
  • chore(deps): update dependency ruff to v0.15.11 @renovate[bot] (#7514)
  • fix(deps): update dependency lxml to v6.1.0 [security] @renovate[bot] (#7513)
  • chore(deps): update node.js to 807109d @renovate[bot] (#7516)
  • fix(deps): update dependency pydantic to v2.13.2 @renovate[bot] (#7517)
  • chore(deps): update node.js to 91447bc @renovate[bot] (#7519)
  • chore(deps): update node.js to e989123 @renovate[bot] (#7520)
  • fix(deps): update dependency authlib to v1.7.0 @renovate[bot] (#7525)
  • fix(deps): update dependency pydantic to v2.13.3 @renovate[bot] (#7533)
  • fix(deps): update dependency psycopg2-binary to v2.9.12 @renovate[bot] (#7539)
  • fix(deps): update dependency uvicorn to v0.45.0 @renovate[bot] (#7543)
  • chore(deps): update dependency mypy to v1.20.2 @renovate[bot] (#7544)
  • chore(deps): update dependency pre-commit to v4.6.0 @renovate[bot] (#7547)
  • fix(deps): update dependency uvicorn to v0.46.0 @renovate[bot] (#7553)
  • fix(deps): update dependency fastapi to v0.136.1 @renovate[bot] (#7556)
  • chore(deps): update dependency ruff to v0.15.12 @renovate[bot] (#7559)
  • fix(deps): update dependency tzdata to v2026.2 @renovate[bot] (#7560)
  • fix(deps): update dependency apprise to v1.10.0 @renovate[bot] (#7566)
  • fix(deps): update dependency python-multipart to v0.0.27 @renovate[bot] (#7567)
  • fix(deps): update dependency openai to v2.33.0 @renovate[bot] (#7570)
  • fix(deps): update dependency pydantic-settings to v2.14.0 @renovate[bot] (#7534)
  • chore(deps): update dependency axios to v1.15.2 [security] @renovate[bot] (#7579)
🙏 New Contributors

🍴🍴🍴🍴🍴🍴

View originalPermalink
How v3.17.0 went

v3.16.0

Added 1
  • Migrate PWA manifest to backend
Fixed 4
  • PWA now respects custom theme color setting
  • Blank query filter builder fields
  • Preserve ingredient section titles when parsing recipe ingredients
  • Misc frontend layout fixes
Security 1
  • 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] (#7478)
  • fix(deps): update dependency authlib to v1.6.11 [security] @renovate[bot] (#7481)
  • fix(deps): update dependency lxml to v6.0.4 @renovate[bot] (#7485)
🙏 New Contributors

🍴🍴🍴🍴🍴🍴

View originalPermalink
How v3.16.0 went
View all

Discussion