
Overview
Vanilla Cookbook is a self hosted recipe manager. It is designed with complexity under the hood, keeping the user experience as uncluttered, simply vanilla as possible.
Most of the web's recipes are written without much thought to a consistent language or structure. Many self-hosted apps go down the structuring route, automating, or asking the user to organise their data. This can lead to cluttered and complex interfaces, meaning you have to work more, just to get cooking. The philosophy behind Vanilla is to do most of that work for the user. You should be able to get cooking with a few clicks.
Development
Vanilla is built with the assistance of AI tools but it is not vibe coded. I'm a dev with 5+ years experience, and mostly know what I'm doing. All the basic architecture has been hand built, and every change that is made is reviewed and tested before release. As this is a spare time project, I honestly don't have the time to build it without the use of AI tools.
Smart Ingredient Display
All based on text string parsing, little or no work to do for the user.
Original Ingredient Strings
The following ingredients are based on this Spruce Eats recipe. No steps other than importing the recipe were taken.
These are the original ingredients (click on Original):

Parsed Ingredient Strings
Default display (user units set to metric, display symbols):
Note:
- Scaling of ingredients
- Separation out of instructions
- Quantity/Unit/Ingredient structure
- Badges (To Serve, also Approx/To Taste/Optional)
- Cups have been translated to grams

Ingredient Matches Displayed
Volumetric ingredient matches displayed (click on Match):

Features
Unit Conversion
Smart conversion from US Volumetric to imperial and metric weight. Thousands of ingredients supported in this conversion. Inline temperature conversion, fractions and ranges are also supported. Docs
Recipe Scaling
Scale your recipe ingredients. No complicated data entry, it's all done for you, and stored in the original text format.
Nutrition Parsing
Nutrition text is parsed and displayed in a structured table, with per-serving detection and scale-aware values when applicable. Docs
Control Your Data
Multiple import formats supported, exports supported. Docs
Scraping Recipes
Scrape recipes using a browser bookmarklet or simply paste a URL in. Hundreds of sites supported. Docs
For developer-facing scraping internals and the current compatibility matrix, see Scraping Flow and Scrape Compatibility.
LLM Assist
Add an LLM API key to activate these features. Google, OpenAI, Anthropic and Ollama currently supported.
- Scrape Assist
- LLM parses the HTML of a page when Schema.org data absent or malformed
- text analysis - paste in text for saving
- Recipe tweak
- Messy ingredient tidy up - trimming the fat of those lengthy ingredient strings
- Directions summarise. Look dude, I know how to boil an egg
- Translate Recipe
- Detects recipe language
- Offers translation if recipe language is different.
- Recipe generate from prompt
- Build a new recipe from a prompt, e.g. "Original pesto genovese"
- Image Analysis
- Drop up to three photos of your next recipe and it'll parse it into the correct form
- Semantic Search
- Not just fuzzy search but associative meaning. "Japanese" will throw up noodles, miso etc.
- Docs
Progressive Web App
Install on your mobile from a browser. Docs
Share URL via browser to scrape a recipe, or select text and share to parse text.
Shopping List
- Simple but useable shopping list. Add from your recipes, list history, stats. Docs
Cooking Logs
Log when you've cooked a recipe.
- Calendar view
- Recipe view
- Saves log notes and scaling
- Recook a recipe with previous scaling
User Management
User authentication is supported. You can manage users, turn on/off registration & site-wide privacy, specify password strength. Optional OAuth login with GitHub, Google, or any OpenID Connect provider (Authentik, Keycloak, etc.). Docs
Automated Database Backups
Docker installations include automatic backups to protect your recipe data:
- Scheduled backups: Weekly backups run every Sunday at 3am by default, keeping the 6 most recent backups (6 weeks of history). Configurable via
BACKUP_CRON_SCHEDULEin.env(supports standard cron syntax for daily, monthly, or custom schedules). - Pre-migration backups: Automatic backup created before any database schema migrations to ensure safe upgrades.
- Retention management: Configure how many scheduled backups to keep with
BACKUP_RETENTION_COUNTin.env(default: 6). - Accessible backups: All backups are stored in your mounted
./dbfolder alongside your active database: scheduled-backup-YYYYMMDD-HHMMSS.sqlite- Regular scheduled backups (auto-cleaned)migration-YYYYMMDD-HHMMSS.sqlite- Pre-migration backups (preserved)
After changing backup settings, restart the container: docker-compose restart
Public Recipes
Recipes and your personal cookbook can be made public, so you can share them with friends and family. Fork (duplicate - geddit) another member's recipe, or just favourite it to see it in your own feed.
Easy Installation
Designed to be as easy and stress free to set up as possible. Docker or local node instance.
Multiple Language Ingredient Parsing
Multiple languages supported for ingredient parsing. Docs
Localized UI
The app UI now ships with locale files for the same language set as the ingredient parser, with English fallback if a translation key is missing. User language can be changed in recipe settings and the app refreshes into the selected locale immediately after save.