Recipes & meal planning

Mealie VPS requirements: RAM, CPU, disk, and why it used to idle at 400 MB

By VPSfit · Sources checked · Mealie website · source code · AGPL-3.0

Mealie is a self-hosted recipe manager and meal planner: you import recipes from a URL, plan the week, and get a shopping list that the whole household can share. It's one container (a Python FastAPI backend that also serves the web app) with SQLite by default. The project publishes no RAM or CPU minimum, but its own compose files set a 1000M memory limit and say why: Python can grab more memory than it needs on a big machine. For years people were surprised to see a recipe app idling at 300–500 MB. Version 3.24.0 (August 2026) loads its heavy optional features only when you use them, and the developer's own test dropped basic use from 330 MiB to 225 MiB. On a VPS that makes Mealie a comfortable fit on a 1 GB plan, and an easy add-on to a box you already run.

Sizing guide

Our recommendations, derived from the sourced figures below. Not measurements.

ScenarioRAMvCPUWhy
One household, SQLite, v3.24 or newer1 GB1The developer measured 225–320 MiB on v3.24. With the official 1000M limit and the OS, 1 GB works for Mealie alone; add swap as a safety net. We haven't measured it on a VPS yet.
Older Mealie, or alongside a few other apps2 GB1Before v3.24, reports put idle use at 300–490 MB and growing to 600 MB over days. 2 GB leaves room for that plus a reverse proxy and one or two light apps. Our estimate.
Many users, PostgreSQL2 GB2PostgreSQL is a second container with its own memory, and the docs suggest it for many concurrent users. We found no published figure for the pair, so this is our estimate.
Adding FlareSolverr for blocked recipe sites+1 GB2FlareSolverr runs a headless browser, which the Mealie docs call far more resource-intensive than a direct fetch. We found no official RAM figure, so treat the extra 1 GB as our estimate.
Local AI through Ollama on the same VPSNot on a small VPSDepends on the modelMealie only calls an OpenAI-compatible API; the language model needs the real resources. Use a hosted API or run Ollama on a machine with the RAM or GPU for your model.

Official requirements

ItemWhat the project saysSource
HardwareNo CPU, RAM or disk minimum is published. The install checklist recommends Docker with the image from the GitHub registry, built for linux/amd64 and linux/arm64; 32-bit ARM is not supported because of a build dependencyMealie docs: Installation checklist
checked Oct 31, 2026
Memory limitBoth official compose files set deploy.resources.limits.memory to 1000M. "Python can pre-allocate larger amounts of memory than is necessary if you have a machine with a lot of RAM. This can cause the container to idle at a high memory usage. Setting a memory limit will improve idle performance"Mealie docs: Installing with SQLite
checked Oct 31, 2026
DatabaseSQLite is the default and "the ideal choice for Mealie when you have 1-20 Users" with limited concurrent writes. PostgreSQL is for many concurrent users and enables some features, such as fuzzy search. The official PostgreSQL compose file adds a postgres:17 container. Don't use SQLite on network-attached storageMealie docs: Installation checklist and PostgreSQL
checked Oct 31, 2026
Web workersUVICORN_WORKERS defaults to 1. The docs warn that changing the web worker settings "may cause unforeseen memory leak issues" and advise leaving the default unless many users cause problemsMealie docs: Backend configuration
checked Oct 31, 2026
Ports and first loginThe app listens on port 9000 inside the container; the official examples publish it as 9925 on the host. The default login is [email protected] with password MyPassword, and the docs say to check /admin/site-settings after first login. ALLOW_SIGNUP defaults to falseMealie docs: Installation checklist
checked Oct 31, 2026
Reverse proxyHOST_IP decides which proxies are trusted for X-Forwarded-For and X-Forwarded-Proto. The default is * (trust every source), which the docs say to use "only when access to the application is limited to trusted proxies". BASE_URL must be set for links in notifications and for OIDCMealie docs: Backend configuration
checked Oct 31, 2026
Recipe scrapingURL imports fetch the page from your server, rotating browser TLS fingerprints to get past bot protection. Optional SCRAPER_PROXY_URL and a self-hosted FlareSolverr sidecar help with sites that still block it; the docs call FlareSolverr "far more resource-intensive than a direct fetch"Mealie docs: Backend configuration, Recipe Scraper
checked Oct 31, 2026
AI featuresOptional. Works with any OpenAI-compatible API, configured in group settings: ingredient parsing, AI fallback for URL imports, and Import with AI from text, photos or video. Ollama works by pointing the base URL at it; that model then runs on whatever machine hosts OllamaMealie docs: AI providers
checked Oct 31, 2026
BackupsFull-site backups are plain .zip files made from the UI or found in the mounted data volume. The docs say you "MUST store these backups somewhere safe, outside of the server"Mealie docs: Installation checklist
checked Oct 31, 2026
Current versionv3.29.0, released 17 Oct 2026. The docs advise pinning a version tag rather than latest and reading the release notes before upgradingGitHub: mealie-recipes/mealie releases
checked Oct 31, 2026

What people report in practice

Individual reports, not controlled tests. Versions, hardware and settings differ, so treat these as data points, not guarantees.

  • The fix for high idle memory: optional modules (the ingredient parser, the OpenAI client, the recipe scrapers and others) now load on first use. Tested by the author: logging in and viewing a recipe went from 330 MiB to 225 MiB, and adding recipe scraping from 380 MiB to 320 MiB. The heaviest modules were ingredient_parser at 33.6 MB and openai at 32.6 MB. People who use every feature still reach the same peak

    GitHub pull request, merged 24 Aug 2026 and released in v3.24.0

    GitHub GitHub mealie-recipes/mealie #7316: lazy module loading and deferred pydantic build · checked Oct 31, 2026

  • The official Docker image used about 400 MB at idle for an app opened about once a week. Other reporters: 37–42% of a machine's RAM at idle on v2.1 and v2.8 while Paperless and Jellyfin sat near 8%; 360 MB right after a restart on a small VPS, about 450 MB after a few weeks; 270 MB right after start with UVICORN_WORKERS=1 and no health check; 320–330 MB idle under a 400M limit

    GitHub issue, May 2025 to Aug 2026, Mealie v2.x to v3.x; closed by the pull request above

    GitHub GitHub mealie-recipes/mealie #5417: High idle RAM usage? · checked Oct 31, 2026

  • In a Kubernetes cluster with a 250m CPU limit and 512Mi memory limit, a Mealie pod sat at 284Mi of memory while pinned at its full CPU limit. Another reporter found that turning off the container health check stopped high idle CPU

    Comments in the same GitHub issue, 2025

    GitHub GitHub mealie-recipes/mealie #5417: High idle RAM usage? · checked Oct 31, 2026

  • After updating to 2.1, memory started around 300 MB and climbed to 600 MB or more over days, pushing into swap until the container was restarted. Replies: "Mines sitting at 492M just idling", and one user running 51 containers said Mealie used the most RAM of all of them

    r/Mealie, Nov 2024 to Apr 2025, Mealie v2.1

    Reddit r/Mealie: Has anyone else noticed Mealie 2.1 using more memory than expected? · checked Oct 31, 2026

  • A user asked whether 417 MB idle was normal on a VPS where nothing else except Stirling-PDF used as much memory

    GitHub Discussions, Apr 2025

    GitHub GitHub mealie-recipes/mealie discussion #5367: High RAM usage (417MB) · checked Oct 31, 2026

  • A Mealie v0.5 container used about 400 MB and grew to almost 600 MB; dropping to one web worker brought it to 300–345 MB, and the maintainer made a single worker the default

    GitHub issue, Aug to Oct 2021. Old, but it's why UVICORN_WORKERS still defaults to 1

    GitHub GitHub mealie-recipes/mealie #654: Ram Usage · checked Oct 31, 2026

Our measurements: coming soon

We haven't measured Mealie yet, so there are no VPSfit lab numbers on this page. When we do, they'll show the app version, the plan it ran on, the date, and the raw data. Here's what we'll record:

  • Idle RAM of Mealie v3.29 on SQLite on a 1 GB plan, over 7 days, with and without the 1000M limit
  • Peak RAM while importing 20 recipes from URLs
  • RAM of Mealie plus PostgreSQL 17 with the official compose file
  • Disk used by 200 imported recipes with images, and the size of a full backup zip

How we measure →

What drives Mealie's RAM use

Python start-up, not your recipes

Most of Mealie's memory is the Python app itself: FastAPI, Pydantic, SQLAlchemy and optional libraries (issue #5417). A few hundred recipes in SQLite don't change that much. Since v3.24.0, the ingredient parser, OpenAI client and scrapers load only when used, which saved about 105 MiB in the developer's test (PR #7316). If you're on an older version, upgrading is the cheapest way to free RAM.

Set the memory limit

The official compose files cap the container at 1000M because Python can pre-allocate more than it needs on a machine with plenty of RAM (docs). On a shared VPS, keep that limit, or go lower if you've watched docker stats for a while; one user ran it under a 400M limit (issue #5417).

One web worker

Every Uvicorn worker is another copy of the app in memory. The default is 1 and the docs warn against changing it (docs); a family's worth of users doesn't need more.

Disk is mostly recipe images

Everything lives in one data volume: the SQLite database, recipe images and backups (compose file). We found no published size figure. The SQLite file itself is small (one reporter's was 3.3 MB, issue #5417), so the smallest plan's disk is plenty; just copy the backup zips off the server.

Gotchas on a VPS

  • Change the default login before it's public. Every install starts with [email protected] / MyPassword (docs). On a VPS, sign in over an SSH tunnel and change it before you point a domain at it. Keep ALLOW_SIGNUP false and invite people instead.
  • Don't publish 9925 on every interface. The official examples use "9925:9000", which on a VPS means the internet can reach the app over plain HTTP, and Docker's published ports bypass UFW (Docker docs). Use 127.0.0.1:9925:9000 and put Caddy or Nginx in front for HTTPS.
  • Narrow HOST_IP behind a proxy. By default Mealie trusts forwarded headers from any source (docs). That's fine only if nothing but your proxy can reach it. Set HOST_IP to the proxy's address, and set BASE_URL to the public HTTPS URL so invitation and password-reset links work.
  • Some recipe sites block datacenter IPs. Imports are fetched from your server, and bot protection on some recipe sites blocks them. Mealie rotates browser fingerprints by default and can use a proxy or FlareSolverr, and if you've set up an AI provider, Import with AI can read a recipe's text or HTML that you paste in (scraper docs; AI docs). A proxy or the AI route costs money; FlareSolverr costs RAM.
  • Pin the version and keep backups off the server. The docs advise a pinned tag like v3.29.0 instead of latest, and storing the backup zips outside the server (docs). SQLite on network storage can corrupt, so keep the data volume on the VPS's own disk and copy backups elsewhere.

Cheapest plans that fit

Mealie, one household, SQLite (v3.24 or newer): 1 GB RAM and 1+ vCPU

Threshold: No official minimum; the developer measured 225–320 MiB on v3.24, and the official compose files cap it at 1000M (source). Only plans with at least 1 vCPU are listed.

Provider & planRAMvCPUDisk Price / monthTermsSource
Contabo Cloud VPS 4 8 GB 4 shared 100 GB SSD €4.40
excl. VAT · ≈ $4.93
24-month term (effective monthly rate) contabo.com
checked Oct 28, 2026
Vultr Cloud Compute Regular 1 GB 1 GB 1 shared, previous-gen Intel 25 GB SSD $5.00
before tax
Monthly price, hourly billing vultr.com
checked Oct 28, 2026
DigitalOcean Basic 1 GiB 1 GB 1 shared 25 GB SSD $6.00
before tax
Monthly cap, per-second billing digitalocean.com
checked Oct 28, 2026
Contabo Cloud VPS 6 12 GB 6 shared 200 GB SSD (or 100 GB NVMe) €6.00
excl. VAT · ≈ $6.73
24-month term (effective monthly rate) contabo.com
checked Oct 28, 2026

Mealie with PostgreSQL or alongside other apps: 2 GB RAM and 1+ vCPU

Threshold: Our estimate, not a measurement: older versions idled at 300–490 MB and grew to 600 MB, and PostgreSQL adds a second container (source). Only plans with at least 1 vCPU are listed.

Provider & planRAMvCPUDisk Price / monthTermsSource
Contabo Cloud VPS 4 8 GB 4 shared 100 GB SSD €4.40
excl. VAT · ≈ $4.93
24-month term (effective monthly rate) contabo.com
checked Oct 28, 2026
Contabo Cloud VPS 6 12 GB 6 shared 200 GB SSD (or 100 GB NVMe) €6.00
excl. VAT · ≈ $6.73
24-month term (effective monthly rate) contabo.com
checked Oct 28, 2026
Vultr Cloud Compute Regular 2 GB 2 GB 1 shared, previous-gen Intel 55 GB SSD $10.00
before tax
Monthly price, hourly billing vultr.com
checked Oct 28, 2026
Hostinger KVM 1 4 GB 1 AMD EPYC 50 GB NVMe $11.99
intro $6.49
before tax
Prepaid intro rate; renews at $11.99/mo hostinger.com
checked Oct 28, 2026

Prices checked Oct 28, 2026 on each provider's official pricing page. EUR prices converted at the ECB rate of Oct 27, 2026 (1 € = $1.115) only for ranking. See all plans on the cheapest 4 GB VPS page.