Happy Halloween! Hopefully everyone's got some spooky recipes to try out today.
🎉 Highlights
You can now fully customize AI prompts in-app, with far greater control. You can choose to append to existing prompts, completely replace prompts, and add custom global instructions which are added to every prompt which produces recipe data. The old OPENAI_CUSTOM_PROMPT_DIR env var has been removed, but if you had any custom prompts they will be imported into the new format automatically.
Instructions can now have individual durations. This means you can specify a particular step takes "10 minutes", for example.
Meal plan entries can now be created for the entire week, rather than a particular day/time. Great for when you know you're going to make something this week, but you're not sure when yet.
Another big update packed with hotly-requested features and tons of bug fixes. Grab it while it's hot!
🎉 Highlights
You can now automatically convert recipes on the fly between metric and Imperial units:
Recipe times are now structured. This enables better searches (such as looking for recipes you can make within 30 minutes):
Shopping list entry is vastly simplified: you can type anything into the simple entry box and Mealie will suggest items from your food store. If there's a match, you will add the food; if not, you'll add the exact term as a note. No more clunky entry where you have to guess where you need to type something:
You can now subscribe to your meal planner as an iCal calendar feed. Once turned on, anyone with the iCal link can subscribe without any additional auth. This means you can add your meal plans to your favorite calendar app (Google Calendar, Apple Calendar, Home Assistant, etc.):
We now support auth through a reverse proxy. Check out the docs on how to configure this for your instance.
We've expanded our theme customization to include branding, allowing you to set a custom name and custom logo for your instance. Check out the docs for more info.
This PR contains the following updates:
| Package | Update | Change |
|---|---|---|
| [ghcr.io/mealie-recipes/mealie](https://github.com/mealie-recipes/mealie) | minor | `v3.28.0` → `v3.30.0` |
---
### Release Notes
<details>
<summary>mealie-recipes/mealie (ghcr.io/mealie-recipes/mealie)</summary>
### [`v3.30.0`](https://github.com/mealie-recipes/mealie/releases/tag/v3.30.0)
[Compare Source](https://github.com/mealie-recipes/mealie/compare/v3.29.0...v3.30.0)
### 🎃🎃🎃🎃🎃🎃
Happy Halloween! Hopefully everyone's got some spooky recipes to try out today.
#### 🎉 Highlights
- You can now fully customize AI prompts in-app, with far greater control. You can choose to append to existing prompts, completely replace prompts, and add custom global instructions which are added to *every* prompt which produces recipe data. The old `OPENAI_CUSTOM_PROMPT_DIR` env var has been removed, but if you had any custom prompts they will be imported into the new format automatically.
- Instructions can now have individual durations. This means you can specify a particular step takes "10 minutes", for example.
- Meal plan entries can now be created for the entire week, rather than a particular day/time. Great for when you know you're going to make something this week, but you're not sure when yet.
<img width="1000" alt="image" src="https://github.com/user-attachments/assets/63775091-9187-4362-9942-1a0ea99b4293" />
#### ✨ New features
- feat: In-app AI prompt customization [@​michael-genson](https://github.com/michael-genson) ([#​8736](https://github.com/mealie-recipes/mealie/issues/8736))
- feat: declare route permissions with a require() dependency [@​hay-kot](https://github.com/hay-kot) ([#​8763](https://github.com/mealie-recipes/mealie/issues/8763))
- feat: enforce route permission helpers with semgrep in CI [@​hay-kot](https://github.com/hay-kot) ([#​8769](https://github.com/mealie-recipes/mealie/issues/8769))
- feat: Sort recipes by total time [@​NutzerXY](https://github.com/NutzerXY) ([#​8692](https://github.com/mealie-recipes/mealie/issues/8692))
- feat: import a pasted Mealie recipe export with its full structure [@​Rouzax](https://github.com/Rouzax) ([#​8651](https://github.com/mealie-recipes/mealie/issues/8651))
- feat: add centiliter to seeded ingredient units [@​Tibood](https://github.com/Tibood) ([#​8766](https://github.com/mealie-recipes/mealie/issues/8766))
- feat: Show recipe owner [@​michael-genson](https://github.com/michael-genson) ([#​8823](https://github.com/mealie-recipes/mealie/issues/8823))
- feat: add OIDC_VERIFY_X509_STRICT setting and adjust SSL verification… [@​diepeterpan](https://github.com/diepeterpan) ([#​8715](https://github.com/mealie-recipes/mealie/issues/8715))
- feat: Instruction durations [@​granto](https://github.com/granto) ([#​8705](https://github.com/mealie-recipes/mealie/issues/8705))
- feat: weekly meal planning [@​michael-genson](https://github.com/michael-genson) ([#​8836](https://github.com/mealie-recipes/mealie/issues/8836))
- feat: customize ical [@​michael-genson](https://github.com/michael-genson) ([#​8909](https://github.com/mealie-recipes/mealie/issues/8909))
- feat: manage timeline event image [@​michael-genson](https://github.com/michael-genson) ([#​8928](https://github.com/mealie-recipes/mealie/issues/8928))
#### 🐛 Bug fixes
- fix: scope migration imports to the group and limit archive size [@​hay-kot](https://github.com/hay-kot) ([#​8761](https://github.com/mealie-recipes/mealie/issues/8761))
- fix: restrict i18n locale lookup to bundled translation files [@​hay-kot](https://github.com/hay-kot) ([#​8759](https://github.com/mealie-recipes/mealie/issues/8759))
- fix: require can_organize to manage units, tools, labels, recipe actions [@​hay-kot](https://github.com/hay-kot) ([#​8783](https://github.com/mealie-recipes/mealie/issues/8783))
- fix: Un-approve Crowdin translations to allow community to vote on them [@​michael-genson](https://github.com/michael-genson) ([#​8787](https://github.com/mealie-recipes/mealie/issues/8787))
- fix: load food/unit aliases with the page; index-friendly food filter [@​zf6fm64s8j-bit](https://github.com/zf6fm64s8j-bit) ([#​8675](https://github.com/mealie-recipes/mealie/issues/8675))
- fix: preserve recipe image when upload validation fails [@​YibingZhang325](https://github.com/YibingZhang325) ([#​8506](https://github.com/mealie-recipes/mealie/issues/8506))
- fix: keep servings and yield quantity when translating AI-imported recipes [@​LembkeM](https://github.com/LembkeM) ([#​8636](https://github.com/mealie-recipes/mealie/issues/8636))
- fix: translate mealplan timeline event subjects by locale [@​Frank-Ping](https://github.com/Frank-Ping) ([#​8664](https://github.com/mealie-recipes/mealie/issues/8664))
- fix: restore the 404 redirects for /r/ recipe links (Nuxt 3 error page) [@​mrhard9090](https://github.com/mrhard9090) ([#​8568](https://github.com/mealie-recipes/mealie/issues/8568))
- fix: bump sqlalchemy [@​michael-genson](https://github.com/michael-genson) ([#​8798](https://github.com/mealie-recipes/mealie/issues/8798))
- fix: Bump ingredient-parser-nlp [@​michael-genson](https://github.com/michael-genson) ([#​8801](https://github.com/mealie-recipes/mealie/issues/8801))
- fix: show an error when a user lacks permission for an action [@​michael-genson](https://github.com/michael-genson) ([#​8808](https://github.com/mealie-recipes/mealie/issues/8808))
- fix: show an error when a recipe asset upload is rejected [@​michael-genson](https://github.com/michael-genson) ([#​8809](https://github.com/mealie-recipes/mealie/issues/8809))
- fix: accept the signed-in user's own username and email in validators [@​michael-genson](https://github.com/michael-genson) ([#​8811](https://github.com/mealie-recipes/mealie/issues/8811))
- fix: switch `filter_by` statements to explicit expressions to properly resolve proxy attrs [@​michael-genson](https://github.com/michael-genson) ([#​8814](https://github.com/mealie-recipes/mealie/issues/8814))
- fix: validate image type on recipe hero image upload [@​bferd](https://github.com/bferd) ([#​8498](https://github.com/mealie-recipes/mealie/issues/8498))
- fix: reject an unrecognized DB_ENGINE instead of using SQLite [@​Yi-111-a](https://github.com/Yi-111-a) ([#​8605](https://github.com/mealie-recipes/mealie/issues/8605))
- fix: set the cover image on recipes created from AI images [@​pcbeingused333](https://github.com/pcbeingused333) ([#​8739](https://github.com/mealie-recipes/mealie/issues/8739))
- fix: scale merged duplicate ingredients when adding a recipe to a shopping list [@​pcbeingused333](https://github.com/pcbeingused333) ([#​8764](https://github.com/mealie-recipes/mealie/issues/8764))
- fix: match multi-word foods when the brute parser splits off an unknown unit [@​gustaf-a](https://github.com/gustaf-a) ([#​8744](https://github.com/mealie-recipes/mealie/issues/8744))
- fix: report blocked recipe action targets instead of dropping them silently [@​Hellraiser28](https://github.com/Hellraiser28) ([#​8747](https://github.com/mealie-recipes/mealie/issues/8747))
- fix: Consistent spacing for recipe cards with/without tags [@​michael-genson](https://github.com/michael-genson) ([#​8824](https://github.com/mealie-recipes/mealie/issues/8824))
- fix: Switch expired token delete to a batch delete [@​michael-genson](https://github.com/michael-genson) ([#​8825](https://github.com/mealie-recipes/mealie/issues/8825))
- fix: don't copy file modes [@​NyCodeGHG](https://github.com/NyCodeGHG) ([#​8867](https://github.com/mealie-recipes/mealie/issues/8867))
- fix: require can_manage_household to manage notifiers and webhooks [@​hay-kot](https://github.com/hay-kot) ([#​8885](https://github.com/mealie-recipes/mealie/issues/8885))
- fix: refresh OIDC avatars from stable URLs [@​nzyz995](https://github.com/nzyz995) ([#​8588](https://github.com/mealie-recipes/mealie/issues/8588))
- fix: listen on IPv4 and IPv6 by default [@​mvanhorn](https://github.com/mvanhorn) ([#​8569](https://github.com/mealie-recipes/mealie/issues/8569))
- fix: backfill missing AI provider settings [@​michael-genson](https://github.com/michael-genson) ([#​8924](https://github.com/mealie-recipes/mealie/issues/8924))
#### 🧰 Maintenance
<details>
<summary>25 changes</summary>
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8772](https://github.com/mealie-recipes/mealie/issues/8772))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8778](https://github.com/mealie-recipes/mealie/issues/8778))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8784](https://github.com/mealie-recipes/mealie/issues/8784))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8793](https://github.com/mealie-recipes/mealie/issues/8793))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8804](https://github.com/mealie-recipes/mealie/issues/8804))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8807](https://github.com/mealie-recipes/mealie/issues/8807))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8816](https://github.com/mealie-recipes/mealie/issues/8816))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8817](https://github.com/mealie-recipes/mealie/issues/8817))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8829](https://github.com/mealie-recipes/mealie/issues/8829))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8831](https://github.com/mealie-recipes/mealie/issues/8831))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8841](https://github.com/mealie-recipes/mealie/issues/8841))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8845](https://github.com/mealie-recipes/mealie/issues/8845))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8853](https://github.com/mealie-recipes/mealie/issues/8853))
- chore(l10n): Crowdin locale sync @​[mealie-actions\[bot\]](https://github.com/apps/mealie-actions) ([#​8861](https://github.com/mealie-recipes/mealie/issues/8861))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8862](https://github.com/mealie-recipes/mealie/issues/8862))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8875](https://github.com/mealie-recipes/mealie/issues/8875))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8894](https://github.com/mealie-recipes/mealie/issues/8894))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8900](https://github.com/mealie-recipes/mealie/issues/8900))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8902](https://github.com/mealie-recipes/mealie/issues/8902))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8904](https://github.com/mealie-recipes/mealie/issues/8904))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8906](https://github.com/mealie-recipes/mealie/issues/8906))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8908](https://github.com/mealie-recipes/mealie/issues/8908))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8916](https://github.com/mealie-recipes/mealie/issues/8916))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8923](https://github.com/mealie-recipes/mealie/issues/8923))
- chore(auto): Update pre-commit hooks @​[mealie-actions\[bot\]](https://github.com/apps/mealie-actions) ([#​8876](https://github.com/mealie-recipes/mealie/issues/8876))
</details>
#### 📚 Documentation
- docs: encode the page URL in the import bookmarklet [@​michael-genson](https://github.com/michael-genson) ([#​8810](https://github.com/mealie-recipes/mealie/issues/8810))
#### 🔨 Internal development
- dev: check every declared route permission against real users [@​hay-kot](https://github.com/hay-kot) ([#​8767](https://github.com/mealie-recipes/mealie/issues/8767))
- dev: Migrate backend CI/CD checks to match pre-commit [@​michael-genson](https://github.com/michael-genson) ([#​8802](https://github.com/mealie-recipes/mealie/issues/8802))
- dev: fix test which relies on specific Crowdin translations [@​michael-genson](https://github.com/michael-genson) ([#​8887](https://github.com/mealie-recipes/mealie/issues/8887))
#### ⬆️ Dependency updates
<details>
<summary>54 changes</summary>
- chore(deps): update dependency zensical to v0.0.70 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8765](https://github.com/mealie-recipes/mealie/issues/8765))
- chore(deps): update dependency pre-commit to v4.7.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8771](https://github.com/mealie-recipes/mealie/issues/8771))
- chore(deps): lock file maintenance @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8786](https://github.com/mealie-recipes/mealie/issues/8786))
- fix(deps): update dependency openai to v3.31.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8791](https://github.com/mealie-recipes/mealie/issues/8791))
- fix(deps): update dependency authlib to v1.9.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8792](https://github.com/mealie-recipes/mealie/issues/8792))
- fix(deps): update dependency fastapi to v0.143.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8794](https://github.com/mealie-recipes/mealie/issues/8794))
- fix(deps): update dependency pydantic-settings to v2.16.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8795](https://github.com/mealie-recipes/mealie/issues/8795))
- fix(deps): update dependency authlib to v1.9.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8796](https://github.com/mealie-recipes/mealie/issues/8796))
- chore(deps): update node.js to [`1407820`](https://github.com/mealie-recipes/mealie/commit/1407820) @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8803](https://github.com/mealie-recipes/mealie/issues/8803))
- fix(deps): update dependency fastapi to v0.143.2 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8812](https://github.com/mealie-recipes/mealie/issues/8812))
- chore(deps): update dependency ruff to v0.17.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8815](https://github.com/mealie-recipes/mealie/issues/8815))
- fix(deps): update dependency fastapi to v0.143.3 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8820](https://github.com/mealie-recipes/mealie/issues/8820))
- chore(deps): update dependency zensical to v0.0.71 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8819](https://github.com/mealie-recipes/mealie/issues/8819))
- fix(deps): update dependency sqlalchemy to v2.1.5 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8827](https://github.com/mealie-recipes/mealie/issues/8827))
- fix(deps): update dependency openai to v3.32.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8828](https://github.com/mealie-recipes/mealie/issues/8828))
- fix(deps): update dependency openai to v3.33.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8830](https://github.com/mealie-recipes/mealie/issues/8830))
- fix(deps): update dependency openai to v3.34.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8839](https://github.com/mealie-recipes/mealie/issues/8839))
- fix(deps): update dependency fastapi to v0.143.5 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8846](https://github.com/mealie-recipes/mealie/issues/8846))
- fix(deps): update dependency fastapi to v0.146.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8850](https://github.com/mealie-recipes/mealie/issues/8850))
- chore(deps): update dependency httpx2 to v2.14.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8849](https://github.com/mealie-recipes/mealie/issues/8849))
- fix(deps): update dependency recipe-scrapers to v15.13.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8851](https://github.com/mealie-recipes/mealie/issues/8851))
- fix(deps): update dependency fastapi to v0.148.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8854](https://github.com/mealie-recipes/mealie/issues/8854))
- fix(deps): update dependency pint to v0.26.2 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8857](https://github.com/mealie-recipes/mealie/issues/8857))
- chore(deps): update dependency httpx2 to v2.15.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8858](https://github.com/mealie-recipes/mealie/issues/8858))
- fix(deps): update dependency fastapi to v0.150.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8860](https://github.com/mealie-recipes/mealie/issues/8860))
- chore(deps): update dependency setuptools to v84.2.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8859](https://github.com/mealie-recipes/mealie/issues/8859))
- fix(deps): update dependency fastapi to v0.151.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8863](https://github.com/mealie-recipes/mealie/issues/8863))
- fix(deps): update dependency pydantic-settings to v2.16.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8865](https://github.com/mealie-recipes/mealie/issues/8865))
- fix(deps): update dependency fastapi to v0.152.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8866](https://github.com/mealie-recipes/mealie/issues/8866))
- fix(deps): update dependency openai to v3.35.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8842](https://github.com/mealie-recipes/mealie/issues/8842))
- fix(deps): update dependency pillow to v13 \[security] @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8822](https://github.com/mealie-recipes/mealie/issues/8822))
- fix(deps): update dependency fastapi to v0.154.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8870](https://github.com/mealie-recipes/mealie/issues/8870))
- chore(deps): update dependency setuptools to v84.2.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8871](https://github.com/mealie-recipes/mealie/issues/8871))
- chore(deps): lock file maintenance @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8873](https://github.com/mealie-recipes/mealie/issues/8873))
- fix(deps): update dependency fastapi to v0.156.4 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8872](https://github.com/mealie-recipes/mealie/issues/8872))
- chore(deps): lock file maintenance @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8874](https://github.com/mealie-recipes/mealie/issues/8874))
- chore(deps): update dependency types-python-dateutil to v2.9.0.20261021 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8877](https://github.com/mealie-recipes/mealie/issues/8877))
- fix(deps): update dependency openai to v3.36.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8883](https://github.com/mealie-recipes/mealie/issues/8883))
- fix(deps): update dependency sqlalchemy to v2.1.6 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8884](https://github.com/mealie-recipes/mealie/issues/8884))
- fix(deps): update dependency yt-dlp to v2026.10.21 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8889](https://github.com/mealie-recipes/mealie/issues/8889))
- fix(deps): update dependency openai to v3.36.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8891](https://github.com/mealie-recipes/mealie/issues/8891))
- fix(deps): update dependency alembic to v1.20.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8890](https://github.com/mealie-recipes/mealie/issues/8890))
- fix(deps): update dependency python-dateutil to v3 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8892](https://github.com/mealie-recipes/mealie/issues/8892))
- chore(deps): update dependency ruff to v0.17.2 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8896](https://github.com/mealie-recipes/mealie/issues/8896))
- chore(deps): update dependency coverage to v7.17.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8897](https://github.com/mealie-recipes/mealie/issues/8897))
- fix(deps): update dependency openai to v3.37.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8898](https://github.com/mealie-recipes/mealie/issues/8898))
- chore(deps): update dependency zensical to v0.0.72 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8901](https://github.com/mealie-recipes/mealie/issues/8901))
- chore(deps): update dependency httpx2 to v2.16.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8881](https://github.com/mealie-recipes/mealie/issues/8881))
- fix(deps): update dependency apprise to v2.1.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8905](https://github.com/mealie-recipes/mealie/issues/8905))
- fix(deps): update dependency fastapi to v0.162.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8880](https://github.com/mealie-recipes/mealie/issues/8880))
- chore(deps): update dependency pytest-asyncio to v1.4.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8910](https://github.com/mealie-recipes/mealie/issues/8910))
- chore(deps): update dependency zensical to v0.0.73 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8925](https://github.com/mealie-recipes/mealie/issues/8925))
- fix(deps): update dependency openai to v3.38.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8926](https://github.com/mealie-recipes/mealie/issues/8926))
- fix(deps): update dependency openai to v3.39.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8929](https://github.com/mealie-recipes/mealie/issues/8929))
</details>
#### 🙏 New Contributors
- [@​LembkeM](https://github.com/LembkeM) made their first contribution in [#​8636](https://github.com/mealie-recipes/mealie/pull/8636)
- [@​NutzerXY](https://github.com/NutzerXY) made their first contribution in [#​8692](https://github.com/mealie-recipes/mealie/pull/8692)
- [@​Yi-111-a](https://github.com/Yi-111-a) made their first contribution in [#​8605](https://github.com/mealie-recipes/mealie/pull/8605)
- [@​pcbeingused333](https://github.com/pcbeingused333) made their first contribution in [#​8739](https://github.com/mealie-recipes/mealie/pull/8739)
- [@​gustaf-a](https://github.com/gustaf-a) made their first contribution in [#​8744](https://github.com/mealie-recipes/mealie/pull/8744)
- [@​Hellraiser28](https://github.com/Hellraiser28) made their first contribution in [#​8747](https://github.com/mealie-recipes/mealie/pull/8747)
- [@​Tibood](https://github.com/Tibood) made their first contribution in [#​8766](https://github.com/mealie-recipes/mealie/pull/8766)
- [@​diepeterpan](https://github.com/diepeterpan) made their first contribution in [#​8715](https://github.com/mealie-recipes/mealie/pull/8715)
- [@​granto](https://github.com/granto) made their first contribution in [#​8705](https://github.com/mealie-recipes/mealie/pull/8705)
- [@​NyCodeGHG](https://github.com/NyCodeGHG) made their first contribution in [#​8867](https://github.com/mealie-recipes/mealie/pull/8867)
- [@​mvanhorn](https://github.com/mvanhorn) made their first contribution in [#​8569](https://github.com/mealie-recipes/mealie/pull/8569)
### 🎃🎃🎃🎃🎃🎃
ttps\://github.com/mealie-recipes/mealie/compare/v3.29.0...v3.30.0
### [`v3.29.0`](https://github.com/mealie-recipes/mealie/releases/tag/v3.29.0)
[Compare Source](https://github.com/mealie-recipes/mealie/compare/v3.28.0...v3.29.0)
### 🍴🍴🍴🍴🍴🍴
Another big update packed with hotly-requested features and tons of bug fixes. Grab it while it's hot!
#### 🎉 Highlights
- You can now automatically convert recipes on the fly between metric and Imperial units:
<img width="585" height="348" alt="image" src="https://github.com/user-attachments/assets/a377fda4-6a96-4db9-920a-72ef0412f916" />
***
- Recipe times are now structured. This enables better searches (such as looking for recipes you can make within 30 minutes):
<img width="1021" height="245" alt="image" src="https://github.com/user-attachments/assets/332ac2eb-9e06-4062-b789-f15efdf094e1" />
***
- Shopping list entry is vastly simplified: you can type *anything* into the simple entry box and Mealie will suggest items from your food store. If there's a match, you will add the food; if not, you'll add the exact term as a note. No more clunky entry where you have to guess where you need to type something:
<img width="998" height="241" alt="image" src="https://github.com/user-attachments/assets/0ae83a69-5b94-4c78-bb04-b7224ec51d0e" />
<img width="961" height="288" alt="image" src="https://github.com/user-attachments/assets/985d01b2-8c53-4d6f-99f7-bd6e0cac4907" />
***
- You can now subscribe to your meal planner as an iCal calendar feed. Once turned on, anyone with the iCal link can subscribe without any additional auth. This means you can add your meal plans to your favorite calendar app (Google Calendar, Apple Calendar, Home Assistant, etc.):
<img width="3980" height="2132" alt="image" src="https://github.com/user-attachments/assets/a32f9324-673b-427a-9cba-45ee984107fd" />
***
- We now support auth through a reverse proxy. [Check out the docs](https://mealie.io/documentation/getting-started/installation/backend-config/#reverse-proxy-auth) on how to configure this for your instance.
- We've expanded our theme customization to include branding, allowing you to set a custom name and custom logo for your instance. [Check out the docs](https://mealie.io/documentation/getting-started/installation/backend-config/#branding) for more info.
#### ✨ New features
- feat: convert between metric/imperial units [@​michael-genson](https://github.com/michael-genson) ([#​8292](https://github.com/mealie-recipes/mealie/issues/8292))
- feat: search the items on a shopping list [@​PulfordJ](https://github.com/PulfordJ) ([#​8275](https://github.com/mealie-recipes/mealie/issues/8275))
- feat: structured recipe times [@​michael-genson](https://github.com/michael-genson) ([#​8539](https://github.com/mealie-recipes/mealie/issues/8539))
- feat: Filter by recipe time on cookbooks, meal plan rules, and recipe finder [@​michael-genson](https://github.com/michael-genson) ([#​8561](https://github.com/mealie-recipes/mealie/issues/8561))
- feat: add missing value options to recipe filters [@​feilongcheng](https://github.com/feilongcheng) ([#​8454](https://github.com/mealie-recipes/mealie/issues/8454))
- feat: organizer improvements for foods, tools, and labels [@​bferd](https://github.com/bferd) ([#​8225](https://github.com/mealie-recipes/mealie/issues/8225))
- feat: support public (secretless) native OIDC clients for Google and Microsoft [@​DmitriiSer](https://github.com/DmitriiSer) ([#​8653](https://github.com/mealie-recipes/mealie/issues/8653))
- feat: add QR code to recipe share dialog [@​elliot-ultra](https://github.com/elliot-ultra) ([#​8558](https://github.com/mealie-recipes/mealie/issues/8558))
- feat: meal plan serving scale and shopping list quick add [@​nightvisi0n](https://github.com/nightvisi0n) ([#​8701](https://github.com/mealie-recipes/mealie/issues/8701))
- feat: Simpler shopping list entry [@​michael-genson](https://github.com/michael-genson) ([#​8719](https://github.com/mealie-recipes/mealie/issues/8719))
- feat: admin permissions UI consistency and tooltips [@​bferd](https://github.com/bferd) ([#​8429](https://github.com/mealie-recipes/mealie/issues/8429))
- feat: reverse proxy auth [@​danepowell](https://github.com/danepowell) ([#​8183](https://github.com/mealie-recipes/mealie/issues/8183))
- feat: support customizing app icon, favicon, banner title, and HTML title [@​jspeyside](https://github.com/jspeyside) ([#​8078](https://github.com/mealie-recipes/mealie/issues/8078))
- feat: Subscribe to the meal plan as an iCal calendar feed [@​anandghegde](https://github.com/anandghegde) ([#​8461](https://github.com/mealie-recipes/mealie/issues/8461))
#### 🐛 Bug fixes
- fix: allow re-importing a recipe zip into the same instance [@​Rouzax](https://github.com/Rouzax) ([#​8468](https://github.com/mealie-recipes/mealie/issues/8468))
- fix: restore nullable webhook scheduled_time under Python 3.14 [@​michael-genson](https://github.com/michael-genson) ([#​8537](https://github.com/mealie-recipes/mealie/issues/8537))
- fix: exclude development dependencies from production exports [@​kquinsland01](https://github.com/kquinsland01) ([#​8538](https://github.com/mealie-recipes/mealie/issues/8538))
- fix: preserve identity fields and fix slug when saving JSON-edited recipes [@​audiophonicz](https://github.com/audiophonicz) ([#​7785](https://github.com/mealie-recipes/mealie/issues/7785))
- fix: show API validation errors [@​YibingZhang325](https://github.com/YibingZhang325) ([#​8230](https://github.com/mealie-recipes/mealie/issues/8230))
- fix: keep share dialog buttons on screen on narrow screens [@​elliot-ultra](https://github.com/elliot-ultra) ([#​8556](https://github.com/mealie-recipes/mealie/issues/8556))
- fix: classify create/url imports on the landing URL [@​xiaofang2016](https://github.com/xiaofang2016) ([#​8547](https://github.com/mealie-recipes/mealie/issues/8547))
- fix: redirect logged-out users to login from pages that require it [@​derekdiliu](https://github.com/derekdiliu) ([#​8532](https://github.com/mealie-recipes/mealie/issues/8532))
- fix: fall back to legacy clipboard copy in insecure contexts [@​elliot-ultra](https://github.com/elliot-ultra) ([#​8490](https://github.com/mealie-recipes/mealie/issues/8490))
- fix: prevent timeline edit form submission on Enter [@​nzyz995](https://github.com/nzyz995) ([#​8470](https://github.com/mealie-recipes/mealie/issues/8470))
- fix: remove invalid disabled prop from invite copy button [@​nzyz995](https://github.com/nzyz995) ([#​8469](https://github.com/mealie-recipes/mealie/issues/8469))
- fix: avoid retranslating CRUD table headers [@​nzyz995](https://github.com/nzyz995) ([#​8460](https://github.com/mealie-recipes/mealie/issues/8460))
- fix: reuse safeValidate and await token form validation [@​Luna-81](https://github.com/Luna-81) ([#​8455](https://github.com/mealie-recipes/mealie/issues/8455))
- fix: format JSON-LD recipe ingredients for external parsers [@​YibingZhang325](https://github.com/YibingZhang325) ([#​8393](https://github.com/mealie-recipes/mealie/issues/8393))
- fix: align recipe time rows at narrow widths [@​YibingZhang325](https://github.com/YibingZhang325) ([#​8091](https://github.com/mealie-recipes/mealie/issues/8091))
- fix: keep recipe references on checked shopping list items [@​SulimanAbdulrazzaq](https://github.com/SulimanAbdulrazzaq) ([#​8509](https://github.com/mealie-recipes/mealie/issues/8509))
- fix: prevent stale AI provider fetch from clobbering the edit form [@​xdaxer](https://github.com/xdaxer) ([#​8452](https://github.com/mealie-recipes/mealie/issues/8452))
- fix: use correct i18n key for PermissionDenied message [@​deeumiya-huang](https://github.com/deeumiya-huang) ([#​8597](https://github.com/mealie-recipes/mealie/issues/8597))
- fix: show the Chowdown file structure in the migration example [@​mrhard9090](https://github.com/mrhard9090) ([#​8566](https://github.com/mealie-recipes/mealie/issues/8566))
- fix: restore exception details in migration reports [@​lotusk](https://github.com/lotusk) ([#​8585](https://github.com/mealie-recipes/mealie/issues/8585))
- fix: rename "OpenAI" strings to generic in frontend [@​p0lycarpio](https://github.com/p0lycarpio) ([#​8618](https://github.com/mealie-recipes/mealie/issues/8618))
- fix: separate Markdown paragraphs in recipe text [@​mrhard9090](https://github.com/mrhard9090) ([#​8626](https://github.com/mealie-recipes/mealie/issues/8626))
- fix: stop the release check from hanging when GitHub is unreachable [@​derekdiliu](https://github.com/derekdiliu) ([#​8634](https://github.com/mealie-recipes/mealie/issues/8634))
- fix: Allow video assets [@​michael-genson](https://github.com/michael-genson) ([#​8685](https://github.com/mealie-recipes/mealie/issues/8685))
- fix: apply household visibility preference to recipes imported from zip [@​Luna-81](https://github.com/Luna-81) ([#​8557](https://github.com/mealie-recipes/mealie/issues/8557))
- fix: show the query filter on meal plan rule cards [@​derekdiliu](https://github.com/derekdiliu) ([#​8531](https://github.com/mealie-recipes/mealie/issues/8531))
- fix: keep a step section open while its title is being edited [@​henry1113nz](https://github.com/henry1113nz) ([#​8512](https://github.com/mealie-recipes/mealie/issues/8512))
- fix: instruct vision prompt to extract ingredients from instructions when list is missing ([#​6410](https://github.com/mealie-recipes/mealie/issues/6410)) [@​data-pivot](https://github.com/data-pivot) ([#​8542](https://github.com/mealie-recipes/mealie/issues/8542))
- fix: delete orphaned legacy cookbook/plan-rule join table rows [@​bferd](https://github.com/bferd) ([#​8350](https://github.com/mealie-recipes/mealie/issues/8350))
- fix: remove aggregate recipe last made data [@​zhangli091011](https://github.com/zhangli091011) ([#​7907](https://github.com/mealie-recipes/mealie/issues/7907))
- fix: preserve configured proxy trust through startup [@​kquinsland01](https://github.com/kquinsland01) ([#​8540](https://github.com/mealie-recipes/mealie/issues/8540))
- fix: prevent orphan quantities and premature line breaks in ingredient list [@​GerbenJavado](https://github.com/GerbenJavado) ([#​8479](https://github.com/mealie-recipes/mealie/issues/8479))
- fix: stop startup when configured secret files are invalid [@​kquinsland01](https://github.com/kquinsland01) ([#​8541](https://github.com/mealie-recipes/mealie/issues/8541))
- fix: test audio-only AI providers with a transcription request [@​lotusk](https://github.com/lotusk) ([#​8587](https://github.com/mealie-recipes/mealie/issues/8587))
- fix: allow more than ten recipes with the same name [@​YibingZhang325](https://github.com/YibingZhang325) ([#​8505](https://github.com/mealie-recipes/mealie/issues/8505))
- fix: skip unparseable nutrition values during unit conversion [@​YibingZhang325](https://github.com/YibingZhang325) ([#​8378](https://github.com/mealie-recipes/mealie/issues/8378))
- fix: don't treat unnamed measurement as ingredient substitution [@​bferd](https://github.com/bferd) ([#​8502](https://github.com/mealie-recipes/mealie/issues/8502))
- fix: evaluate LDAP_ADMIN_FILTER as the query account, not the logging-in user [@​Saadanjum0](https://github.com/Saadanjum0) ([#​8678](https://github.com/mealie-recipes/mealie/issues/8678))
- fix: use trigram indexes for fuzzy recipe search on Postgres [@​zf6fm64s8j-bit](https://github.com/zf6fm64s8j-bit) ([#​8673](https://github.com/mealie-recipes/mealie/issues/8673))
- fix: return redirects from permission route middlewares [@​hippi345](https://github.com/hippi345) ([#​8677](https://github.com/mealie-recipes/mealie/issues/8677))
- fix: accept OpenAI-compatible responses with unknown service_tier (Groq) [@​mrhard9090](https://github.com/mrhard9090) ([#​8565](https://github.com/mealie-recipes/mealie/issues/8565))
- fix: unwrap schema.org Text nodes in clean_ingredients [@​thunter009](https://github.com/thunter009) ([#​8683](https://github.com/mealie-recipes/mealie/issues/8683))
- fix: let Renovate refresh the python base digest, and refresh it now [@​Gerrrt](https://github.com/Gerrrt) ([#​8689](https://github.com/mealie-recipes/mealie/issues/8689))
#### 🧰 Maintenance
<details>
<summary>30 changes</summary>
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8546](https://github.com/mealie-recipes/mealie/issues/8546))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8553](https://github.com/mealie-recipes/mealie/issues/8553))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8559](https://github.com/mealie-recipes/mealie/issues/8559))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8562](https://github.com/mealie-recipes/mealie/issues/8562))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8574](https://github.com/mealie-recipes/mealie/issues/8574))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8586](https://github.com/mealie-recipes/mealie/issues/8586))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8599](https://github.com/mealie-recipes/mealie/issues/8599))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8601](https://github.com/mealie-recipes/mealie/issues/8601))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8607](https://github.com/mealie-recipes/mealie/issues/8607))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8612](https://github.com/mealie-recipes/mealie/issues/8612))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8621](https://github.com/mealie-recipes/mealie/issues/8621))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8624](https://github.com/mealie-recipes/mealie/issues/8624))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8627](https://github.com/mealie-recipes/mealie/issues/8627))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8641](https://github.com/mealie-recipes/mealie/issues/8641))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8650](https://github.com/mealie-recipes/mealie/issues/8650))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8655](https://github.com/mealie-recipes/mealie/issues/8655))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8656](https://github.com/mealie-recipes/mealie/issues/8656))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8668](https://github.com/mealie-recipes/mealie/issues/8668))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8674](https://github.com/mealie-recipes/mealie/issues/8674))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8691](https://github.com/mealie-recipes/mealie/issues/8691))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8694](https://github.com/mealie-recipes/mealie/issues/8694))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8702](https://github.com/mealie-recipes/mealie/issues/8702))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8708](https://github.com/mealie-recipes/mealie/issues/8708))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8718](https://github.com/mealie-recipes/mealie/issues/8718))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8720](https://github.com/mealie-recipes/mealie/issues/8720))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8727](https://github.com/mealie-recipes/mealie/issues/8727))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8732](https://github.com/mealie-recipes/mealie/issues/8732))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8737](https://github.com/mealie-recipes/mealie/issues/8737))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8750](https://github.com/mealie-recipes/mealie/issues/8750))
- chore(l10n): New Crowdin updates [@​hay-kot](https://github.com/hay-kot) ([#​8755](https://github.com/mealie-recipes/mealie/issues/8755))
</details>
#### 📚 Documentation
- docs: remove obsolete OIDC_SIGNING_ALGORITHM setting [@​MahishaKannan](https://github.com/MahishaKannan) ([#​8686](https://github.com/mealie-recipes/mealie/issues/8686))
#### ⬆️ Dependency updates
<details>
<summary>58 changes</summary>
- fix(deps): update dependency openai to v3.17.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8563](https://github.com/mealie-recipes/mealie/issues/8563))
- fix(deps): update dependency pillow-heif to v1.8.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8573](https://github.com/mealie-recipes/mealie/issues/8573))
- chore(deps): update dependency zensical to v0.0.64 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8575](https://github.com/mealie-recipes/mealie/issues/8575))
- fix(deps): update dependency python-slugify to v9.1.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8576](https://github.com/mealie-recipes/mealie/issues/8576))
- fix(deps): update dependency ingredient-parser-nlp to v2.8.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8580](https://github.com/mealie-recipes/mealie/issues/8580))
- fix(deps): update dependency openai to v3.18.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8581](https://github.com/mealie-recipes/mealie/issues/8581))
- chore(deps): lock file maintenance @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8584](https://github.com/mealie-recipes/mealie/issues/8584))
- fix(deps): update dependency openai to v3.19.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8583](https://github.com/mealie-recipes/mealie/issues/8583))
- chore(deps): update dependency pylint to v4.0.9 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8591](https://github.com/mealie-recipes/mealie/issues/8591))
- chore(deps): update dependency httpx2 to v2.13.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8590](https://github.com/mealie-recipes/mealie/issues/8590))
- fix(deps): update dependency openai to v3.19.2 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8595](https://github.com/mealie-recipes/mealie/issues/8595))
- fix(deps): update dependency pyjwt to v2.15.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8596](https://github.com/mealie-recipes/mealie/issues/8596))
- chore(deps): update dependency zensical to v0.0.65 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8602](https://github.com/mealie-recipes/mealie/issues/8602))
- chore(deps): update dependency ruff to v0.16.9 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8606](https://github.com/mealie-recipes/mealie/issues/8606))
- fix(deps): update dependency uvicorn to v0.54.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8613](https://github.com/mealie-recipes/mealie/issues/8613))
- fix(deps): update dependency apprise to v2 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8619](https://github.com/mealie-recipes/mealie/issues/8619))
- chore(deps): update dependency coverage to v7.16.2 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8622](https://github.com/mealie-recipes/mealie/issues/8622))
- fix(deps): update dependency python-slugify to v9.1.2 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8625](https://github.com/mealie-recipes/mealie/issues/8625))
- chore(deps): update dependency zensical to v0.0.66 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8629](https://github.com/mealie-recipes/mealie/issues/8629))
- fix(deps): update dependency openai to v3.20.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8630](https://github.com/mealie-recipes/mealie/issues/8630))
- fix(deps): update dependency pyjwt to v2.15.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8632](https://github.com/mealie-recipes/mealie/issues/8632))
- chore(deps): update dependency pylint to v4.0.10 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8638](https://github.com/mealie-recipes/mealie/issues/8638))
- fix(deps): update dependency openai to v3.22.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8640](https://github.com/mealie-recipes/mealie/issues/8640))
- fix(deps): update dependency fastapi to v0.142.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8639](https://github.com/mealie-recipes/mealie/issues/8639))
- fix(deps): update dependency fastapi to v0.142.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8642](https://github.com/mealie-recipes/mealie/issues/8642))
- chore(deps): update dependency pylint to v4.1.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8643](https://github.com/mealie-recipes/mealie/issues/8643))
- chore(deps): lock file maintenance @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8645](https://github.com/mealie-recipes/mealie/issues/8645))
- fix(deps): update dependency openai to v3.22.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8644](https://github.com/mealie-recipes/mealie/issues/8644))
- chore(deps): update dependency zensical to v0.0.67 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8646](https://github.com/mealie-recipes/mealie/issues/8646))
- fix(deps): update dependency fastapi to v0.142.2 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8647](https://github.com/mealie-recipes/mealie/issues/8647))
- fix(deps): update dependency python-dotenv to v1.2.4 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8654](https://github.com/mealie-recipes/mealie/issues/8654))
- chore(deps): update dependency ruff to v0.16.10 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8657](https://github.com/mealie-recipes/mealie/issues/8657))
- chore(deps): update dependency mypy to v2.4.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8658](https://github.com/mealie-recipes/mealie/issues/8658))
- fix(deps): update dependency openai to v3.23.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8659](https://github.com/mealie-recipes/mealie/issues/8659))
- fix(deps): update dependency openai to v3.24.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8665](https://github.com/mealie-recipes/mealie/issues/8665))
- chore(deps): update dependency pylint to v4.1.2 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8669](https://github.com/mealie-recipes/mealie/issues/8669))
- fix(deps): update dependency tzdata to v2026.5 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8671](https://github.com/mealie-recipes/mealie/issues/8671))
- fix(deps): update dependency apprise to v2.0.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8676](https://github.com/mealie-recipes/mealie/issues/8676))
- chore(deps): update dependency zensical to v0.0.68 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8688](https://github.com/mealie-recipes/mealie/issues/8688))
- chore(deps): update dependency types-requests to v2.33.0.20261006 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8693](https://github.com/mealie-recipes/mealie/issues/8693))
- chore(deps): update node.js to [`3d27e5c`](https://github.com/mealie-recipes/mealie/commit/3d27e5c) @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8695](https://github.com/mealie-recipes/mealie/issues/8695))
- fix(deps): update dependency openai to v3.25.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8696](https://github.com/mealie-recipes/mealie/issues/8696))
- fix(deps): update dependency python-slugify to v9.1.3 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8698](https://github.com/mealie-recipes/mealie/issues/8698))
- fix(deps): update dependency openai to v3.26.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8699](https://github.com/mealie-recipes/mealie/issues/8699))
- fix(deps): update dependency orjson to v3.13.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8704](https://github.com/mealie-recipes/mealie/issues/8704))
- fix(deps): update dependency fastapi to v0.142.3 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8703](https://github.com/mealie-recipes/mealie/issues/8703))
- fix(deps): update dependency fastapi to v0.142.4 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8707](https://github.com/mealie-recipes/mealie/issues/8707))
- fix(deps): update dependency openai to v3.26.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8710](https://github.com/mealie-recipes/mealie/issues/8710))
- fix(deps): update dependency fastapi to v0.143.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8711](https://github.com/mealie-recipes/mealie/issues/8711))
- chore(deps): update dependency zensical to v0.0.69 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8716](https://github.com/mealie-recipes/mealie/issues/8716))
- fix(deps): update dependency pydantic to v2.14.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8717](https://github.com/mealie-recipes/mealie/issues/8717))
- fix(deps): update dependency openai to v3.27.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8723](https://github.com/mealie-recipes/mealie/issues/8723))
- chore(deps): update dependency ruff to v0.17.0 - autoclosed @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8726](https://github.com/mealie-recipes/mealie/issues/8726))
- fix(deps): update dependency openai to v3.28.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8728](https://github.com/mealie-recipes/mealie/issues/8728))
- chore(deps): update dependency pylint to v4.1.3 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8742](https://github.com/mealie-recipes/mealie/issues/8742))
- fix(deps): update dependency pillow-heif to v1.8.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8745](https://github.com/mealie-recipes/mealie/issues/8745))
- fix(deps): update dependency openai to v3.29.0 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8746](https://github.com/mealie-recipes/mealie/issues/8746))
- fix(deps): update dependency pydantic to v2.14.1 @​[renovate\[bot\]](https://github.com/apps/renovate) ([#​8751](https://github.com/mealie-recipes/mealie/issues/8751))
</details>
#### 🙏 New Contributors
- [@​kquinsland01](https://github.com/kquinsland01) made their first contribution in [#​8538](https://github.com/mealie-recipes/mealie/pull/8538)
- [@​PulfordJ](https://github.com/PulfordJ) made their first contribution in [#​8275](https://github.com/mealie-recipes/mealie/pull/8275)
- [@​audiophonicz](https://github.com/audiophonicz) made their first contribution in [#​7785](https://github.com/mealie-recipes/mealie/pull/7785)
- [@​SulimanAbdulrazzaq](https://github.com/SulimanAbdulrazzaq) made their first contribution in [#​8509](https://github.com/mealie-recipes/mealie/pull/8509)
- [@​xdaxer](https://github.com/xdaxer) made their first contribution in [#​8452](https://github.com/mealie-recipes/mealie/pull/8452)
- [@​mrhard9090](https://github.com/mrhard9090) made their first contribution in [#​8566](https://github.com/mealie-recipes/mealie/pull/8566)
- [@​nightvisi0n](https://github.com/nightvisi0n) made their first contribution in [#​8701](https://github.com/mealie-recipes/mealie/pull/8701)
- [@​data-pivot](https://github.com/data-pivot) made their first contribution in [#​8542](https://github.com/mealie-recipes/mealie/pull/8542)
- [@​danepowell](https://github.com/danepowell) made their first contribution in [#​8183](https://github.com/mealie-recipes/mealie/pull/8183)
- [@​zhangli091011](https://github.com/zhangli091011) made their first contribution in [#​7907](https://github.com/mealie-recipes/mealie/pull/7907)
- [@​jspeyside](https://github.com/jspeyside) made their first contribution in [#​8078](https://github.com/mealie-recipes/mealie/pull/8078)
- [@​thunter009](https://github.com/thunter009) made their first contribution in [#​8683](https://github.com/mealie-recipes/mealie/pull/8683)
- [@​Saadanjum0](https://github.com/Saadanjum0) made their first contribution in [#​8678](https://github.com/mealie-recipes/mealie/pull/8678)
- [@​zf6fm64s8j-bit](https://github.com/zf6fm64s8j-bit) made their first contribution in [#​8673](https://github.com/mealie-recipes/mealie/pull/8673)
- [@​hippi345](https://github.com/hippi345) made their first contribution in [#​8677](https://github.com/mealie-recipes/mealie/pull/8677)
- [@​MahishaKannan](https://github.com/MahishaKannan) made their first contribution in [#​8686](https://github.com/mealie-recipes/mealie/pull/8686)
- [@​Gerrrt](https://github.com/Gerrrt) made their first contribution in [#​8689](https://github.com/mealie-recipes/mealie/pull/8689)
- [@​anandghegde](https://github.com/anandghegde) made their first contribution in [#​8461](https://github.com/mealie-recipes/mealie/pull/8461)
### 🍴🍴🍴🍴🍴🍴
</details>
---
### Configuration
📅 **Schedule**: (UTC)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xOTkuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjE5OS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
This PR contains the following updates:
v3.28.0→v3.30.0Release Notes
mealie-recipes/mealie (ghcr.io/mealie-recipes/mealie)
v3.30.0Compare Source
🎃🎃🎃🎃🎃🎃
Happy Halloween! Hopefully everyone's got some spooky recipes to try out today.
🎉 Highlights
You can now fully customize AI prompts in-app, with far greater control. You can choose to append to existing prompts, completely replace prompts, and add custom global instructions which are added to every prompt which produces recipe data. The old
OPENAI_CUSTOM_PROMPT_DIRenv var has been removed, but if you had any custom prompts they will be imported into the new format automatically.Instructions can now have individual durations. This means you can specify a particular step takes "10 minutes", for example.
Meal plan entries can now be created for the entire week, rather than a particular day/time. Great for when you know you're going to make something this week, but you're not sure when yet.
✨ New features
🐛 Bug fixes
filter_bystatements to explicit expressions to properly resolve proxy attrs @michael-genson (#8814)🧰 Maintenance
25 changes
📚 Documentation
🔨 Internal development
⬆️ Dependency updates
54 changes
1407820@renovate[bot] (#8803)🙏 New Contributors
🎃🎃🎃🎃🎃🎃
ttps://github.com/mealie-recipes/mealie/compare/v3.29.0...v3.30.0
v3.29.0Compare Source
🍴🍴🍴🍴🍴🍴
Another big update packed with hotly-requested features and tons of bug fixes. Grab it while it's hot!
🎉 Highlights
You can now automatically convert recipes on the fly between metric and Imperial units:
Recipe times are now structured. This enables better searches (such as looking for recipes you can make within 30 minutes):
Shopping list entry is vastly simplified: you can type anything into the simple entry box and Mealie will suggest items from your food store. If there's a match, you will add the food; if not, you'll add the exact term as a note. No more clunky entry where you have to guess where you need to type something:
You can now subscribe to your meal planner as an iCal calendar feed. Once turned on, anyone with the iCal link can subscribe without any additional auth. This means you can add your meal plans to your favorite calendar app (Google Calendar, Apple Calendar, Home Assistant, etc.):
✨ New features
🐛 Bug fixes
🧰 Maintenance
30 changes
📚 Documentation
⬆️ Dependency updates
58 changes
3d27e5c@renovate[bot] (#8695)🙏 New Contributors
🍴🍴🍴🍴🍴🍴
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate CLI.