← All articles
Vintage computer keyboard with display and packaging.

Mealie: The Self-Hosted Recipe Manager for Home Cooks

Home Automation 2026-03-04 · 5 min read mealie recipes meal-planning self-hosted docker food
By Selfhosted Guides Editorial TeamSelf-hosting practitioners covering open source software, home lab infrastructure, and data sovereignty.

Mealie: The Self-Hosted Recipe Manager for Home Cooks

Photo by Ilias Gainutdinov on Unsplash

Recipe apps are everywhere, but they all have the same problem: your data lives on someone else's server, paywalls creep in over time, and the day the company shuts down, your recipe collection vanishes. Mealie is a self-hosted alternative that puts your recipes under your own roof — with meal planning, shopping lists, and multi-user family sharing built in.

What Mealie Does

Mealie is a full-featured recipe manager with:

The UI is clean, fast, and mobile-friendly — it works well as a PWA on phones.

Prerequisites

Quick Start with Docker Compose

Create a directory for Mealie and a docker-compose.yml:

mkdir -p /opt/mealie && cd /opt/mealie
# docker-compose.yml
version: "3.8"

services:
  mealie:
    image: ghcr.io/mealie-recipes/mealie:latest
    container_name: mealie
    restart: unless-stopped
    ports:
      - "9000:9000"
    volumes:
      - mealie-data:/app/data
    environment:
      # Base URL for link generation
      BASE_URL: https://recipes.yourdomain.com
      # Default admin credentials (change after first login)
      DEFAULT_EMAIL: [email protected]
      DEFAULT_PASSWORD: changeme
      # Database (SQLite is fine for personal use)
      DB_ENGINE: sqlite
      # Token lifetime in hours
      TOKEN_TIME: 48
      # Worker count (1 is fine for small households)
      MAX_WORKERS: 1
      WEB_CONCURRENCY: 1

volumes:
  mealie-data:

Start it:

docker compose up -d

Visit http://your-server-ip:9000 and log in with the credentials you set. Change the password immediately.

Like what you're reading? Subscribe to Self-Hosted Weekly — free weekly guides in your inbox.

Configuring PostgreSQL (Optional, Recommended)

SQLite works for personal use but PostgreSQL is recommended for multi-user setups or if you plan to share with a large household.

Add a postgres service to your compose file:

services:
  mealie:
    image: ghcr.io/mealie-recipes/mealie:latest
    container_name: mealie
    restart: unless-stopped
    depends_on:
      - postgres
    ports:
      - "9000:9000"
    volumes:
      - mealie-data:/app/data
    environment:
      BASE_URL: https://recipes.yourdomain.com
      DB_ENGINE: postgres
      POSTGRES_USER: mealie
      POSTGRES_PASSWORD: strongpassword
      POSTGRES_SERVER: postgres
      POSTGRES_PORT: 5432
      POSTGRES_DB: mealie

  postgres:
    image: postgres:15
    container_name: mealie-postgres
    restart: unless-stopped
    volumes:
      - mealie-pg:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: mealie
      POSTGRES_PASSWORD: strongpassword
      POSTGRES_DB: mealie

volumes:
  mealie-data:
  mealie-pg:

Setting Up HTTPS with Caddy

A simple Caddyfile entry:

recipes.yourdomain.com {
    reverse_proxy localhost:9000
}

Caddy handles cert provisioning automatically. If you're behind Cloudflare, set SSL/TLS to "Full (strict)" in the Cloudflare dashboard.

Importing Your First Recipes

From a URL

  1. Click + New Recipe in the top right
  2. Choose Import from URL
  3. Paste the recipe URL (e.g., from AllRecipes, NYT Cooking, Serious Eats)
  4. Mealie scrapes ingredients, instructions, and images automatically

Mealie uses a community-maintained scraper library that supports hundreds of sites. If a site fails, you can file a scraper issue upstream or enter the recipe manually.

From a File

Mealie supports importing from:

Go to Settings → Data Management → Import to upload.

Scraping Tips

Some sites block scrapers aggressively. For those, use the browser extension or copy the recipe text manually. The Mealie community also maintains a list of supported sites in the docs.

Meal Planning

The meal plan view is where Mealie shines. You can:

  1. Go to Meal Plan from the sidebar
  2. Drag recipes onto days of the week
  3. Click Create Shopping List to auto-generate a grocery list from all meals

The shopping list groups items by category (produce, dairy, pantry) and lets you check off items as you shop. It syncs across devices in real time.

Recipe Scaling

When adding a recipe to the meal plan, you can specify the number of servings. Mealie automatically scales ingredient quantities — handy for cooking for two instead of four.

Multi-User and Family Sharing

Mealie supports groups — a household sharing a single recipe library:

  1. Go to Admin → Groups
  2. Create a group (e.g., "Family")
  3. Invite other users by email

All group members share the same recipe library and meal plan. Recipes can be marked private if you want to keep some personal.

Each user gets their own account with their own meal plan view, but shared recipes are accessible to everyone in the group.

OIDC / SSO Integration

If you're running Authentik or Authelia, Mealie supports OIDC. Set these environment variables:

environment:
  OIDC_AUTH_ENABLED: true
  OIDC_CONFIGURATION_URL: https://auth.yourdomain.com/application/o/mealie/.well-known/openid-configuration
  OIDC_CLIENT_ID: mealie
  OIDC_CLIENT_SECRET: your-client-secret
  OIDC_USER_GROUP: mealie-users
  OIDC_ADMIN_GROUP: mealie-admins
  OIDC_AUTO_REDIRECT: false

With OIDC_AUTO_REDIRECT: false, users can choose to log in with OIDC or a local account. Set to true to force SSO.

Backups

Mealie stores everything in /app/data inside the container. Back up the named volume:

# Stop Mealie, copy data, restart
docker compose stop mealie
docker run --rm \
  -v mealie-data:/source \
  -v /backup:/dest \
  alpine tar czf /dest/mealie-$(date +%Y%m%d).tar.gz -C /source .
docker compose start mealie

For automated daily backups, add this to cron:

0 3 * * * /path/to/backup-mealie.sh

The REST API

Mealie exposes a full REST API at /api. Get your API token from Profile → API Tokens.

Example: fetch all recipes:

curl -H "Authorization: Bearer YOUR_TOKEN" \
  https://recipes.yourdomain.com/api/recipes?perPage=50

This lets you build automations — like pulling this week's meal plan into a Home Assistant dashboard or posting tonight's dinner to a family chat.

Mealie vs Alternatives

Feature Mealie Tandoor Nextcloud Cookbook
URL import ✅ Excellent ✅ Good ⚠️ Limited
Meal planning
Shopping lists
Mobile PWA
API ✅ Full REST ⚠️ Nextcloud API
OIDC/SSO Via Nextcloud

Tandoor is the other popular self-hosted recipe manager. It's more powerful for nutritional tracking but has a steeper UI learning curve. Mealie wins on polish and ease of use for most households.

Nextcloud Cookbook works if you're already on Nextcloud, but it's limited — no meal planning, no shopping list generation.

Troubleshooting

URL import fails: Check the scraper logs with docker compose logs mealie. Many recipe sites use JavaScript rendering that scrapers can't handle. Try a different URL format for the same recipe (some sites have printer-friendly versions that work better).

Slow image loading: By default, Mealie fetches and caches images from external sources. The cache lives in /app/data/img/. If disk space is tight, set AUTO_BACKUP_ENABLED=false and manage image storage manually.

Can't log in after update: Mealie occasionally has breaking changes on major versions. Check the changelog before updating. Use image: ghcr.io/mealie-recipes/mealie:v1.x.x to pin to a specific version.

Wrapping Up

Mealie is one of those self-hosted apps that genuinely replaces a commercial service without compromise. URL import works well, meal planning is intuitive, and shopping list generation saves real time. For households that cook regularly, it's an instant quality-of-life improvement.

The Docker setup takes under 10 minutes. Give it a try.

Get free weekly tips in your inbox. Subscribe to Self-Hosted Weekly