selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

vanilla-cookbook logo

Self-host vanilla-cookbook

v1.6.1

Self-hosted recipe manager with smart ingredient parsing

ReleaseOpen SourceGPL-3.0
Docker ComposeCompose file & guide
docker-compose up -d
Updated6 hours ago
LanguageJavaScript
Setup difficultyEasy
MobilePWA
Stars
158
Port
3000 (HTTP web interface)
Docker
jt196/vanilla-cookbook
Recipe home screen in Dracula themeRecipe list view in Dracula themeRecipe detail view in Dracula themeAdmin site settings in Dracula themeRecipe home screen in light themeRecipe list view in light themeRecipe detail view in light themeAdmin site settings in light theme

What is vanilla-cookbook?

Vanilla Cookbook is a self-hosted recipe manager designed for home cooks who want a clean, uncluttered interface. It automatically parses ingredient strings from imported recipes, converting US volumetric measurements to metric and imperial weights, and supports scaling, nutrition parsing, and multiple import/export formats. Recipes can be scraped from hundreds of websites via a bookmarklet or URL paste. Optional LLM integration (OpenAI, Anthropic, Google, Ollama) enables AI-assisted scraping, ingredient cleanup, translation, recipe generation from prompts, image analysis, and semantic search. The app runs as a single Docker container with a portable SQLite database, includes automated weekly backups, and supports user authentication with OAuth/OIDC (GitHub, Google, Authentik, Keycloak). It installs as a Progressive Web App on mobile and offers a shopping list and cooking log with calendar view.

Should you self-host vanilla-cookbook?

vanilla-cookbook scores 46/100 on selfhost.directory (how scoring works) and ranks #13 of 18 in Recipe Management. It has 158 GitHub stars.

It shipped 13 stable releases in the past year. The latest, v1.6.1, came out on 28 October 2026. New versions land roughly every 1 days.

Setup is easy: most people get it running in one sitting. An official Docker image is available. It is GPL-3.0-licensed and written mostly in JavaScript.

Its closest alternative on selfhost.directory is Mealie (75/100, 13 711 stars). It scores higher overall, so compare the two before you pick. See vanilla-cookbook vs Mealie side by side.

Features

  • Automated BackupsDocker installations only
  • Cooking Logs
  • Import/Export
  • LLM AssistRequires LLM API key (OpenAI, Anthropic, Google, Ollama, or OpenAI-compatible)
  • Multi-language Support
  • Nutrition Parsing
  • OAuth/OIDC Authentication
  • Progressive Web App
  • Public Recipes
  • Recipe Management
  • Recipe Scaling
  • Recipe Scraping
  • Shopping List
  • Unit Conversion
  • User Management

vanilla-cookbook README

How to install vanilla-cookbook

Install vanilla-cookbook with Docker Compose

Docker and Docker Compose
Environment variables
ORIGIN (required), VITE_SITE_NAME, BODY_SIZE_LIMIT, RECIPE_IMAGE_MAX_DIMENSION, RECIPE_IMAGE_GENERATION_SIZE, OAuth/OIDC credentials, LLM API keys, backup settings, PUID/PGID
  1. In your project directory, create the .env and docker-compose.yml files using the respective .template files in the repo root:

    curl -o .env https://raw.githubusercontent.com/jt196/vanilla-cookbook/main/.env.template
    curl -o docker-compose.yml https://raw.githubusercontent.com/jt196/vanilla-cookbook/main/docker-compose.yml.template
    
  2. In the .env file

    • Change the ORIGIN to the URL it's going to be hosted on. If you get any login CORS messages, this not being set correctly will be the reason. The default ORIGIN=http://localhost:3000 should work with the default docker-compose.yml file unless you have anything else on that port.
  3. Create db and uploads folders for persistence in your docker folder, make sure the share paths are correct in the docker-compose file: mkdir -p ./db ./uploads

  4. Use :latest tags for bleedin' edge, :stable for stable release.

  5. Run docker-compose up -d

  6. On first run, you'll be prompted to enter Admin user details.

  7. Optional: set PUID and PGID (in your shell or .env) if you want container file ownership to match a specific host user. Defaults are 1000:1000.

Single container with SQLite database, automated backups included

How to configure vanilla-cookbook

  • ANTHROPIC_API_KEYAnthropic API key for LLM features

    Anthropic API key for LLM features

  • BACKUP_CRON_SCHEDULE0 3 * * 0Cron schedule for automated backups

    Cron schedule for automated backups

    values: standard cron syntax

  • BACKUP_RETENTION_COUNT6Number of scheduled backups to keep

    Number of scheduled backups to keep

  • BODY_SIZE_LIMIT5242880Maximum request body size in bytes (applies to photo uploads and recipe imports)

    Maximum request body size in bytes (applies to photo uploads and recipe imports)

  • GITHUB_CLIENT_IDGitHub OAuth client ID

    GitHub OAuth client ID

  • GITHUB_CLIENT_SECRETGitHub OAuth client secret

    GitHub OAuth client secret

  • GOOGLE_API_KEYGoogle API key for LLM features

    Google API key for LLM features

  • GOOGLE_CLIENT_IDGoogle OAuth client ID

    Google OAuth client ID

  • GOOGLE_CLIENT_SECRETGoogle OAuth client secret

    Google OAuth client secret

  • OIDC_CLIENT_IDGeneric OIDC provider client ID

    Generic OIDC provider client ID

  • OIDC_CLIENT_SECRETGeneric OIDC provider client secret

    Generic OIDC provider client secret

  • OIDC_EMAIL_CLAIMemailClaim for email from OIDC provider

    Claim for email from OIDC provider

  • OIDC_ISSUER_URLGeneric OIDC provider issuer URL

    Generic OIDC provider issuer URL

  • OIDC_NAMEOIDCButton label for OIDC provider

    Button label for OIDC provider

  • OIDC_NAME_CLAIMpreferred_usernameClaim for username from OIDC provider

    Claim for username from OIDC provider

  • OIDC_SCOPESopenid email profileScopes to request from OIDC provider

    Scopes to request from OIDC provider

  • OLLAMA_BASE_URLhttp://localhost:11434Ollama base URL for local models

    Ollama base URL for local models

  • OPENAI_API_KEYOpenAI API key for LLM features

    OpenAI API key for LLM features

  • OPENAI_COMPATIBLE_API_KEYAPI key for OpenAI-compatible server (optional for local servers)

    API key for OpenAI-compatible server (optional for local servers)

  • OPENAI_COMPATIBLE_BASE_URLOpenAI-compatible server API root (e.g., LiteLLM, OpenRouter, LM Studio, vLLM, Together, Groq)

    OpenAI-compatible server API root (e.g., LiteLLM, OpenRouter, LM Studio, vLLM, Together, Groq)

  • ORIGINhttp://localhost:3000The full URL where your app is hosted (critical for auth cookies and CORS)

    The full URL where your app is hosted (critical for auth cookies and CORS)

  • PASSWORD_MIN_LENGTH8Minimum password length

    Minimum password length

  • PASSWORD_REQUIRE_DIGITtrueRequire digit in password

    Require digit in password

    values: true/false

  • PASSWORD_REQUIRE_LOWERCASEtrueRequire lowercase in password

    Require lowercase in password

    values: true/false

  • PASSWORD_REQUIRE_SPECIALtrueRequire special character in password

    Require special character in password

    values: true/false

  • PASSWORD_REQUIRE_UPPERCASEtrueRequire uppercase in password

    Require uppercase in password

    values: true/false

  • PGID1000Container group ID for file ownership

    Container group ID for file ownership

  • PUID1000Container user ID for file ownership

    Container user ID for file ownership

  • RATE_LIMIT_LOGIN_PER_ID5Rate limit login attempts per user

    Rate limit login attempts per user

  • RATE_LIMIT_LOGIN_PER_IP10Rate limit login attempts per IP

    Rate limit login attempts per IP

  • RATE_LIMIT_WINDOW_MS60000Rate limiting window in milliseconds

    Rate limiting window in milliseconds

  • RECIPE_IMAGE_GENERATION_SIZE1024x1024Recipe image generation output size (WIDTHxHEIGHT)

    Recipe image generation output size (WIDTHxHEIGHT)

    values: 256-4096 per side

  • RECIPE_IMAGE_MAX_DIMENSION1024Recipe image processing max dimension in pixels (resize target for stored images and OCR preprocessing)

    Recipe image processing max dimension in pixels (resize target for stored images and OCR preprocessing)

    values: 256-4096

  • SEMANTIC_WARMUP_ON_BOOTfalseOptional startup warmup for semantic search

    Optional startup warmup for semantic search

    values: true/false

  • VITE_SITE_NAMEVanilla CookbookSite name shown in browser tab and headers

    Site name shown in browser tab and headers

vanilla-cookbook releases & version history

More in Recipe Management

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…