Selbst gehostete Rezeptverwaltung: Mealie oder Tandoor?
Kochrezepte in einer App verwalten, die man selbst hostet – das ist ein klassischer Homelab-Anwendungsfall. Die zwei bekanntesten Self-Hosted Rezeptmanager sind Mealie und Tandoor. Beide importieren Rezepte aus dem Web, beide bieten Wochenplanung – aber ihr Ansatz unterscheidet sich deutlich in Schwerpunkt und Komplexität.
Mealie: Einfachheit und überlegener Web-Import
Mealie ist in Python (FastAPI) auf dem Backend und Vue.js auf dem Frontend geschrieben. Es hat sich besonders durch seinen automatischen Rezept-Scraper einen Namen gemacht: Über 900 Websites werden unterstützt – von Chefkoch.de über BBC Good Food bis zu YouTube-Kochkanälen.
Stärken:
- URL-Import: Rezept-URL eingeben, Mealie erkennt Zutaten und Zubereitungsschritte automatisch bei 900+ Sites
- Wochenplaner mit integrierter, automatisch erstellter Einkaufsliste
- Multi-User: Jeder Haushalt hat seinen eigenen Bereich, Rezepte können geteilt werden
- vollständige REST-API: Für eigene Automatisierungen (n8n, Home Assistant, etc.)
- OCR-Import: Fotos von handgeschriebenen oder gedruckten Rezepten können direkt digitalisiert werden
- Einfaches Setup: Docker Compose mit einem Container, minimal Abhängigkeiten
- Community-Rezeptbibliothek: Geteilte Rezepte direkt importieren
Schwächen:
- Keine detaillierte Nährwert-Berechnung (Kcal, Makros) nativ – nur falls die Quellseite es liefert
- UI weniger poliert und strukturiert als Tandoor
- Begrenzte Skalierung für sehr große Sammlungen (10.000+ Rezepte bei schwächerer Hardware)
Tandoor: Strukturiert und nährwert-fokussiert
Tandoor ist das Django-basierte Schwergewicht unter den Rezeptmanagern. Es kommt aus der deutschen Open-Source-Community (ursprünglich "Kochbuch") und bietet eine strukturiertere Datenbank-Architektur mit Supermarkt-Regal-Sortierung und detaillierten Nährwertangaben.
Stärken:
- Detaillierte Nährwertdatenbank mit Kcal, Protein, Kohlenhydraten, Fett pro Rezept und Zutat
- Supermarkt-Regalzuordnung: Einkaufsliste sortiert nach echtem Ladenplan (Kühlregal, Obst, Backwaren)
- Portierungsrechner: Automatische Umrechnung auf beliebige Portionsmengen
- Buchimport: Rezepte aus strukturierten Kochbüchern via Heuristiken
- Datenbank-Integration: Umfangreiche Tag-, Kategorie- und Zutat-Struktur
- Externe API-Rezepte: Spoonacular und andere Rezept-APIs als Quelle
Schwächen:
- Komplexeres Setup (Django + Celery + Redis erforderlich, mehr Container)
- Scraper weniger ausgereift als Mealie's (deutlich weniger Sites unterstützt)
- UI-Lernkurve: Mehr Konzepte zu verstehen (Zutaten-Typen, Einheiten-Normalisierung, etc.)
- Aktivere Entwicklung der letzten Monate bei Mealie, Tandoor etwas ruhiger
Direkt-Vergleich
| Kriterium | Mealie | Tandoor |
|---|---|---|
| Web-Import Qualität | ✅ 900+ Sites | ⚠️ ~200 Sites |
| Nährwertberechnung | ⚠️ Basic (Quelldaten) | ✅ Detailliert (eigene DB) |
| Einkaufsliste | ✅ Automatisch | ✅ Inkl. Regal-Sortierung |
| Wochenplaner | ✅ | ✅ |
| Setup-Komplexität | ✅ Niedrig (1 Container) | ⚠️ Mittel (3+ Container) |
| Multi-User | ✅ | ✅ |
| REST-API | ✅ Vollständig | ✅ Vollständig |
| OCR-Import | ✅ | ✅ |
| Portierungsrechner | ⚠️ Basic | ✅ Ausgereift |
| Community-Aktivität | ✅ Sehr aktiv | ⚠️ Mittel |
Meine Empfehlung
Mealie ist die richtige Wahl für den typischen Homelab-Nutzer: schnelles Setup, bester Web-Import, solide Mobile-Kompatibilität. Wer Rezepte von deutschen Kochwebsites importieren will, ist mit Mealie klar besser aufgestellt.
Tandoor empfehle ich, wenn Ernährungsbewusstsein eine Rolle spielt – für Familien mit Kalorienzählen, Fitness-Tracking oder spezifischen Diäten ist die detaillierte Nährwertdatenbank Gold wert. Auch die Supermarkt-Regal-Sortierung der Einkaufsliste ist ein echter Zeitsparer beim Einkaufen.
Für mein Homelab nutze ich Mealie – die automatischen Imports aus deutschen Koch-Websites (Chefkoch, Kitchen Stories) funktionieren sehr gut, und der Wochenplaner mit automatischer Einkaufsliste ist im Alltag praktisch.
Mealie Setup (Docker Compose)
services:
mealie:
image: ghcr.io/mealie-recipes/mealie:latest
container_name: mealie
ports:
- "9925:9000"
environment:
ALLOW_SIGNUP: "false"
PUID: 1000
PGID: 1000
TZ: Europe/Berlin
MAX_WORKERS: "1"
WEB_CONCURRENCY: "1"
BASE_URL: "https://mealie.example.de"
DEFAULT_EMAIL: "admin@example.de"
DEFAULT_PASSWORD: "sicheres_passwort_ändern"
volumes:
- mealie-data:/app/data/
restart: unless-stopped
volumes:
mealie-data:
Tandoor Setup (Docker Compose)
services:
db_recipes:
image: postgres:16-alpine
environment:
POSTGRES_DB: djangodb
POSTGRES_PASSWORD: db_passwort
POSTGRES_USER: djangouser
volumes:
- tandoor-db:/var/lib/postgresql/data
restart: always
web_recipes:
image: vabene1111/recipes:latest
environment:
SECRET_KEY: "ein_langer_zufaelliger_schluessel"
DB_ENGINE: django.db.backends.postgresql
POSTGRES_HOST: db_recipes
POSTGRES_PORT: 5432
POSTGRES_USER: djangouser
POSTGRES_PASSWORD: db_passwort
POSTGRES_DB: djangodb
volumes:
- tandoor-staticfiles:/opt/recipes/staticfiles
- tandoor-mediafiles:/opt/recipes/mediafiles
depends_on:
- db_recipes
ports:
- "8080:8080"
restart: always
volumes:
tandoor-db:
tandoor-staticfiles:
tandoor-mediafiles: