Highlights
- Search anything with ⌘K / Ctrl+K (or
/). Find recipes by name, jump to any page, pick up recently viewed recipes, switch theme, or paste a recipe URL to import it. (#473, #477) - Faster pages. Recipe cards load small thumbnails and the browser caches photos, so the home page loads around 15× less image data on large libraries. Links to recipes no longer go through an extra redirect. Switching a recipe between metric, US volume and imperial is about 3× faster the first time and near-instant after that. (#472, #480, #488)
- Simpler navigation. Labelled Recipes, Shopping and Calendar links, a New Recipe button, and My Recipes / All Recipes tabs on one Recipes page. (#475)
- Easier recipe writing. In description, directions and notes, lists continue when you press Enter, and ⌘/Ctrl+B / ⌘/Ctrl+I toggle bold and italic. (#479)
Security
- Security improvements across the API (permission checks and file handling). Upgrading is recommended. (#466)
- AI-assisted parsing, cleanup, translation and URL import now require being logged in. (#466)
- Recipe scraping and image downloads only fetch from public web addresses; local-network URLs are no longer fetched. (#468)
- Docker image updated to Node 24.22.2. (#450, #464)
Fixes
- The All Recipes and user recipe pages no longer fail to load on libraries with around 1,000+ recipes. (#465)
- Star ratings show filled and half stars again; favourite hearts and cooked/purchased ticks are filled only when set. (#485)
- Tooltips on the shopping list buttons and the explanations on ingredient badges appear again. (#485)
- Buttons in a loading state (e.g. Login) no longer shrink into a flickering square. (#472)
- On the New Recipe page, photo parsing explains when the site's AI provider can't read images, instead of failing after upload. (#484)
- The vanilla logo is visible in dark mode. (#476)
- Backup types in Site settings are colour-coded. (#484)
- When several photos are uploaded while editing a recipe and one fails, the others are no longer affected. (#470)
- Admin password resets report failures instead of appearing to succeed. (#466)
- Scraping waits up to 2 minutes, and a spinner stays up while shared or bookmarklet recipes load. (#454, #460)
- Recipes whose instruction steps are stored as text arrays scrape correctly. (#449)
Changes
- Star ratings can only be changed by the recipe's owner. (#466)
- The root user can no longer be demoted from admin. (#466)
- The legacy Paprika import API endpoints are removed (the Import page handles Paprika files). (#466)
- Saving a recipe leaves existing category links alone. (#470)
Under the hood
- Recipe parsing, server hooks, client API helpers and recipe save routes restructured; output verified unchanged against all 230 saved recipe pages. (#467, #469, #470)
- Every exported function is documented, there are no type errors, and CI enforces lint, documentation and type checks. (#478, #481, #482, #484–#487)
- Unused code and data removed, including the unused vegan ingredient dataset. (#451, #471)
- Dependency updates. (#453, #455, #456, #461, #462, #483)