Taking Control of Your Recipe Collection
Recipe apps come and go. Platforms shut down, subscription fees creep up, and your carefully curated cookbook ends up trapped behind a login screen you no longer trust. Tandoor is an open-source recipe manager built for people who want their food data stored on their own server, accessible from any device, and completely free from third-party interference. It runs as a self-hosted web application, supports importing recipes from across the internet, and organizes everything through a clean, responsive interface.
The appeal goes beyond privacy. Tandoor handles meal planning, shopping lists, nutritional data, and cookbook organization – all in one place. Getting it running takes about 20 minutes if you have Docker installed, and the result is a personal recipe database that belongs to you entirely.

What You Need Before You Start
Tandoor runs inside Docker containers, so your server or home machine needs Docker and Docker Compose installed. Any Linux-based system works well – a Raspberry Pi 4, an old desktop repurposed as a home server, or a small VPS from any cloud provider. You should be comfortable with terminal commands at a basic level: navigating directories, editing files, and running commands. No programming knowledge is required.
You will also need a domain or local hostname if you want to access Tandoor from outside your home network, though a local IP address works fine for home-only use. For external access, a reverse proxy like Nginx or Caddy handles SSL termination cleanly, and many self-hosters already have one running for other services. If you are running multiple self-hosted tools – like Vikunja for task management – you likely have this infrastructure already in place.
Allocate at least 1GB of RAM and a few gigabytes of disk space. Tandoor stores images alongside recipes, so storage needs grow gradually as your library expands. The database runs on PostgreSQL by default, which Tandoor’s official Docker Compose file handles automatically – you do not need to configure a database server manually.
Getting Tandoor Running with Docker Compose
Download the official Docker Compose file directly from Tandoor’s GitHub repository. The project maintains a docker-compose.yml and a matching .env file that you configure before the first launch. Create a working directory, pull both files, and open the .env file in a text editor. The critical variables to set are SECRET_KEY (a long random string), POSTGRES_PASSWORD, and ALLOWED_HOSTS, which should include your server’s IP address or domain name.
Once the environment file is configured, run docker compose up -d from your working directory. Docker pulls the required images and starts three containers: the Tandoor application, PostgreSQL, and an Nginx instance that serves static files. The first launch takes a minute or two while the database initializes. After that, Tandoor is accessible on port 8080 by default, though this is adjustable in the Compose file.

Configuring Your Instance and Adding Recipes
Navigate to your Tandoor URL in a browser and you will see a login screen. Create your admin account through the registration page – on a fresh install, the first registered user becomes the administrator. From the admin panel you can configure spaces (Tandoor’s term for separate recipe collections), invite other users, and adjust global settings like the default language and measurement system. If you are running this for a household, each family member can have their own login with access to shared cookbooks.
Importing recipes is where Tandoor genuinely earns attention. The built-in recipe scraper supports hundreds of cooking websites, so pasting a URL into the import dialog pulls in the title, ingredients, steps, and images automatically. Accuracy varies slightly by website – some structured recipe pages import perfectly, while others need minor cleanup. For recipes that cannot be scraped automatically, Tandoor provides a full manual editor with ingredient grouping, step-by-step formatting, and timing fields. You can also import from other recipe managers using formats like Mealie, Nextcloud Cookbook, or plain JSON.
Meal planning lives inside a dedicated calendar view. Assign recipes to specific days, then generate a shopping list from your planned meals with a single click. Tandoor consolidates duplicate ingredients across recipes – if three dishes call for onions, the shopping list shows a single combined quantity. The shopping list can be shared via a public link, which is useful for anyone who wants to access it from a phone at the grocery store without needing a full Tandoor account. Nutritional data pulls from built-in ingredient databases, though accuracy depends on how specifically ingredients are matched.
Cookbooks work as named collections inside a space, letting you group recipes by theme, occasion, or dietary need. Tags and categories layer on top of that for filtering. The search function handles ingredient-level queries, so searching for “chicken thighs” returns every recipe that lists them, regardless of how the dish is named. Tandoor also supports custom units and ingredient aliases, which matters if you switch between metric and imperial or use regional ingredient names.

Keeping Tandoor updated requires running docker compose pull followed by docker compose up -d to replace containers with newer images. Backups are straightforward: copy the PostgreSQL data volume and your media folder, which contains uploaded images. A simple cron job handles both. Where Tandoor occasionally creates friction is in its initial configuration – the .env file has a large number of optional variables, and working out which ones are relevant to your setup takes a close reading of the documentation. The official docs are thorough but dense, and the Discord community fills gaps quickly when something behaves unexpectedly.





