Norish

Norish

Docker app from grtgbln's Repository

Overview

A realtime, self-hosted recipe app for families and friends

Norish Logo

Website Documentation License Build Status Docker Pulls Docker Image Size Buy Me a Coffee


Norish

Norish is a real-time, household-first recipe app for planning meals, sharing groceries, and cooking together.

For the website and documentation see: norish.dev and docs.norish.dev

Quick start

The fastest way to try Norish is Docker Compose. At a minimum you need a DATABASE_URL and a MASTER_KEY:

[!TIP] Generate a MASTER_KEY with openssl rand -base64 32. Keep it secret and stable — it derives the encryption keys, so changing it later invalidates previously encrypted data.

services:
  norish:
    image: norishapp/norish:latest
    container_name: norish-app
    restart: always
    ports:
      - "3000:3000"
    user: "1000:1000"
    volumes:
      - norish_data:/app/uploads
    environment:
      AUTH_URL: http://localhost:3000
      DATABASE_URL: postgres://postgres:norish@db:5432/norish
      MASTER_KEY: <32-byte-base64-key> # openssl rand -base64 32
      CHROME_WS_ENDPOINT: ws://chrome-headless:3000
      REDIS_URL: redis://redis:6379
      UPLOADS_DIR: /app/uploads
      
    healthcheck:
      test:
        [
          "CMD-SHELL",
          'node -e "require(''http'').get(''http://localhost:3000/api/v1/health'', r => process.exit(r.statusCode===200?0:1))"',
        ]
      interval: 1m
      timeout: 15s
      retries: 3
      start_period: 1m
    depends_on:
      - db
      - redis

  db:
    image: postgres:17-alpine
    container_name: norish-db
    restart: unless-stopped
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: norish
      POSTGRES_DB: norish
    volumes:
      - db_data:/var/lib/postgresql/data

  chrome-headless:
    image: zenika/alpine-chrome:latest
    container_name: chrome-headless
    restart: unless-stopped
    command:
      - "--no-sandbox"
      - "--disable-gpu"
      - "--disable-dev-shm-usage"
      - "--remote-debugging-address=0.0.0.0"
      - "--remote-debugging-port=3000"
      - "--headless"

  redis:
    image: redis:8.4.0
    container_name: norish-redis
    restart: unless-stopped
    volumes:
      - redis_data:/data

volumes:
  db_data:
  norish_data:
  redis_data:

Contributing

Contributions are welcome! See CONTRIBUTING.md or the development docs to get started.

License

Norish is licensed under AGPL-3.0.


Nora

Last but not least, a picture of our lovely dog Nora:

Nora

Media gallery

Install Norish on Unraid in a few clicks.

Find Norish in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Norish Review the template variables and paths Click Install

Requirements


        Requires separate PostgresDB and Chrome Headless instances.
        
        First-time setup requires configuring OIDC settings. See instructions: https://github.com/norish-recipes/norish#first-time-auth-provider
    

Download Statistics

258,232
Total Downloads
35,559
This Month
37,652
Avg / Month

Total Downloads Over Time

Loading chart...

Related apps

Details

Repository
norishapp/norish:latest
Last Updated2026-06-19
First Seen2025-12-03

Runtime arguments

Web UI
http://[IP]:[PORT:3000]/
Network
bridge
Privileged
false

Template configuration

Web UI PortPorttcp

Container Port: 3000

Target
3000
Default
3000
Value
3000
Public URLVariable

The public URL where Norish will be accessible

Target
AUTH_URL
Default
https://norish.example.com
Value
https://norish.example.com
Database URLVariable

Postgres database connection URL

Target
DATABASE_URL
Default
postgresql://user:password@host:port/database
Value
postgresql://user:password@host:port/database
Master KeyVariable

A secure, random string used for encryption and signing. Generate with 'openssl rand -base64 32'

Target
MASTER_KEY
Headless Chrome Websocket URLVariable

WebSocket URL for a headless Chrome instance (e.g., ws://chrome:9222)

Target
CHROME_WS_ENDPOINT
Default
ws://IP_ADDRESS:PORT
Value
ws://IP_ADDRESS:PORT
Uploads StoragePath

Path to the uploads folder

Target
/app/uploads
Default
/mnt/user/appdata/norish/uploads
Value
/mnt/user/appdata/norish/uploads
Internal Uploads StorageVariable

Internal path to the uploads folder inside the container. Not recommended to change.

Target
RECIPES_DISK_DIR
Default
/app/uploads
Value
/app/uploads