# Mealie v3.21.0
- Product: Mealie (https://whatsnew.fyi/product/mealie)
- Vendor: Mealie
- Date: 2026-07-23
- Version: v3.21.0
- Original notes: https://github.com/mealie-recipes/mealie/releases/tag/v3.21.0
- Permalink: https://whatsnew.fyi/product/mealie/releases/v3.21.0
What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog.
Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'.
---
- **added** — Add sitewide statistics
- **added** — Add UI fixes and backup link on onboarding screen
- **added** — Add floating save button when editing recipe
- **fixed** — Manually implement nltk.downloader using cURL
- **fixed** — Clear cached recipe actions on logout to prevent cross-user leak
- **fixed** — Improve shopping list UI
- **fixed** — Fix embedded tokens not persisting across sessions
- **fixed** — Re-enable automatic merges with crowding CI
- **fixed** — Preserve deep link when redirecting to login
- **fixed** — Truncate scraped recipe slug to filesystem-safe length
- **fixed** — Handle IntegrityError with 409 conflict response
- **fixed** — Prevent empty bulk add from clearing import URLs
- **fixed** — Wrap long words in timeline to prevent horizontal scroll
- **fixed** — Scope bulk update/delete repository methods to caller's group/household
- **security** — Harden LDAP and OIDC authentication providers
- **security** — Restrict user ratings and favorites reads to the requesting user
- **fixed** — Fix flaky ratings on mobile
- **fixed** — Simplify rating logic
- **fixed** — Fix New Asset dialog Type dropdown broken by Vuetify 4.1.2 item slot
- **fixed** — Replace shadowed ref var name when adding recipe to shopping list
#### 🍴🍴🍴🍴🍴🍴
This release brings a couple new features and a slew of bug fixes.
##### ✨ New features
- feat: Added sitewide statistics @Choromanski (#7322)
- feat: ui fixes & backup link on onboarding screen @p0lycarpio (#7743)
- feat: floating save button when editing recipe @DeepReef11 (#7320)
##### 🐛 Bug fixes
- fix: Manually implement nltk.downloader using cURL @michael-genson (#7817)
- fix: clear cached recipe actions on logout to prevent cross-user leak @shved270189 (#7815)
- fix: shopping list UI improvements @p0lycarpio (#7215)
- fix: Fix embedded tokens not persisting across sessions @michael-genson (#7860)
- fix: re-enable automatic merges with crowding CI @hay-kot (#7886)
- fix: preserve deep link when redirecting to login @henricook (#7876)
- fix: truncate scraped recipe slug to filesystem-safe length @TowyTowy (#7862)
- fix: handle IntegrityError with 409 conflict response @gitolicious (#7712)
- fix: prevent empty bulk add from clearing import URLs @ft4453080 (#7820)
- fix: wrap long words in timeline to prevent horizontal scroll @shved270189 (#7819)
- fix: scope bulk update/delete repository methods to caller's group/household @hay-kot (#7899)
- fix: harden LDAP and OIDC authentication providers @hay-kot (#7902)
- fix: restrict user ratings and favorites reads to the requesting user @hay-kot (#7903)
- fix: Fix flaky ratings on mobile @michael-genson (#7916)
- fix: Simplify rating logic @michael-genson (#7918)
- fix: New Asset dialog Type dropdown broken by Vuetify 4.1.2 item slot… @bferd (#7931)
- fix: Replace shadowed `ref` var name when adding recipe to shopping list @michael-genson (#7937)
##### 🧰 Maintenance
20 changes
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7818)
- chore(l10n): New Crowdin updates @hay-kot (#7805)
- chore(l10n): New Crowdin updates @hay-kot (#7824)
- chore(l10n): New Crowdin updates @hay-kot (#7836)
- chore(l10n): New Crowdin updates @hay-kot (#7837)
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7842)
- chore(l10n): New Crowdin updates @hay-kot (#7839)
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7870)
- chore(l10n): New Crowdin updates @hay-kot (#7853)
- chore(l10n): New Crowdin updates @hay-kot (#7871)
- chore(l10n): New Crowdin updates @hay-kot (#7891)
- chore(l10n): New Crowdin updates @hay-kot (#7894)
- chore(l10n): New Crowdin updates @hay-kot (#7904)
- chore(l10n): Crowdin locale sync @[mealie-actions[bot]](https://github.com/apps/mealie-actions) (#7906)
- chore(l10n): New Crowdin updates @hay-kot (#7908)
- chore(l10n): New Crowdin updates @hay-kot (#7911)
- chore(l10n): New Crowdin updates @hay-kot (#7915)
- chore(l10n): New Crowdin updates @hay-kot (#7920)
- chore(l10n): New Crowdin updates @hay-kot (#7923)
- chore(l10n): New Crowdin updates @hay-kot (#7930)
##### 📚 Documentation
- docs: clarify manage and organize permissions @archit-goyal (#7823)
##### 🔨 Internal development
- dev: Skip template check on Crowdin PRs @michael-genson (#7854)
- dev: Add GH CLI to devcontainer @michael-genson (#7857)
##### ⬆️ Dependency updates
39 changes
- chore(deps): remove unused aiofiles dependency @lukehsiao (#7872)
- chore(deps): update nltk to 3.10.0 @hay-kot (#7901)
- chore(deps): update dependency coverage to v7.14.3 @[renovate[bot]](https://github.com/apps/renovate) (#7816)
- chore(deps): lock file maintenance @[renovate[bot]](https://github.com/apps/renovate) (#7822)
- chore(deps): update dependency ruff to v0.15.19 @[renovate[bot]](https://github.com/apps/renovate) (#7821)
- fix(deps): update dependency openai to v2.44.0 @[renovate[bot]](https://github.com/apps/renovate) (#7830)
- chore(deps): update dependency ruff to v0.15.20 @[renovate[bot]](https://git
_[Truncated at 4000 characters — full notes: https://github.com/mealie-recipes/mealie/releases/tag/v3.21.0]_