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:

Weiterführende Artikel