norish-recipes/norish

Norish - A realtime, self-hosted recipe app for families & friends

TypeScript

1,275

279 commits

updated Oct 15, 2026

See the code

README

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
      OBSCURA_ENDPOINT: ws://obscura:9222
      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.2-norish.1
    container_name: norish-obscura
    restart: unless-stopped

  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
food
meal-planner
recipes
self-hosted

norish-recipes/norish

Norish - A realtime, self-hosted recipe app for families & friends

TypeScript

1,275

279 commits

updated Oct 15, 2026

See the code

README

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
      OBSCURA_ENDPOINT: ws://obscura:9222
      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.2-norish.1
    container_name: norish-obscura
    restart: unless-stopped

  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
food
meal-planner
recipes
self-hosted

Significant stargazers

Luca Casonato

2,386 followers · starred Dec 2025

Joël Galeran

682 followers · starred Sep 2026

Amjad Alsharafi

87 followers · starred Feb 2026

Jack Bailey

30 followers · starred Dec 2025