v0.25.0-beta
Warning
Back up before updating. This is a large release: on first start Norish builds the ingredient catalogue and links your existing recipe, grocery and pantry ingredients to it. Back up your PostgreSQL database and your uploads folder.
Summary
This release introduces a major overhaul of ingredient management, using an ingredient catalogue.
This enables smarter pantry matching, automatic nutrition calculations, ingredient icons, and improved unit conversions, managing recipes and groceries is now easier and more accurate.
Alongside these features, this release includes a redesigned Pantry page and various fixes and improvements.
Security
It is advised to update ASAP. This release fixes multiple critical CVE's:
- Next.js: anyone, without signing in, could run code on your server through image optimization (GHSA-2xp9-vwfh-vxw4) #623.
- Norish was mainly unaffected as we don't use this functionallity.
- Better Auth: someone could take over an account by signing up with a password using another person's email before that person signs in with OIDC, Google or GitHub (GHSA-g38m-r43w-p2q7). This could be an issue if your server was exposed if it allows password sign-up and has at least one of those providers configured. #623
- Container: the image now runs a current Node 22 on a supported Alpine. The previous image had not received Node security releases since late 2025.
Features
Ingredient catalogue
Norish now ships with an ingredient catalogue based on the Open Food Facts ingredients taxonomy.
The catalogue drives several new features:
- Ingredient management: Browse, search, edit, merge, and organize ingredients under Settings => Ingredients. Ingredients can be grouped into parent-child relationships.
- AI-assisted management: Use Fix catalogue to have AI check flagged ingredients and tidy names.
- New ingredients: Server admins can have new ingredients cleaned and given an icon automatically under Settings => Admin => AI & processing.
- Smarter pantry matching: Ingredient relationships improve pantry matching. For example, having red onion in your pantry also counts for recipes writing it in a different language.
- Automatic nutrition calculations: Recipes without nutrition information now automatically calculate calories, fat, carbohydrates, and protein per serving using nutritional datasets such as CIQUAL, USDA FoodData Central, and CoFID. No AI required anymore.
- Nutrition corrections: Adjust ingredient nutrition values and weights for your household, either manually or by selecting another nutritional data source.
- Improved AI nutrition estimates: AI now only estimates ingredients that couldn't be calculated automatically, rather than guessing nutrition for the entire recipe.
- Ingredient icons: Ingredients now have an icon, this is purely aesthetic and can be turned off.
- Unit conversions: Convert ingredient quantities using catalogue data without relying on AI, AI-powered conversion remains available.
- Permissions: Server admins can control who may edit ingredients added by other users.
See Ingredients, Nutrition, and Ingredient icons.
Redesigned Pantry page
The Pantry has moved from a panel to its own dedicated page.
Combined with the new ingredient catalogue and smarter ingredient matching, managing what you have at home and identifying what you need for recipes is now more streamlined.
See Pantry.
Other changes
- Recipe planning: Choose whether planning a recipe opens the groceries panel (default) or automatically adds ingredients to your grocery list. Configure this under Settings => User => Preferences => After planning a recipe.
- User preferences: Settings are now stored on the server rather than in the browser, with most preferences scoped per device type. Existing preferences will be reset after updating.
- Measurement system: Added the option to automatically select the measurement system under Settings => User => Preferences.
- Cookbooks: Cookbooks can now have their own cover images.
- CalDAV: Fixed meal times to correctly account for time zones instead of converting everything to UTC. Thanks to @zombopanda.
- Recipe imports: Recipes imported from lecker.de now include their preparation steps. Thanks to @skolodziej.
- Language support: Added Ukrainian translations.
- Calendar: Minor redesign, and it scrolls to today's date again.
- AI keys: When an AI provider rejects a configured API key, server admins now see a warning on every page and under Settings => Admin => AI & processing, and flagged ingredients say the key was rejected. Before, a revoked key just made ingredient matching quietly worse.
- Home screen icon: Adding Norish to the home screen from Firefox on Android or from iOS Safari uses the Norish icon again instead of a default one (#611).
- Upload folder: Norish now ensures the uploads folder is writable by itself, so a host folder that Docker created as root no longer makes image uploads and imports fail (#116). If your compose file sets
user: "1000:1000", remove that line. - Cooking mode: Wake lock changed from a toggle to a button. Thanks to @AfoxDesignz
- Obscura timeout: Slow sites used to timeout after 30 seconds. This is increased to 45 seconds. The timeout is configurable using the
OBSCURA_NAVIGATION_TIMEOUT_MSenv variable. (#606). - Decision model: The endpoint URL can be set again under Settings => Admin => AI & processing => Decision model, for a proxy, gateway or self-hosted server (#620).
- API reference: The API docs moved from your Norish server to the API reference on this site. It is generated from the code, so it always matches its release, and you can download the OpenAPI spec there.
- Changes in account linking: A user who signed up with a password can no longer start signing in with OIDC, Google or GitHub under the same email. Drawback of GHSA-g38m-r43w-p2q7: Link with <SSO button> in user-settings is coming. #623
- API docs are now on norish.dev:
/api/docsand/api/openapi.jsonare gone from your server; the API reference replaces both. - Docs: The documentation now has a modern look
Configuration
The following optional environment variables have been added:
INGREDIENT_CATALOGUE_URL: Use a local mirror of the Open Food Facts ingredients taxonomy instead of the default source.INGREDIENT_REVIEW_CONCURRENCY: Control how many ingredients can be processed by AI simultaneously (default:10). Lower this value for self-hosted models that struggle with concurrent requests.OBSCURA_NAVIGATION_TIMEOUT_MS: How long a URL import waits for the page to load (default:45000). Raise it if a slow site still fails to import with a timeout. See Recipe parser.
No additional configuration is required for the ingredient catalogue to work.
See Server & runtime.