Home Software Mealie: Self-Hosting a Recipe Manager & Meal Planner on Your NAS

Mealie: Self-Hosting a Recipe Manager & Meal Planner on Your NAS

Mealie: Self-Hosting a Recipe Manager & Meal Planner on Your NAS

If you are tired of losing recipes to broken links, scattered browser bookmarks, and a folder full of screenshots that you can never search, Mealie is the self-hosted recipe manager and meal planner that finally puts your digital cookbook in one searchable place. This guide walks you through setting up Mealie on your NAS using Docker, covers the most common setup mistakes, and explains when you need to upgrade the database for a multi-user household. By the end, you will have a family-friendly meal planner that generates shopping lists from your weekly menu — no subscription required. This guide breaks down mealie recipe manager in practical terms.

FreeOpen Source License
2-4WIdle Container Overhead
~500MBDocker Image Size
30+Supported Recipe Sites

What Does Mealie Do? URL Import, Meal Planning, and Shopping Lists

Mealie is a self-hosted web application that does three core things for a homelab household. First, it imports recipes from a URL — paste a link from Allrecipes, Serious Eats, BBC Good Food, or dozens of other sites, and Mealie extracts the ingredients, instructions, cook time, and nutrition data automatically. Second, it provides a meal planning calendar where you drag recipes onto specific days, set serving sizes, and see what you are cooking for the week. Third, it generates a shopping list from the planned meals, consolidating duplicate ingredients across recipes.

🍳
Family-Friendly DesignMealie includes a “Cook Mode” that strips away all navigation and formatting, leaving just the ingredients and step-by-step instructions on a clean, large-font page. Perfect for a tablet in the kitchen.

Unlike cloud-based recipe apps, Mealie stores everything on your own NAS. No data leaves your network, no subscription fees, and no risk of a service shutting down and taking your recipe collection with it. The search is fast — you can filter by tags, categories, ingredients, or full-text across your entire library.

Mealie Setup Guide: Docker Compose on Your NAS

The cleanest way to deploy Mealie on a NAS is with Docker Compose. This works on TrueNAS SCALE, Unraid, Proxmox (via a Docker LXC), or any Linux server running Docker. The container is lightweight and runs fine alongside other services like Jellyfin or a file server. For a dedicated Docker host build, check out our Best Docker Server Build 2026 guide.

Tip:

If you are running TrueNAS SCALE, Mealie can be installed directly from the Apps catalog. But using a manual Docker Compose stack gives you more control over volumes, environment variables, and future upgrades.

Basic Docker Compose File for Mealie

Create a directory on your NAS for Mealie data, then save the following as docker-compose.yml:

version: "3.7"
services:
  mealie:
    image: ghcr.io/mealie-recipes/mealie:latest
    container_name: mealie
    restart: always
    ports:
      - "9925:9000"
    volumes:
      - ./mealie-data:/app/data
    environment:
      - BASE_URL=https://mealie.yourdomain.com
      - DB_ENGINE=sqlite
      - TZ=America/New_York

Run docker compose up -d in that directory. Mealie will initialize the SQLite database automatically on first launch. Access the web UI at http://your-nas-ip:9925.

Persistent Volume for the Database

The ./mealie-data:/app/data volume mount is critical. This is where Mealie stores its SQLite database, recipe images, and user settings. Without it, every container restart would wipe your data. Point this volume to a dataset on your NAS pool — ideally on a mirrored or RAID-Z array that is backed up separately. Remember, RAID protects against drive failure, not accidental deletion or ransomware. A separate backup strategy is still required.

Warning:

Never store the Mealie data directory on a removable USB drive or a single-drive pool without a backup. Losing the database means losing every imported recipe and every planned meal.

SQLite vs PostgreSQL: When to Upgrade for a Family

Mealie supports two database backends: SQLite (default) and PostgreSQL. For a single user or a couple who imports a few dozen recipes and plans one week of meals at a time, SQLite is perfectly adequate. It requires zero configuration, uses minimal RAM, and handles concurrent read operations well.

SQLite is Great For

  • 1-2 users
  • Under 500 recipes
  • Simple meal planning (one week at a time)
  • Low-resource NAS (2GB RAM or less)

PostgreSQL is Better For

  • 3+ concurrent users
  • 500+ recipes with many tags/categories
  • Heavy concurrent editing (two people planning meals at the same time)
  • Scaling up to thousands of recipes

If you have a household of four where multiple family members are logging in, importing recipes, and editing the meal plan simultaneously, switch to PostgreSQL. SQLite uses file-level locking, which can cause “database is locked” errors under concurrent write load. PostgreSQL handles multiple writers gracefully and adds no noticeable overhead on a typical NAS.

Switching from SQLite to PostgreSQL

To migrate, add a PostgreSQL container to your Compose file, change the environment variables, and run the Mealie database migration. Here is the key change:

environment:
  - BASE_URL=https://mealie.yourdomain.com
  - DB_ENGINE=postgres
  - POSTGRES_USER=mealie
  - POSTGRES_PASSWORD=aStrongPassword
  - POSTGRES_SERVER=postgres
  - POSTGRES_PORT=5432
  - POSTGRES_DB=mealie

Add a postgres service alongside your Mealie service, with its own persistent volume. Mealie will automatically migrate the data on first launch with the new engine. Back up your SQLite database file before attempting this migration.

The Most Common Setup Mistake: Setting the BASE_URL Correctly

This single environment variable causes more headaches than any other Mealie configuration issue. If BASE_URL is wrong, the web UI loads but links, images, and the meal planner all break silently. The application uses this URL to generate absolute links for emails, OpenGraph previews, and internal API calls.

💾 Expert Note:

The BASE_URL must match the URL you actually type into your browser — including the protocol (https:// or http://), the domain or IP, and optionally a port. If you access Mealie at http://192.168.1.100:9925, set BASE_URL=http://192.168.1.100:9925. If you use a reverse proxy with a domain like https://mealie.yourdomain.com, set that exactly. Do not include a trailing slash.

Common failure pattern: You set up a reverse proxy on port 443 but forget to update BASE_URL from the default (http://localhost:9000). The result is a working login page but broken recipe images and a non-functional meal planner. Always verify BASE_URL matches your access path after any proxy or port change.

Exposing Mealie Safely to Family Members Outside the LAN

Mealie is designed to be shared with family — but you should not expose it directly to the internet without protection. The safest approach is to run Mealie behind a reverse proxy with HTTPS and authentication. This allows family members who do not live in your house to access the recipe collection and meal plan without you opening ports to the Mealie container itself.

Setting Up a Reverse Proxy for Mealie

1
Choose a reverse proxy

Use Nginx Proxy Manager, Traefik, or Caddy on your Docker host. All three support automatic SSL certificate generation via Let’s Encrypt.

2
Create a DNS record

Point mealie.yourdomain.com to your public IP (or use a dynamic DNS service if your IP changes).

3
Configure the proxy

Proxy requests on port 443 to your Mealie container on port 9000. Ensure WebSocket support is enabled for the meal planner’s real-time updates.

4
Update BASE_URL

Change the Mealie environment variable to BASE_URL=https://mealie.yourdomain.com — this is the step everyone forgets.

If you are running Unraid, the built-in Nginx Proxy Manager is a popular choice. For TrueNAS SCALE users, the Traefik app works well. Both integrate cleanly with Let’s Encrypt for free SSL certificates. If you are comparing NAS operating systems, our TrueNAS vs Unraid guide covers which platform handles reverse proxies more smoothly.

Security Note:

Mealie has built-in user authentication with password hashing. Even behind a reverse proxy, enforce strong passwords and consider enabling two-factor authentication in Mealie’s admin settings. Do not rely solely on the proxy for access control.

Mealie vs Tandoor: Which Self-Hosted Recipe Manager Fits Your Family?

Tandoor Recipes is the main alternative to Mealie in the self-hosted space. Both are open source, both run in Docker, and both support URL imports. But they differ in philosophy and target audience.

Feature Mealie Tandoor
URL Import Quality Excellent — 30+ site parsers Good — fewer parsers, more manual cleanup
Meal Planning UX Drag-and-drop calendar, shopping list generation Calendar view, but less intuitive for non-technical users
Mobile Experience Responsive web app, PWA support Responsive web app, PWA support
Multi-User Built-in user management with permissions Built-in user management
Nutrition / Scale Automatic nutrition import, serving scaling Manual nutrition entry, serving scaling
Database Options SQLite or PostgreSQL PostgreSQL only

For a family setting where non-technical members will be the primary users, Mealie is the better choice. The URL import is more reliable, the meal planner is more polished, and the SQLite option means you can run it on a low-power NAS without setting up a separate database server. Tandoor is a capable alternative if you prefer a more traditional database backend and do not mind occasional manual recipe cleanup.

Bottom Line: Should You Self-Host Mealie on Your NAS?

If you have ever lost a recipe to a broken link or spent ten minutes searching for a screenshot of a dish you cooked last month, Mealie is worth the 15-minute setup time. It runs on any NAS that supports Docker, uses negligible system resources, and gives every family member a shared, searchable cookbook that works on phones, tablets, and laptops.

Start with SQLite and the basic Docker Compose file. Once you have a few dozen recipes imported, introduce the meal planner. If the household grows to three or more active users, plan a weekend migration to PostgreSQL. Expose it behind a reverse proxy with HTTPS so relatives can browse your recipe collection from their own homes. And remember — back up the Mealie data directory alongside the rest of your NAS data, because no amount of RAID replaces a real backup.

💾 Expert Note:

If you are already running ZFS on your NAS, consider enabling ZFS snapshots on the dataset that holds your Mealie data. A snapshot taken before a major upgrade (like the SQLite-to-PostgreSQL migration) gives you a one-second rollback if something goes wrong. See our ZFS Snapshots Explained guide for the exact commands.

Frequently Asked Questions

Does Mealie import recipes automatically from a URL?

Yes. Mealie includes built-in parsers for over 30 popular recipe websites including Allrecipes, Serious Eats, BBC Good Food, NYT Cooking, and Food Network. You simply paste the URL into the import dialog, and Mealie extracts the ingredients, instructions, cook times, and nutrition data automatically. The extraction quality varies by site — major sites work reliably, while smaller blogs may require minor manual corrections after import.

Do I need PostgreSQL or is SQLite enough for a family?

For a typical family of 2-4 people with under 500 recipes, SQLite is more than sufficient. It requires no separate database server, uses less than 100MB of RAM, and handles concurrent read operations without issues. You should consider upgrading to PostgreSQL only if multiple family members are actively editing the meal plan at the same time, or if you have over 500 recipes with complex tagging. The migration is straightforward and can be done at any time without data loss.

Why is Mealie not loading correctly after I set it up?

The most common cause is an incorrect BASE_URL environment variable. If the web UI loads but recipe images are broken, links lead to error pages, or the meal planner does not save changes, check that BASE_URL matches the exact URL you use to access Mealie — including the protocol (http vs https), domain or IP, and port if applicable. Another frequent issue is forgetting to mount a persistent volume for the database, which causes all data to be lost on container restart.

Can multiple family members use Mealie at once?

Yes. Mealie has built-in multi-user support with separate accounts and permissions. Each family member can have their own login, save favorite recipes, and create personal meal plans. The admin user can control who can add recipes, edit the shared meal plan, or access the shopping list. If you have more than two concurrent users actively editing the meal plan, switching from SQLite to PostgreSQL will prevent database lock errors during simultaneous writes.

📋 Sources & Last Verified:

Last verified: July 10, 2026. Specifications cross-checked against manufacturer documentation where available.

🛡 Shop Recommended Hardware

Prices and stock verified regularly by our affiliate partners. As an affiliate, HomeLabCost may earn a commission on qualifying purchases at no extra cost to you.

Browse Hardware Picks →

homelabcost

HomeLabCost editor covering NAS builds, hardware selection, and homelab server setup guides.

Leave a Reply

Your email address will not be published. Required fields are marked *