v2.0.0 - Households and much more!
🍴🍴🍴🍴🍴🍴
We've got some big changes here as part of our v2.0 release!
Before getting into that, we wanted to take this milestone occasion to ask for your support in taking a few minutes to complete a survey that will help us gauge how our users actually use Mealie. We have no telemetry of any kind built into the product, so without your input we don't really know how you use it!
You can complete the survey at https://s.surveyplanet.com/00x4a2o0
We'd be very appreciative of your time.
Moving onto the main event.. please do read the whole list of changes!
🎉 Highlights
🏡 Households
The introduction of Households is one of Mealie's most requested features and a huge technical change. The implementation of it touched 300+ files and 10k+ lines of code.
A household is a subdivision of groups with a collection of users. While groups can be considered as completely separate instances, households mix their data with each other. Another way to think of a household is a family: your group may contain different families, each with their own shopping lists, meal plans, and recipes.
These previously group-level features now belong to a household:
- Notifiers
- Webhooks
- Cookbooks
- Recipe Actions
- Users
- Shopping Lists
- Meal Plans and Meal Plan Rules
- Recipes
Of note, these features are not tied to a household, and are shared amongst households:
- Organizers (Tags, Categories, Tools)
- Ingredient Stores (Foods, Units, Labels)
While recipes now belong to their respective households, within a group, all users can browse all recipes from all households. This means you can still favorite, filter, comment, and "make" all recipes within the group. Each household can configure whether or not they want their recipes to be view-only, or be editable by any user from any household. More information in the docs.
Read a detailed explanation in the main pull request, or a bit higher level explanation in the docs.
🔍 Query Filter Builder
Michael has built a new query builder to allow you to more granularly and intelligently setup rules for cookbooks and meal plans.
Read more detail in the pull request.
🛒 Shopping List UI Improvements
The shopping list has received many minor tweaks to make it more user friendly. With more on the way too!
🔐 OpenID Connect
With our v2 release coming up, there was a chance to make some large changes to the OIDC implementation to build on the learnings since its initial implementation. Thanks Carter!
More detail in the pull request and the docs, which includes a migration guide.
🚨 Breaking changes
More details can be found on each PR. Most of these will only be breaking changes for people who are doing custom work with our APIs, and shouldn't impact someone who is just using Mealie as is.
- feat: Add Households to Mealie @michael-genson (#3970)
- feat: Added feature to limit mealplan data by date range @vshulcz (#4111)
- feat: Use Backend for Recipe Post Actions @michael-genson (#4163)
- feat: Create Recipe From HTML or JSON @michael-genson (#4274)
- feat: Add OIDC_CLIENT_SECRET and other changes for v2 @cmintey (#4254)
- feat: User Tooltip @michael-genson (#4319)
- feat: Query Filter Builder for Cookbooks and Meal Plans @michael-genson (#4346)
✨ New features
- feat: Change OpenAI Image Format to JPG @michael-genson (#4117)
- feat: Cross-Household Recipes @michael-genson (#4089)
- feat: Reorder ShoppingListItemEditor @Kuchenpirat (#4200)
- feat: Use Backend for Recipe Post Actions @michael-genson (#4163)
- feat: Allow Cookbooks To Share Names @michael-genson (#4186)
- feat: Additional Household Permissions @michael-genson (#4158)
- feat: Shopping list UI overhaul - increase list item width @Wetzel402 (#4237)
- feat: Shopping list UI overhaul - label sorted by default @Wetzel402 (#4238)
- feat: Filter Recipes By Household (and a ton of bug fixes) @michael-genson (#4207)
- feat: OpenAI Custom Headers/Params and Debug Page @michael-genson (#4227)
- feat: Shopping list UI overhaul - add label headings per category @Wetzel402 (#4235)
- feat: sort labels by name,asc in shopping lists @seamuslowry (#4253)
- feat: add regex to url before scraping @jlssmt (#4174)
- feat: Add Household Filter to Meal Plan Rules @michael-genson (#4231)
- feat: Shopping list UI overhaul - add wakelock @Wetzel402 (#4236)
- feat: Create Recipe From HTML or JSON @michael-genson (#4274)
- feat: refactor recipe scaling @Kuchenpirat (#4298)
- feat: Add OIDC_CLIENT_SECRET and other changes for v2 @cmintey (#4254)
- feat: Add image source label to dockerfiles @wuast94 (#4331)
- feat: Added support for plural_name for foods @Choromanski (#4305)
- feat: User Tooltip @michael-genson (#4319)
- feat: adding the rest ofthe nutrition properties from schema.org @tjb1982 (#4301)
- feat: Query Filter Builder for Cookbooks and Meal Plans @michael-genson (#4346)
- feat: Change Recipe Owner @michael-genson (#4355)
🐛 Bug fixes
- fix: removed version line from docker compose yml files @volumedata21 (#4072)
- fix: Recipe with a single 'space' as the title returns "404 page not found" @Sacharr (#4065)
- fix: Image height in home screen mobile format @p0lycarpio (#4088)
- fix: PWA respects orientation lock @Choromanski (#4143)
- fix: Tweak recipe card height to be consistent @michael-genson (#4150)
- fix: Broken Social Preview Links @michael-genson (#4183)
- fix: revert shopping list items - increased width @Kuchenpirat (#4241)
- fix: Exclude additional sensitive information from mealie logs @bigcat2014 (#4218)
- fix: Hide rating on notes @boc-the-git (#4278)
- fix: scrape images as list @Kuchenpirat (#4293)
- fix: Shopping List Label Text Color @michael-genson (#4302)
- fix: Strip Timezone from Timestamps in DB @michael-genson (#4310)
- fix: recipe scaling @Kuchenpirat (#4324)
- fix: user creation without username or fullName @Kuchenpirat (#4337)
- fix: Fix Locked User Reset @michael-genson (#4342)
- fix: More Fault Tolerance with OpenAI Schemas @michael-genson (#4328)
- fix: Handle Data With Invalid User @michael-genson (#4325)
- fix: Prevent Bad Cookbook Names @michael-genson (#4364)
- fix: Prevent login via credentials when Auth Method is Mealie @cmintey (#4370)
- fix: Good data being deleted upon restore @michael-genson (#4376)
- fix: Mealplans Disappearing/Can't be edited @michael-genson (#4379)
- fix: Bulk Update Owner Removes Some Recipe Data @michael-genson (#4393)
🧰 Maintenance
52 changes
- chore(l10n): New Crowdin updates @hay-kot (#4068)
- chore(l10n): New Crowdin updates @hay-kot (#4076)
- chore(l10n): New Crowdin updates @hay-kot (#4087)
- chore(l10n): New Crowdin updates @hay-kot (#4090)
- chore(l10n): New Crowdin updates @hay-kot (#4098)
- chore(l10n): New Crowdin updates @hay-kot (#4104)
- fix(auto): Update pre-commit hooks @github-actions (#4101)
- chore(l10n): New Crowdin updates @hay-kot (#4113)
- chore(l10n): New Crowdin updates @hay-kot (#4115)
- chore(l10n): New Crowdin updates @hay-kot (#4121)
- fix: Update Task Template for V2 @michael-genson (#4078)
- chore(l10n): New Crowdin updates @hay-kot (#4127)
- chore(l10n): New Crowdin updates @hay-kot (#4132)
- fix(auto): Update pre-commit hooks @github-actions (#4138)
- feat: Automate release drafting @boc-the-git (#4147)
- chore(l10n): New Crowdin updates @hay-kot (#4145)
- chore: Set 'chore' label on PR @boc-the-git (#4154)
- chore: Set "documentation" label on PR @boc-the-git (#4153)
- chore(l10n): New Crowdin updates @hay-kot (#4171)
- chore(l10n): New Crowdin updates @hay-kot (#4176)
- chore(auto): Update pre-commit hooks @github-actions (#4179)
- chore(l10n): New Crowdin updates @hay-kot (#4181)
- chore(l10n): New Crowdin updates @hay-kot (#4201)
- fix(deps): Update dependencies for Python 3.12 @chishm (#4204)
- chore(auto): Update pre-commit hooks @github-actions (#4213)
- chore: Improve Alembic Migration Generation @michael-genson (#4192)
- chore(l10n): New Crowdin updates @hay-kot (#4230)
- chore(l10n): New Crowdin updates @hay-kot (#4233)
- chore: Optimize Loads on Queries @michael-genson (#4220)
- chore(l10n): New Crowdin updates @hay-kot (#4256)
- chore(auto): Update pre-commit hooks @github-actions (#4255)
- chore(l10n): New Crowdin updates @hay-kot (#4264)
- chore(l10n): New Crowdin updates @hay-kot (#4268)
- chore(l10n): New Crowdin updates @hay-kot (#4271)
- chore(l10n): New Crowdin updates @hay-kot (#4280)
- chore(l10n): New Crowdin updates @hay-kot (#4289)
- chore(auto): Update pre-commit hooks @github-actions (#4285)
- chore(l10n): New Crowdin updates @hay-kot (#4300)
- chore(l10n): New Crowdin updates @hay-kot (#4308)
- chore(l10n): New Crowdin updates @hay-kot (#4317)
- chore(auto): Update pre-commit hooks @github-actions (#4321)
- chore(l10n): New Crowdin updates @hay-kot (#4344)
- chore(l10n): New Crowdin updates @hay-kot (#4351)
- chore(l10n): New Crowdin updates @hay-kot (#4356)
- chore(l10n): New Crowdin updates @hay-kot (#4360)
- chore(l10n): New Crowdin updates @hay-kot (#4371)
- chore(l10n): New Crowdin updates @hay-kot (#4382)
- chore(l10n): New Crowdin updates @hay-kot (#4387)
- chore(l10n): New Crowdin updates @hay-kot (#4389)
- chore(l10n): New Crowdin updates @hay-kot (#4397)
- chore(l10n): New Crowdin updates @hay-kot (#4405)
- chore(auto): Update pre-commit hooks @github-actions (#4406)
📚 Documentation
- docs(auto): Update image tag, for release v1.12.0 @github-actions (#4064)
- docs: Tidy unicorn workers description @boc-the-git (#4095)
- fix: Docs Reference Old Build @michael-genson (#4096)
- docs: Update ghcr pulls badge endpoint @ipitio (#4124)
- docs: OpenAI Documentation @michael-genson (#4165)
- docs: Added OpenAI Page to mkdocs @michael-genson (#4167)
- docs: add keep screen alive entry @paaff (#4116)
- docs: Fix OpenAI docs link @michael-genson (#4168)
- docs: boolean value in docker-compose examples not deserializable in env variables @ursuscamp (#4130)
- docs: Update Docs for Households @michael-genson (#4266)
- docs: add note on recipe scaling to docs @Kuchenpirat (#4287)
- docs: Fix Formatting @michael-genson (#4309)
- docs: Update rest call for home assistant @PurelyNicole (#4341)
- docs: update oidc-v2.md @dasunsrule32 (#4347)
- docs: removed TRACE log level from backend-config.md @besque (#4381)
🔨 Internal development
- dev: Add autolabeler functionality for PRs @boc-the-git (#4188)
- dev: Change autolabeler regex to include : @boc-the-git (#4196)
- dev: add setting to fix mypy pydantic warning on vs code dev container setup @tjb1982 (#4292)
- dev: fix GH Actions node deprecation @Choromanski (#4306)
- dev: cancel running pull request jobs on new push @Kuchenpirat (#4339)
- dev: add internal dev section to release notes @Kuchenpirat (#4390)
- dev: Add highlights and new contributors to release template @boc-the-git (#4391)
- dev: Improve Docs Generation @michael-genson (#4402)
⬆️ Dependency updates
91 changes
- chore(deps): update dependency pytest-asyncio to ^0.24.0 @renovate (#4074)
- chore(deps): update dependency ruff to v0.6.2 @renovate (#4075)
- chore(deps): update dependency mkdocs-material to v9.5.33 @renovate (#4085)
- fix(deps): update dependency recipe-scrapers to v15.1.0 @renovate (#4103)
- fix(deps): update dependency fastapi to v0.112.2 @renovate (#4092)
- chore(deps): update dependency mypy to v1.11.2 @renovate (#4093)
- fix(deps): update dependency authlib to v1.3.2 @renovate (#4102)
- chore(deps): update dependency rich to v13.8.0 @renovate (#4105)
- fix(deps): update dependency httpx to v0.27.2 @renovate (#4112)
- chore(deps): update dependency ruff to v0.6.3 @renovate (#4120)
- fix(deps): update dependency openai to v1.43.0 @renovate (#4122)
- chore(deps): update dependency pylint to v3.2.7 @renovate (#4131)
- chore(deps): update dependency mkdocs-material to v9.5.34 @renovate (#4133)
- fix(deps): update dependency rapidfuzz to v3.9.7 @renovate (#4142)
- fix(deps): update dependency apprise to v1.9.0 @renovate (#4141)
- fix(deps): update dependency sqlalchemy to v2.0.33 @renovate (#4149)
- fix(deps): update dependency fastapi to v0.112.3 @renovate (#4159)
- chore(deps): update dependency ruff to v0.6.4 @renovate (#4160)
- fix(deps): update dependency fastapi to ^0.113.0 @renovate (#4161)
- fix(deps): update dependency pydantic to v2.9.0 @renovate (#4162)
- fix(deps): update dependency openai to v1.43.1 @renovate (#4164)
- fix(deps): update dependency sqlalchemy to v2.0.34 @renovate (#4156)
- fix(deps): update dependency fastapi to ^0.114.0 @renovate (#4169)
- fix(deps): update dependency openai to v1.44.0 @renovate (#4170)
- fix(deps): update dependency pydantic to v2.9.1 @renovate (#4180)
- fix(deps): update dependency openai to v1.44.1 @renovate (#4185)
- chore(deps): update dependency pytest to v8.3.3 @renovate (#4189)
- chore(deps): update dependency rich to v13.8.1 @renovate (#4190)
- fix(deps): update dependency pydantic-settings to v2.5.0 @renovate (#4191)
- fix(deps): update dependency fastapi to v0.114.1 @renovate (#4194)
- fix(deps): update dependency pydantic-settings to v2.5.2 @renovate (#4195)
- chore(deps): update dependency pydantic-to-typescript2 to v1.0.6 @renovate (#4199)
- fix(deps): update dependency openai to v1.45.0 @renovate (#4203)
- chore(deps): update dependency ruff to v0.6.5 @renovate (#4205)
- fix(deps): update dependency fastapi to v0.114.2 @renovate (#4206)
- fix(deps): update dependency sqlalchemy to v2.0.35 @renovate (#4221)
- fix(deps): update dependency openai to v1.45.1 @renovate (#4215)
- fix(deps): update dependency fastapi to ^0.115.0 @renovate (#4228)
- fix(deps): update dependency openai to v1.46.0 @renovate (#4226)
- fix(deps): update dependency pydantic to v2.9.2 @renovate (#4225)
- chore(deps): update dependency mkdocs-material to v9.5.35 @renovate (#4229)
- fix(deps): update dependency openai to v1.46.1 @renovate (#4234)
- chore(deps): update dependency ruff to v0.6.6 @renovate (#4240)
- chore(deps): update dependency pylint to v3.3.0 @renovate (#4243)
- chore(deps): update dependency mkdocs-material to v9.5.36 @renovate (#4247)
- fix(deps): update dependency openai to v1.47.0 @renovate (#4245)
- fix(deps): update dependency python-multipart to ^0.0.10 @renovate (#4248)
- chore(deps): update dependency ruff to v0.6.7 @renovate (#4249)
- fix(deps): update dependency rapidfuzz to v3.10.0 @renovate (#4257)
- fix(deps): update dependency alembic to v1.13.3 @renovate (#4258)
- fix(deps): update dependency openai to v1.47.1 @renovate (#4259)
- fix(deps): update dependency tzdata to v2024.2 @renovate (#4261)
- chore(deps): update dependency pylint to v3.3.1 @renovate (#4265)
- chore(deps): update dependency mkdocs-material to v9.5.37 @renovate (#4267)
- fix(deps): update dependency openai to v1.48.0 @renovate (#4269)
- chore(deps): update dependency mkdocs-material to v9.5.38 @renovate (#4270)
- fix(deps): update dependency openai to v1.50.2 @renovate (#4273)
- chore(deps): update dependency ruff to v0.6.8 @renovate (#4272)
- fix(deps): update dependency uvicorn to ^0.31.0 @renovate (#4277)
- fix(deps): update dependency python-multipart to ^0.0.11 @renovate (#4281)
- chore(deps): update dependency mkdocs-material to v9.5.39 @renovate (#4283)
- fix(deps): update dependency python-multipart to ^0.0.12 @renovate (#4284)
- fix(deps): update dependency openai to v1.51.0 @renovate (#4303)
- chore(deps): update dependency rich to v13.9.1 @renovate (#4299)
- chore(deps): update dependency rich to v13.9.2 @renovate (#4314)
- fix(deps): update dependency recipe-scrapers to v15.2.1 @renovate (#4316)
- chore(deps): update dependency ruff to v0.6.9 @renovate (#4315)
- chore(deps): update dependency pre-commit to v4 @renovate (#4318)
- fix(deps): update dependency openai to v1.51.1 @renovate (#4326)
- fix(deps): update dependency openai to v1.51.2 @renovate (#4332)
- chore(deps): update dependency pre-commit to v4.0.1 @renovate (#4333)
- chore(deps): update dependency mkdocs-material to v9.5.40 @renovate (#4345)
- fix(deps): update dependency uvicorn to v0.31.1 @renovate (#4343)
- fix(deps): update dependency isodate to ^0.7.0 @renovate (#4330)
- chore(deps): update dependency coverage to v7.6.2 @renovate (#4338)
- chore(deps): update dependency coverage to v7.6.3 @renovate (#4359)
- fix(deps): update dependency fastapi to v0.115.2 @renovate (#4352)
- chore(deps): update dependency mypy to v1.12.0 @renovate (#4362)
- chore(deps): update dependency mkdocs-material to v9.5.41 @renovate (#4365)
- fix(deps): update dependency pillow to v11 @renovate (#4366)
- fix(deps): update dependency uvicorn to ^0.32.0 @renovate (#4367)
- fix(deps): update dependency sqlalchemy to v2.0.36 @renovate (#4369)
- fix(deps): update dependency openai to v1.52.0 @renovate (#4385)
- chore(deps): update dependency psycopg2-binary to v2.9.10 @renovate (#4375)
- chore(deps): update dependency ruff to ^0.7.0 @renovate (#4384)
- fix(deps): update dependency orjson to v3.10.9 @renovate (#4394)
- chore(deps): update dependency mypy to v1.12.1 @renovate (#4395)
- fix(deps): update dependency pillow-heif to ^0.20.0 @renovate (#4388)
- fix(deps): update dependency pydantic-settings to v2.6.0 @renovate (#4383)
- chore(deps): update dependency mkdocs-material to v9.5.42 @renovate (#4398)
- chore(deps): update dependency coverage to v7.6.4 @renovate (#4403)
🙏 New Contributors
- @volumedata21 made their first contribution in #4072
- @Sacharr made their first contribution in #4065
- @ipitio made their first contribution in #4124
- @paaff made their first contribution in #4116
- @vshulcz made their first contribution in #4111
- @ursuscamp made their first contribution in #4130
- @chishm made their first contribution in #4204
- @Wetzel402 made their first contribution in #4237
- @bigcat2014 made their first contribution in #4218
- @seamuslowry made their first contribution in #4253
- @jlssmt made their first contribution in #4174
- @tjb1982 made their first contribution in #4292
- @wuast94 made their first contribution in #4331
- @PurelyNicole made their first contribution in #4341
- @dasunsrule32 made their first contribution in #4347
- @besque made their first contribution in #4381