🍴🍴🍴🍴🍴🍴
🎉 Highlights
Simplified AI Imports
Importing recipes with AI has been vastly improved. Rather than several disparate import pages, you now import recipes with AI via the universal "Import with AI" page:
From here you can also choose several options previously only featured on a handful of pages:
The internals of how your providers are called has been rewritten as well to break up import tasks into separate calls to your provider, shrinking context windows and producing more consistent results.
Native OIDC endpoints
We now have native OIDC endpoints for OIDC services which only work via passkey (or otherwise don't rely on the browser session), such as Pocket ID and authentik. These should now work for you out of the box (see: #7804).
✨ New features
- feat: add re-roll button to meal planner entries @smashngrabb (#7348)
- feat: add native OIDC endpoints for mobile/desktop clients @DmitriiSer (#7804)
- feat: Unified AI recipe page @michael-genson (#8043)
- feat: skip expiring share link for fully-public groups/households @bferd (#7941)
- feat: Update ingredient parsing text @michael-genson (#8066)
- feat: Refine AI import page @michael-genson (#8067)
- feat: Jump from toast @miah120 (#7986)
🐛 Bug fixes
- fix: handle HowToSection missing itemListElement in clean_instructions @ishirbhan (#7616)
- fix: typo in en-US food seed data @sevmonster (#7750)
- fix: recipe image lost after using "Get" (fetch by URL) then saving @bferd (#8021)
- fix: revalidate stale group/household preferences cache and settings forms @bferd (#8022)
- fix: fix public check for recipe sharing @michael-genson (#8055)
- fix: improve IntegrityError message for unique constraint violations @nzyz995 (#8050)
- fix: Allow psycopg2-binary to be optional again @michael-genson (#8065)
- fix: prevent recipe tags from hiding card actions @feilongcheng (#8028)
- fix: keep the whole image visible after rotating it in the image cropper @derekdiliu (#8016)
- fix: prevent registration with empty group name @Luna-81 (#8105)
- fix: reset ingredient parser dialog state when reopening @derekdiliu (#8106)
- fix: cascade delete a user's meal plans and shopping lists @lotusk (#8120)
- fix: prevent meal planner recipe card menu from being clipped in narrow columns @elliot-ultra (#8117)
- fix: await validation before creating admin user @ARYA8532 (#8118)
🧰 Maintenance
28 changes
- chore(l10n): New Crowdin updates @hay-kot (#7970)
- chore(l10n): New Crowdin updates @hay-kot (#7978)
- chore(l10n): New Crowdin updates @hay-kot (#7982)
- chore(l10n): New Crowdin updates @hay-kot (#7987)
- chore(l10n): Crowdin locale sync @mealie-actions[bot] (#7993)
- chore(l10n): New Crowdin updates @hay-kot (#7995)
- chore(l10n): New Crowdin updates @hay-kot (#8002)
- chore(l10n): New Crowdin updates @hay-kot (#8009)
- chore(l10n): New Crowdin updates @hay-kot (#8015)
- chore(l10n): New Crowdin updates @hay-kot (#8025)
- chore(l10n): New Crowdin updates @hay-kot (#8029)
- chore(l10n): Crowdin locale sync @mealie-actions[bot] (#8037)
- chore(l10n): New Crowdin updates @hay-kot (#8039)
- chore(l10n): New Crowdin updates @hay-kot (#8048)
- chore(l10n): New Crowdin updates @hay-kot (#8056)
- chore(l10n): New Crowdin updates @hay-kot (#8061)
- chore(l10n): New Crowdin updates @hay-kot (#8069)
- chore(l10n): New Crowdin updates @hay-kot (#8073)
- chore(l10n): New Crowdin updates @hay-kot (#8077)
- chore(l10n): New Crowdin updates @hay-kot (#8079)
- chore(l10n): New Crowdin updates @hay-kot (#8086)
- chore(l10n): Crowdin locale sync @mealie-actions[bot] (#8101)
- chore(l10n): New Crowdin updates @hay-kot (#8104)
- chore(l10n): New Crowdin updates @hay-kot (#8107)
- chore: treat all warnings as errors in pytest unless explicitly ignored. @bestxmg (#8094)
- chore: fix frontend lint @michael-genson (#8112)
- chore(l10n): New Crowdin updates @hay-kot (#8122)
- chore(l10n): New Crowdin updates @hay-kot (#8128)
🔨 Internal development
- dev: bump dev image to trixie @michael-genson (#7968)
- dev: fix all the warning in pytest @bestxmg (#8033)
- dev: bind-mount dev postgres data to dev/data/postgres @lotusk (#8046)
- dev: Shopping list unit test @miah120 (#7969)
⬆️ Dependency updates
42 changes
- fix(deps): update dependency openai to v2.48.0 @renovate[bot] (#7972)
- chore(deps): update dependency types-pyyaml to v6.0.12.20260724 @renovate[bot] (#7975)
- fix(deps): update dependency fastapi to v0.140.0 @renovate[bot] (#7981)
- chore(deps): update dependency ruff to v0.16.0 @michael-genson (#7983)
- fix(deps): update dependency fastapi to v0.140.7 @renovate[bot] (#7989)
- fix(deps): update dependency openai to v2.49.0 @renovate[bot] (#7992)
- fix(deps): update dependency fastapi to v0.140.8 @renovate[bot] (#7996)
- fix(deps): update dependency fastapi to v0.140.9 @renovate[bot] (#7997)
- fix(deps): update dependency fastapi to v0.140.13 @renovate[bot] (#7998)
- fix(deps): update dependency openai to v2.50.0 @renovate[bot] (#7999)
- chore(deps): lock file maintenance @renovate[bot] (#8000)
- fix(deps): update dependency fastapi to v0.141.0 @renovate[bot] (#8004)
- fix(deps): update dependency uvicorn to v0.52.0 @renovate[bot] (#8005)
- fix(deps): update dependency fastapi to v0.141.1 @renovate[bot] (#8006)
- chore(deps): update dependency ruff to v0.16.1 @renovate[bot] (#7971)
- fix(deps): update dependency openai to v2.51.0 @renovate[bot] (#8008)
- fix(deps): update dependency openai to v2.52.0 @renovate[bot] (#8017)
- fix(deps): update dependency uvicorn to v0.52.1 @renovate[bot] (#8023)
- chore(deps): update dependency coverage to v7.15.3 @renovate[bot] (#8031)
- chore(deps): update dependency dompurify to v3.4.13 [security] @renovate[bot] (#8032)
- fix(deps): update dependency openai to v2.52.1 @renovate[bot] (#8035)
- fix(deps): update dependency openai to v2.53.0 @renovate[bot] (#8036)
- chore(deps): update dependency httpx2 to v2.9.1 @renovate[bot] (#8038)
- fix(deps): update dependency alembic to v1.19.0 @renovate[bot] (#8041)
- chore(deps): update node.js to 934240a @renovate[bot] (#8054)
- chore(deps): lock file maintenance @renovate[bot] (#8042)
- chore(deps): update dependency coverage to v7.15.4 @renovate[bot] (#8062)
- chore(deps): update dependency types-python-dateutil to v2.9.0.20260807 @renovate[bot] (#8070)
- fix(deps): update dependency pydantic-settings to v2.15.0 @renovate[bot] (#8071)
- chore(deps): update dependency ruff to v0.16.2 @renovate[bot] (#8072)
- fix(deps): update dependency alembic to v1.19.1 @renovate[bot] (#8080)
- chore(deps): update dependency setuptools to v84 @renovate[bot] (#8081)
- fix(deps): update dependency recipe-scrapers to v15.12.0 @renovate[bot] (#8082)
- chore(deps): update dependency httpx2 to v2.10.0 @renovate[bot] (#8085)
- chore(deps): update dependency pylint to v4.0.7 @renovate[bot] (#8090)
- chore(deps): update dependency pre-commit to v4.6.2 @renovate[bot] (#8099)
- fix(deps): update dependency openai to v2.54.0 @renovate[bot] (#8108)
- fix(deps): update dependency sqlalchemy to v2.0.52 @renovate[bot] (#8109)
- chore(deps): lock file maintenance @renovate[bot] (#8110)
- chore(deps): lock file maintenance @renovate[bot] (#8114)
- fix(deps): update dependency openai to v3 @renovate[bot] (#8113)
- fix(deps): update dependency uvicorn to v0.52.2 @renovate[bot] (#8129)
🙏 New Contributors
- @smashngrabb made their first contribution in #7348
- @ishirbhan made their first contribution in #7616
- @sevmonster made their first contribution in #7750
- @bestxmg made their first contribution in #8033
- @DmitriiSer made their first contribution in #7804
- @lotusk made their first contribution in #8046
- @nzyz995 made their first contribution in #8050
- @feilongcheng made their first contribution in #8028
- @derekdiliu made their first contribution in #8016
- @Luna-81 made their first contribution in #8105
- @elliot-ultra made their first contribution in #8117
- @ARYA8532 made their first contribution in #8118