Take Control of Your Recipe Collection with Tandoor
Recipe apps come and go, accounts get deleted, and subscription tiers quietly swallow features you once had for free. Tandoor is an open-source, self-hosted recipe manager that puts your cookbook entirely under your own roof – running on your hardware, storing your data, answering to no one’s pricing model.

What Tandoor Actually Does
Tandoor is built as a Django web application with a PostgreSQL backend. It handles recipe storage, ingredient management, meal planning, shopping list generation, and even nutritional data – all from a clean browser interface. There is also a mobile-friendly progressive web app experience, which means you can add it to your phone’s home screen and use it almost like a native app while cooking.
What sets Tandoor apart from something like a simple notes folder or a shared Google Doc is its structured data model. Each recipe stores ingredients as discrete units with amounts and units of measure, which lets the platform automatically scale recipes, aggregate shopping lists across multiple meals, and link ingredients to supermarket categories. If you plan a week of dinners, Tandoor can hand you one consolidated grocery list sorted by aisle type – a detail that sounds minor until you are actually using it on a Saturday morning.
Tandoor also supports recipe importing via URL. Point it at most major recipe websites and it will attempt to scrape the structured metadata and pull in the title, ingredients, steps, and an image. This works reliably on sites that use schema.org recipe markup, which covers most large food publishers. For sites without clean markup, there is a manual import flow where you paste content and structure it yourself.
The platform supports multiple users and spaces, so a household with different cooks can each maintain their own recipe books while sharing a single server. Permissions are granular enough to allow read-only guest access, useful if you want to share a cookbook with a family member without giving them editing rights over your entire collection.

Setting Up Tandoor Step by Step
The recommended installation method uses Docker Compose, which keeps all dependencies contained and makes upgrades straightforward. You will need a server or local machine running Linux – a Raspberry Pi 4, a spare desktop, or a cheap VPS all work. Docker and Docker Compose must be installed before you begin.
Start by creating a working directory and pulling the official configuration. Run mkdir tandoor && cd tandoor to create your project folder. Download the official Docker Compose file directly from the Tandoor GitHub repository – the project maintains a production-ready docker-compose.yml alongside a .env template. Copy the environment template to .env and open it for editing.
Inside the .env file, set a strong SECRET_KEY value – this should be a long random string, which you can generate with python3 -c “import secrets; print(secrets.token_hex(50))” or any password generator. Set DB_ENGINE to django.db.backends.postgresql, and fill in POSTGRES_DB, POSTGRES_USER, and POSTGRES_PASSWORD with your chosen database credentials. The ALLOWED_HOSTS variable should list your server’s IP address or domain name. If you are running Tandoor only on your local network, a local IP like 192.168.1.x is sufficient. For remote access, you will want a domain pointed at your server and a reverse proxy handling HTTPS – Nginx Proxy Manager or Caddy both integrate cleanly with Docker setups like this. If you already run self-hosted services, this pattern will feel familiar; it is the same approach used when running Vaultwarden on a Raspberry Pi.
With the environment file saved, run docker compose up -d from your tandoor directory. Docker will pull the Tandoor image and a PostgreSQL image, create the necessary containers, and start both services. The first boot applies database migrations automatically – give it thirty to sixty seconds before trying to access the interface. Open a browser and navigate to your server’s address on port 8080 (the default) or whichever port you mapped in the Compose file. You should see the Tandoor login screen. Run docker compose exec web_recipes python manage.py createsuperuser to create your admin account, then log in.
Once inside, go to the admin panel to create a regular user account separate from the superuser, which is best practice for day-to-day use. Create a Space – Tandoor’s term for a recipe library – and assign your user to it. From that point, the interface is self-explanatory: add recipes manually, import via URL using the browser extension or the built-in importer, and start building out categories and keywords to keep things organized. The Tandoor browser extension for Chrome and Firefox lets you clip recipes from any tab directly into your instance, which speeds up the collection process considerably.
Keeping Tandoor Running and Backed Up
Updating Tandoor is a two-command process. Pull the latest image with docker compose pull, then restart with docker compose up -d. Migrations run automatically on startup. The project releases updates regularly, so checking back every few weeks keeps you on a stable and feature-current version.

Backups deserve attention from day one. The PostgreSQL database holds all your recipe data, and the mediafiles volume stores uploaded images. Back up both. A simple cron job that runs docker compose exec db pg_dump -U youruser tandoor > backup.sql daily, combined with a copy of the media volume to a remote location, covers the essentials. If you lose the database without a backup, the recipe imports and manual entries are gone – there is no cloud sync to fall back on, which is the whole point of running this yourself, and also the responsibility that comes with it.





