Skip to main content
  1. Posts/
  2. Self-Hosting/

Mealie - self-hosted app for recipes, meal planning, and shopping lists

··1495 words·8 mins· loading · loading · ·
Stilicho2011
Author
Stilicho2011
Writing about homelab, self-hosting, automation and open-source solutions
Table of Contents
Self-Hosting - This article is part of a series.
Part : This Article
Mealie interface on desktop, tablet, and smartphone - recipe grid

What is Mealie
#

Mealie is an open-source, self-hosted web app for managing recipes, planning meals, and building shopping lists.
Project website: mealie.io
Documentation: docs.mealie.io

Key features:

  • Install on your own server or home infrastructure - no dependency on cloud services.
  • Import recipes from web pages using a built-in “scraper.”
  • Modern Vue.js interface with a REST API backend.
  • Meal planner and shopping lists.
  • Support for multiple users and groups.
  • Organize recipes into collections, tags, and categories.

Main features of Mealie
#

  1. Recipe import
    You can enter recipes manually or paste a link to a web page, and Mealie will extract the ingredients and instructions.
    More on GitHub: github.com/mealie-recipes/mealie

  2. Recipe editor
    Full editing of ingredients, instructions, photos, and descriptions.

  3. Meal planner
    Distribute meals across days of the week/month.

  4. Shopping list
    Automatically builds a list based on selected recipes, with the option to group items by store department.

  5. Recipe organization
    Tags, categories, and collections (cookbooks) for easy searching.

  6. API and integrations
    REST API, webhooks, support for Home Assistant and other systems.

  7. Localization
    The interface is available in many languages.


Why Mealie is interesting for home enthusiasts
#

If you already have a home server or cluster (say, a Proxmox host and a mini PC), Mealie fits right in:

  • Runs in a Docker or LXC container.
  • Full control over your data - your recipes, meal plans, and shopping lists stay with you.
  • Can be used as a content base for a blog or YouTube channel.
  • Integrates with home automation: notifications about planned meals, ingredient lists on the fridge, and more.

Possible limitations
#


What’s new in Mealie since the article was published
#

Note

Update. This article was written for the Mealie version current as of October 2025. Since then several releases have come out (the current one as of August 2026 is v3.22.0), and the project has gained features that didn’t exist at the time of writing. I’ll cover the most notable ones and show how to use them.

Unit standardization
#

Previously, a shopping list could duplicate the same ingredient with different units (for example, “1 pint of milk” and “2 cups of milk” from different recipes wouldn’t merge into one entry). Now units can be standardized, and Mealie automatically consolidates compatible quantities into a single shopping list entry. Standard units are configured on the Data Management page in the group settings - you can also add your own there.

Warning

A separate note for those used to cooking by grams and milliliters, as is mostly the norm in Russia. Standardization in Mealie merges compatible units of the same type (volume to volume: pintcups, weight to weight: ozlb), but it can’t reliably convert volume to weight - meaning “1 cup of flour” won’t turn into correct grams on its own, because that requires the density of the specific product, which simply isn’t in Mealie’s database. Most recipes imported from English-language sites use cups, ounces, and Fahrenheit - when importing such a recipe, it’s worth manually checking and, if needed, converting to grams/milliliters/Celsius yourself, since the automation won’t always save you here.

A more reliable web scraper
#

The recipe parser for regular websites has been noticeably improved - many sites where importing used to break (forcing you to manually copy the page’s HTML) can now be imported again with just a link.

Announcements - developer announcements
#

A separate announcements channel from the project maintainers has appeared in the interface - it carries important news about features that require user action, in addition to the regular release notes.


AI features in Mealie
#

This is arguably the most substantial addition to Mealie recently, so I’ll cover it separately and in detail.

Which providers are supported
#

An important point for the homelab audience: Mealie isn’t locked to OpenAI. It works with any OpenAI-compatible API, namely:

  • OpenAI - the simplest option, but paid (by tokens and by audio minutes for Whisper);
  • Azure OpenAI - if you have a corporate Azure subscription;
  • Ollama - a self-hosted option you can run on the same Proxmox host or mini PC and pay nothing at all, at the cost of recognition quality depending on the local model chosen;
  • any other custom endpoint implementing an OpenAI-compatible API.

For those who fundamentally don’t want to send their recipes and videos to some external service - Ollama looks like the most logical choice specifically for a homelab: privacy is preserved, and no money is needed.

What exactly the AI can do in Mealie
#

  • Import with AI - the main feature. Lets you create a recipe from plain text, HTML, JSON (including schema.org/Recipe markup), a photo of a recipe (printed or even handwritten), or a link to a video (YouTube, TikTok, Instagram) - in the latter case the audio track is transcribed via a Whisper-compatible model and turned into text, from which a structured recipe is then assembled. There’s also an optional translation of the result into your desired language.
  • Fallback parser for site scraping - if the regular scraper fails to parse a page (unusual layout, JS rendering, etc.), the AI kicks in as a fallback and tries to extract the recipe directly from the page content.
  • AI ingredient parser - an alternative to the built-in NLP and brute-force parsers when breaking down an ingredient list into quantity/unit/product.
  • Automatic tag, category, and tool matching - the AI suggests suitable tags and categories for a new recipe based on its content.

How to set it up
#

Everything is configured in Group Settings, not globally for the whole server - this is convenient if Mealie is used by several families/groups with different providers.

  1. Specify a default provider (Default provider) - without this step no AI feature will work, the buttons simply stay hidden.
  2. If you want to recognize photos of recipes, the provider must support working with images (for OpenAI that’s models like gpt-4o/gpt-5, for Ollama - vision models like llava).
  3. If you want to import recipes from video, you need a separate audio provider, e.g. whisper-1.
  4. The key and endpoint address can be set either via environment variables in docker-compose.yml (OPENAI_API_KEY - see the example compose file above), or directly in the interface via Group Settings - the second way is more convenient if different groups need different providers.

Example for Ollama: for base_url you specify something like http://ollama:11434/v1 (the address of your Ollama container/host), and the API key field can be filled with any value - Ollama simply ignores it, but the field is required to fill out in Mealie’s form.

Note

If you use OpenAI, the free tier won’t be enough for these features - you need at least one payment (usually $5 is enough), after which the account moves to Tier 1 with limits sufficient for home use.

All the AI features listed are optional add-ons. Without a single configured provider, Mealie continues to work exactly as it always did, completely free and without AI (regular link scraping, manual recipe entry) - nothing in the base functionality breaks.


How to start using Mealie
#

  1. Prepare a server or container (Docker Compose or LXC in Proxmox).
  2. Install Mealie: pull the Docker image, configure the database and environment variables.
  3. Connect via browser and create a user.
  4. Import a few recipes (links, manually, and, with an OpenAI key configured, also from video or photo).
  5. Create a meal plan for the week and check the shopping list.
  6. Set up backups.
  7. (Optional) Integrate with Home Assistant for meal notifications.

Mealie is a great tool for home cooks and those who value full control over their data.
If you have a Proxmox server or cluster, getting it running is a matter of minutes.

Sample docker compose file used in the video
#

---
services:
    mealie:
        image: ghcr.io/mealie-recipes/mealie:v3.22.0 # do not use :latest - pin an explicit version, check the current one at https://github.com/mealie-recipes/mealie/releases
        container_name: mealie
        #ports:
        #    - "9925:9000" #
        deploy:
            resources:
                limits:
                    memory: 1000M #
        volumes:
            - /home/user/docker/mealie/mealie-data:/app/data/
        environment:
            # Set Backend ENV Variables Here
            - ALLOW_SIGNUP=false
            - PUID=1000
            - PGID=1000
            - TZ=Europe/Moscow
            - MAX_WORKERS=1
            - WEB_CONCURRENCY=1
            - BASE_URL=https://mealie.user.ru
            - DEFAULT_GROUP=Home
            - DEFAULT_HOUSEHOLD=Family
            #AI features (recipe import from video, photo recognition, etc.) - optional
            #  - OPENAI_API_KEY=sk-...
            #Email Configuration
            - SMTP_HOST=smtp.gmail.com
            - SMTP_PORT=465
            - SMTP_FROM_NAME=mail@gmail.com
            - SMTP_AUTH_STRATEGY=SSL # Options: 'TLS', 'SSL', 'NONE'
            - SMTP_FROM_EMAIL=mail@gmail.com
            - SMTP_USER=mail@gmail.com
            - SMTP_PASSWORD=app_password
            #OIDC credentials
            - OIDC_AUTH_ENABLED=true
            - OIDC_SIGNUP_ENABLED=true
            - OIDC_CONFIGURATION_URL=https://authentik.domain.ru/application/o/mealie/.well-known/openid-configuration
            - OIDC_CLIENT_ID=secret
            - OIDC_CLIENT_SECRET=big secret
            - OIDC_REMEMBER_ME=true
            #  - OIDC_AUTO_REDIRECT=false
        #  - OIDC_USER_CLAIM=email
        #  - OIDC_GROUPS_CLAIM=groups
        #  - OIDC_USER_GROUP=my_family
        #  - OIDC_ADMIN_GROUP=mealie_Admins
        #  - OIDC_USER_GROUP=mealie_users
        #  - OIDC_PROVIDER_NAME=Authentik
        #  - LOG_LEVEL=DEBUG
        restart: unless-stopped
        networks:
            proxy:
        security_opt:
            - no-new-privileges:true
        labels:
            - "traefik.enable=true"
            - "traefik.http.routers.mealie.entrypoints=web"
            - "traefik.http.routers.mealie.rule=Host(`mealie.domain.ru`)"
            - "traefik.http.middlewares.mealie-https-redirect.redirectscheme.scheme=https"
            - "traefik.http.routers.mealie.middlewares=mealie-https-redirect"
            - "traefik.http.routers.mealie-secure.entrypoints=websecure"
            - "traefik.http.routers.mealie-secure.rule=Host(`mealie.domain.ru`)"
            - "traefik.http.routers.mealie-secure.tls=true"
            - "traefik.http.routers.mealie-secure.service=mealie"
            - "traefik.http.services.mealie.loadbalancer.server.port=9000"
            - "traefik.docker.network=proxy"

networks:
    proxy:
        external: true
Self-Hosting - This article is part of a series.
Part : This Article

Related

Diun - notifications about Docker image updates

··991 words·5 mins· loading · loading
A detailed guide to installing and configuring Diun for tracking Docker image updates. Covers deployment steps, integration with notification services, and monitoring automation, so you can update your containers on time and improve system security.