Abstract teal and amber illustration of overlapping recipe cards, a meal-planning calendar grid, and a shopping list, representing a self-hosted recipe manager

Mealie

Mealie

Mealie is a free, self-hosted recipe manager, meal planner, and shopping list, built with a FastAPI backend and a Vue frontend. The feature that sells it is a built-in scraper: paste a recipe URL and Mealie pulls the ingredients, steps, and photo into its own database, no copy-pasting required. It runs in a single Docker container, ships with automatic backups, and covers 35+ languages out of the box.

Quick facts: Mealie is open source under the GNU AGPL-3.0 license, confirmed from the GitHub repository’s LICENSE file and license badge. Latest stable release is v3.19.2, with over 12,500 stars on GitHub. The official image is ghcr.io/mealie-recipes/mealie on the GitHub Container Registry, and the container listens on port 9000 internally. The project was originally a solo repo under developer hay-kot, now maintained under the mealie-recipes organization.

What is Mealie?

Most “recipe management” before Mealie meant a folder of browser bookmarks or a camera roll full of screenshots. Mealie treats a recipe collection like an actual database instead. Recipes come in one of two ways: paste a URL and the built-in scraper (using the same schema.org Recipe markup most cooking sites already publish) fills in ingredients, steps, and a photo automatically, or use the UI editor with Markdown support for family recipes that only exist on paper. From there, a weekly Meal Planner schedules what gets cooked, a Shopping List pulls straight from planned recipes and groups items by store section, and Cookbooks group recipes by whatever criteria makes sense: cuisine, occasion, or diet. Multi-user Groups let a household share the same library and meal plan, with an admin panel for managing sign-ups. An Open API and scheduled Webhooks round it out for anyone who wants to pipe today’s meal plan into another self-hosted tool.

How to install Mealie with Docker

Prereq: Docker and Docker Compose need to already be installed. Our homelab setup guide for beginners covers picking hardware for a first Docker project.

  1. Save the docker-compose.yml below in an empty folder.
  2. Check the current release tag on the official GitHub repo and update the image line if a newer version is out.
  3. Set a real timezone and, if the server is reachable from outside the LAN, a BASE_URL.
  4. Run the compose file from that folder and open the mapped port to create the first admin account.
services:
  mealie:
    image: ghcr.io/mealie-recipes/mealie:v3.19.2
    container_name: mealie
    restart: unless-stopped
    ports:
      - "9000:9000"
    deploy:
      resources:
        limits:
          memory: 1000M
    volumes:
      - mealie-data:/app/data/
    environment:
      ALLOW_SIGNUP: "false"
      PUID: 1000
      PGID: 1000
      TZ: America/Toronto
      BASE_URL: https://mealie.yourdomain.com

volumes:
  mealie-data:
docker compose up -d

Only port 9000 needs exposing on the container; the host side of that mapping can be changed to whatever’s free. Data, including the SQLite database, lives entirely in the mealie-data volume, per the official SQLite installation docs, which the Mealie team recommends for setups with 1-20 users. A separate PostgreSQL install path exists for larger groups or anyone running the data directory on network-attached storage, where SQLite’s file-locking can cause corruption.

Tip: pin the image to a specific version tag like v3.19.2 rather than latest. The Mealie team explicitly recommends this so upgrades happen on purpose, after reading release notes, instead of silently on the next container restart. Setting an explicit memory limit also avoids Python idling at a higher-than-necessary RAM usage.

Mealie and Home Assistant

Compatible with: an official Home Assistant integration that surfaces meal plans in the HA calendar and lets automations search recipes or trigger shopping-list actions.

Anyone already running Home Assistant can add Mealie as a native integration rather than a dashboard iframe: this week’s dinners show up on the HA calendar view, and recipe or shopping-list data becomes available to automations and scripts. It’s a small addition, but it’s the kind of glue that makes a homelab feel like one system instead of a pile of separate apps.

Mealie vs Tandoor Recipes

Tandoor Recipes is the closest comparison: also free, also self-hosted, also licensed under AGPL-3.0 (with a Commons Clause selling exception layered on top). Tandoor leans toward power users, with trigram-based fuzzy search, batch tag management, and AI-assisted features for recognizing recipe images or extracting nutrition facts. That power comes at the cost of setup time: Tandoor’s Django backend is built around PostgreSQL and usually ships as a multi-container stack (app, database, nginx), more moving parts than a first Docker project needs. Mealie stays to a single container with SQLite by default, trading some of that power-user tooling for a setup that’s closer to one docker-compose file and done.

MealieTandoor Recipes
Default deploymentSingle container, SQLiteMulti-container (app + Postgres + nginx)
Recipe importURL scraper (schema.org Recipe)URL scraper, thousands of supported sites
Meal planner & shopping listYes, built-inYes, built-in
Home Assistant integrationOfficialNot built-in
AI recipe/image recognitionNoYes
LicenseAGPL-3.0AGPL-3.0 + Commons Clause
  • Single Docker container with SQLite, no separate database to run
  • URL-import scraper that just works for schema.org-marked recipe sites
  • Official Home Assistant integration for meal plans and automations
  • Automatic, template-based backups included
  • No built-in nutrition or AI recognition tooling, unlike Tandoor
  • SQLite default isn’t safe on network-attached storage, Postgres migration needed there
  • Basic permission system; not designed to be exposed as a public-facing page

FAQ

Is Mealie free?

Yes, the self-hosted Mealie server is fully free and open source under AGPL-3.0, no paywalled features. A separate paid mobile app, Mealie.AI, exists in app stores from the same ecosystem, but it isn’t required to run or use the self-hosted server.

What port does Mealie use by default?

Port 9000 inside the container. The host-side port in a docker-compose file can be mapped to anything free, like 9925 or 9000 itself.

Does Mealie need Postgres?

No. SQLite is the default and recommended database for 1-20 users. PostgreSQL is a supported alternative mainly for larger groups or when the data volume sits on network-attached storage, where SQLite is prone to locking errors.

Is there an official Mealie mobile app?

The core project is a responsive web app that works fine on a phone browser. A separate, unofficial-adjacent app called Mealie.AI is listed on the App Store as an AI recipe assistant that pairs with a Mealie server, but it’s a distinct product from the open-source project itself.

Can Mealie import recipes automatically?

Yes. Paste a recipe URL and Mealie scrapes ingredients, instructions, and a photo from any site publishing standard schema.org Recipe markup, which covers most modern recipe blogs and publisher sites.

Mealie fits the same “own your data” logic as the rest of a homelab. Home Assistant can pull its meal plan straight onto a dashboard, and n8n can automate its backups or push shopping-list updates to a chat app, both covered in Mealie’s own community guides. Our homelab setup guide for beginners covers the Docker basics all of these depend on.