Skip to main content
Version: 0.21.0-beta

v0.21.0-beta

warning

BREAKING: CHROME_WS_ENDPOINT is replaced by OBSCURA_ENDPOINT**, and the chrome-headless service by obscura.** There is no alias and no deprecation period — an unchanged compose file leaves URL imports pointing at a browser that is no longer there. In your compose file, replace the chrome-headless service with:

obscura:
image: norishapp/obscura:0.2.0-norish.1
restart: unless-stopped

then swap CHROME_WS_ENDPOINT: ws://chrome-headless:3000 for OBSCURA_ENDPOINT: ws://obscura:9222 in the norish service and update any depends_on entry. The image needs no command, no flags, and no shared-memory tuning; it does not publish a port, and it should not — anything that can reach it can drive the browser. If you run the browser on another host, point OBSCURA_ENDPOINT at that Obscura CDP server instead.

Summary

This release updates the UI, a redesign for the menu, themeing is updated a bit. Recipe page is reworked on mobile devices. The Landing page is redone to look less SaaS.

Features

Theme update

  • Chips A chip is are made more coherent, no more glass chips either they are accent colored when active or a soft color when not.
  • Glass look Initially I wanted to go for a liquid glass look, recently I began annoying myself by it, it didn't look good and it was trying to be something it is not.
  • Mobile menu The mobile menu no longer hides, that resulted in some annoying behaviour, it is now always visible but scales down when scrolling down.
  • Sign-in page Improved the error messaging a bit, and follow the themeing.
  • Recipe page redesigned on mobile The recipe page, is rebuilt for the mobile devices. An important feature is that the theme on this page depends on the Hero image. It automatically adjusts. If you prefer to have the default theme everywhere you can adjust this behaviour in: settings => User => Recipe page color to switch the device to theme colors.

Hidden Items

  • Controls to hide UI elements are now all grouped under one multi-select in the user settings.
  • Hidden Items is a per-device choice, like the other view settings: hide nutrition on your phone and keep it on your desktop.
  • The server decides what to render - so the client won't see flickering anymore.
  • When turning off recipe provenance the origin flags do remain besides the title, thats intentional.

Hidden Items.

Image Generation

Recipes without a picture can now get one generated with AI.

  • A new enrichment kind: turn on the Image Generation switch and newly created recipes that have no image at all get a generated picture of the dish.
  • It uses its own image provider (OpenAI, Google, Azure, LM Studio, or a generic OpenAI-compatible endpoint), configured under Settings => Admin => AI & Processing => Image Generation.
  • Generate Picture in the recipe actions menu draws one on demand, on web and mobile. It replaces the recipe's primary image, also when that is a photo you uploaded.
  • Both prompts (the visual brief and the image style) are editable like every other AI prompt, and generated images are marked as generated inside a recipe export.

Image generation.

Recipe export

  • It is possible to download all recipe's currently visible to you.
  • Server admins get the same button under Settings => Admin => General, covering every recipe on the instance.
  • Currently the archive is limited to recipes, It contains no emails, avatars, preferences or account data.

Recipe Archive.

Fixes and Improvements

  • Secret fields in admin settings Every API key, client secret and password field under Settings => Admin is now an ordinary password field with a show button, and it can always be typed into.
  • Image Generation API key The field now shows the key that will actually be used and names where it comes from, whether that is a key of its own or one borrowed from your AI configuration. Changing the image provider now forgets a key saved for the previous provider, so the fallback to the AI configuration's key works again.
  • Profile pictures Replacing your profile picture now shows up everywhere right away, also in the installed app, and other people in your household. There were also some incosistencies with rounded square vs rounded display.
  • iOS app icon. The home-screen icon is now a flat green tile with the cream Norish mark, so iOS 26's Liquid Glass treatment gets something it can work with.
  • Splash screens The iOS startup image list now covers all current iPhones and iPads plus the older SE and Plus shapes, so the splash no longer appears only on some devices.
  • New slogan The new slogan "Any source, any recipe." is propagated everywhere.
  • Re-importing a deleted recipe Importing a URL again after deleting the recipe (or after a failed import) now queues a real import job instead of silently doing nothing (#524).
  • Admin settings on a phone Settings => Admin now reads on a narrow screen.
  • CalDAV syncing Connecting a calendar now pushes the meals already on your plan, not just the ones you add afterwards, and moving, renaming or deleting a meal updates the calendar instead of being quietly dropped. A move rewrites the existing event rather than leaving a copy behind (#529).

Obscura

  • URL imports render in Obscura instead of a third-party Chromium container. The chrome-headless service is replaced by obscura. See Recipe parser, and the Upgrade notes below as this is a breaking change.

Upgrade notes

  • Remove and re-add the app to your iOS home screen to pick up the new app icon and the splash screen fixes. iOS freezes both at the moment you add the app, so an existing installation keeps the old look until you re-add it.

  • The individual display switches The separate settings switches for ratings, favorites, ingredient conversion and recipe timers are gone; in the user settings there is now one dropdown to hide/show what you want.

  • Dish Colours are computed on first start. This release adds a dish_color column to recipes; the migration runs automatically, and a one-time startup pass extracts a colour for every existing recipe that has a photo. On a large library the first boot after upgrading spends a few extra seconds on it; nothing needs configuring.

  • Breaking: CHROME_WS_ENDPOINT is replaced by OBSCURA_ENDPOINT, and the chrome-headless service by obscura.** There is no alias and no deprecation period — an unchanged compose file leaves URL imports pointing at a browser that is no longer there. In your compose file, replace the chrome-headless service with:

    obscura:
    image: norishapp/obscura:0.2.0-norish.1
    restart: unless-stopped

    then swap CHROME_WS_ENDPOINT: ws://chrome-headless:3000 for OBSCURA_ENDPOINT: ws://obscura:9222 in the norish service and update any depends_on entry. The image needs no command, no flags, and no shared-memory tuning; it does not publish a port, and it should not — anything that can reach it can drive the browser. If you run the browser on another host, point OBSCURA_ENDPOINT at that Obscura CDP server instead.