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"
    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
      OBSCURA_ENDPOINT: ws://obscura:9222
      OBSCURA_CDP_TOKEN: <random-token> # openssl rand -hex 32, same value on obscura
      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

  # Renders recipe pages for URL imports
  obscura:
    image: norishapp/obscura:0.2.4-norish.1
    container_name: norish-obscura
    restart: unless-stopped
    environment:
      OBSCURA_CDP_TOKEN: <random-token>

  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

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

482,433
Total Downloads
101,266
This Month
57,258
Avg / Month

Total Downloads Over Time

Loading chart...

Related apps

Details

Repository
norishapp/norish:latest
Last Updated2026-09-24
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