🍴🍴🍴🍴🍴🍴
This version of Mealie contains a whole bunch of new features and bug fixes, including first-time contributions from 9 users (and a new bot)! Check out the highlights below 👇
🎉 Highlights
-
When importing a recipe, you can now import the original URL's categories (similar to how you can import tags) (#6523)
-
You can now use custom OpenAI prompts to overwrite the ones included with Mealie. Check out the docs for more info on how to do this (#6588)
-
We've migrated our OpenAI implementation to use structured outputs. This means much better support for modern models, which previously didn't support the legacy JSON mode (#6964)
-
You can now add a full range of dates from the meal planner to your shopping list, instead of adding one day at a time (#6981):
🚨 Breaking changes
There is a minor breaking change in #6781: GET requests to /api/households/invitations are now locked to admins only. This doesn't change the invitation flow for users, as requests using a particular invitation are unaffected. Check out the PR for more details.
- fix: disable invitations when password login is disabled @p0lycarpio (#6781)
✨ New features
- feat: Use toggle button for switching any/all mode for search filters @lehnerpat (#6833)
- feat: add discard confirmation dialog for recipe editor @hay-kot (#6941)
- feat: Add "sprig" as a unit. @Fjodor42 (#6934)
- feat: Added Option to Import Recipe Category During Recipe Import @Gtt1229 (#6523)
- feat: Customizable OpenAI prompts (#5146) @ImanuelBertrand (#6588)
- feat: Improve recipe assets preview @p0lycarpio (#6602)
- feat: Migrate OpenAI implementation to use structured outputs @michael-genson (#6964)
- feat: Add range of dates to shopping list from meal planner @michael-genson (#6981)
- feat: Query relative dates @michael-genson (#6984)
🐛 Bug fixes
- fix: Tags can't be renamed @lehnerpat (#6835)
- fix: Coerce null servings into 0 servings @michael-genson (#6839)
- fix: prevent XSS via javascript: URIs in recipe actions @hay-kot (#6885)
- fix: Make 'auto-search' toggle change color to indicate state @lehnerpat (#6809)
- fix: correct global scroll strategy to prevent menu fixation @jeromer-dev (#6577)
- fix: use GITHUB_TOKEN for auto-merge to respect CI checks @hay-kot (#6953)
- fix: Keep ingredient headers in cook mode @codefaux (#6946)
- fix: dispose AlchemyExporter engine after restore completes @hay-kot (#6942)
- fix: Seed data - en-US only - correct [some] plural names and add [some] accented characters @stvhwrd (#6405)
- fix: sub-recipes in multi group setup (#6652) @ImanuelBertrand (#6663)
- fix: disable invitations when password login is disabled @p0lycarpio (#6781)
- fix: recipe context menu @p0lycarpio (#6782)
- fix: Disable context hover @michael-genson (#6962)
- fix: Remove deprecated warning from shopping list editor @michael-genson (#6963)
- fix: service-worker precache manifest entries not generated correctly @morgan-dgk (#6815)
- fix: Re-enable some style tags @michael-genson (#6982)
- fix: Flaky $NOW tests @michael-genson (#6990)
🧰 Maintenance
40 changes
- chore(l10n): Crowdin locale sync @github-actions (#6825)
- chore(l10n): New Crowdin updates @hay-kot (#6806)
- chore(l10n): New Crowdin updates @hay-kot (#6827)
- chore(l10n): New Crowdin updates @hay-kot (#6832)
- chore(l10n): New Crowdin updates @hay-kot (#6840)
- chore(l10n): New Crowdin updates @hay-kot (#6843)
- chore(l10n): New Crowdin updates @hay-kot (#6861)
- chore(l10n): New Crowdin updates @hay-kot (#6863)
- chore(l10n): New Crowdin updates @hay-kot (#6864)
- chore(l10n): Crowdin locale sync @github-actions (#6862)
- chore(auto): Update pre-commit hooks @github-actions (#6866)
- chore(l10n): New Crowdin updates @hay-kot (#6867)
- chore(l10n): New Crowdin updates @hay-kot (#6870)
- chore(l10n): New Crowdin updates @hay-kot (#6886)
- chore(auto): Update pre-commit hooks @github-actions (#6895)
- chore(l10n): New Crowdin updates @hay-kot (#6888)
- chore(l10n): Crowdin locale sync @github-actions (#6891)
- chore(l10n): New Crowdin updates @hay-kot (#6905)
- chore(l10n): New Crowdin updates @hay-kot (#6908)
- chore(l10n): New Crowdin updates @hay-kot (#6911)
- chore(l10n): New Crowdin updates @hay-kot (#6912)
- chore(l10n): New Crowdin updates @hay-kot (#6922)
- chore(l10n): New Crowdin updates @hay-kot (#6925)
- chore(l10n): Crowdin locale sync @github-actions (#6924)
- chore(l10n): New Crowdin updates @hay-kot (#6929)
- chore(l10n): New Crowdin updates @hay-kot (#6933)
- chore(auto): Update pre-commit hooks @github-actions (#6932)
- chore(l10n): New Crowdin updates @hay-kot (#6935)
- chore(l10n): New Crowdin updates @hay-kot (#6936)
- chore(l10n): New Crowdin updates @hay-kot (#6938)
- chore(l10n): New Crowdin updates @hay-kot (#6944)
- chore: add workflow to auto-merge l10n PRs @hay-kot (#6948)
- chore(l10n): New Crowdin updates @hay-kot (#6949)
- chore(l10n): New Crowdin updates @hay-kot (#6954)
- chore(l10n): New Crowdin updates @hay-kot (#6959)
- chore(l10n): New Crowdin updates @hay-kot (#6960)
- chore(l10n): New Crowdin updates @hay-kot (#6967)
- chore(l10n): Crowdin locale sync @mealie-actions (#6977)
- chore(l10n): New Crowdin updates @hay-kot (#6979)
- chore(l10n): New Crowdin updates @hay-kot (#6983)
- chore(l10n): New Crowdin updates @hay-kot (#6987)
📚 Documentation
- docs: Fix typo and remove unused tip @michael-genson (#6849)
- docs: fix authentik oidc link @Darwiner (#6851)
- docs: Add an info callout about client-side cookies. @alexandreeberhardt (#6830)
- docs: Misc. cleanup @michael-genson (#6988)
🔨 Internal development
- dev: Enable CI on merge queues @michael-genson (#6955)
- dev: Bunch of GH workflow fixes @michael-genson (#6956)
- dev: Skip Trivy on merge queue @michael-genson (#6957)
- dev: Add tasks for e2e tests @lehnerpat (#6797)
- dev: Improve caching in taskfile @lehnerpat (#6798)
- dev: Switch to bot token for locale sync @michael-genson (#6969)
- dev: Fix token vars @michael-genson (#6970)
- dev: Increase locale merge limit to 300 and allow PRs from Mealie bot @michael-genson (#6972)
- dev: Allow locale sync path in auto merge @michael-genson (#6974)
- dev: Switch approver for automated i18n merges @michael-genson (#6976)
- dev: Switch to Mealie bot for auto-merging @michael-genson (#6978)
⬆️ Dependency updates
27 changes
- fix(deps): update dependency pillow to v12.1.0 @renovate (#6816)
- chore(deps): update dependency types-requests to v2.32.4.20260107 @renovate (#6846)
- chore(deps): update dependency ruff to v0.14.11 @renovate (#6852)
- fix(deps): update dependency alembic to v1.18.0 @renovate (#6858)
- fix(deps): update dependency openai to v2.15.0 @renovate (#6859)
- chore(deps): update node.js to 0ab63ca @renovate (#6872)
- chore(deps): update dependency ruff to v0.14.13 @renovate (#6881)
- fix(deps): update dependency alembic to v1.18.1 @renovate (#6878)
- fix(deps): update dependency apprise to v1.9.7 @renovate (#6898)
- chore(deps): update node.js to b2b2184 @renovate (#6879)
- chore(deps): update dependency setuptools to v80.10.1 @renovate (#6901)
- fix(deps): update dependency sqlalchemy to v2.0.46 @renovate (#6903)
- chore(deps): update dependency ruff to v0.14.14 @renovate (#6909)
- fix(deps): update dependency pillow-heif to v1.2.0 @renovate (#6910)
- chore(deps): update dependency types-python-dateutil to v2.9.0.20260124 @renovate (#6913)
- chore(deps): update dependency rich to v14.3.0 @renovate (#6919)
- chore(deps): update dependency rich to v14.3.1 @renovate (#6923)
- fix(deps): update dependency python-multipart to v0.0.22 @renovate (#6926)
- fix(deps): update dependency openai to v2.16.0 @renovate (#6937)
- chore(deps): update dependency coverage to v7.13.2 @renovate (#6927)
- fix(deps): update dependency orjson to v3.11.6 @renovate (#6952)
- chore(deps): update dependency setuptools to v80.10.2 @renovate (#6930)
- fix(deps): update dependency alembic to v1.18.3 @renovate (#6945)
- fix(deps): update dependency pyjwt to v2.11.0 @renovate (#6958)
- fix(deps): update dependency ingredient-parser-nlp to v2.5.0 @renovate (#6961)
- chore(deps): update dependency rich to v14.3.2 @renovate (#6980)
- fix(deps): update dependency orjson to v3.11.7 @renovate (#6989)
- chore(deps): pin dependency freezegun to ==1.5.5 (#6991)
🙏 New Contributors
- @Darwiner made their first contribution in #6851
- @alexandreeberhardt made their first contribution in #6830
- @jeromer-dev made their first contribution in #6577
- @codefaux made their first contribution in #6946
- @Fjodor42 made their first contribution in #6934
- @stvhwrd made their first contribution in #6405
- @Gtt1229 made their first contribution in #6523
- @ImanuelBertrand made their first contribution in #6588
- @morgan-dgk made their first contribution in #6815
- @mealie-actions[bot] made their first contribution in #6977