Recipes & meal planning
Mealie VPS requirements: RAM, CPU, disk, and why it used to idle at 400 MB
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.
| Scenario | RAM | vCPU | Why |
|---|---|---|---|
| One household, SQLite, v3.24 or newer | 1 GB | 1 | The 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 apps | 2 GB | 1 | Before 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, PostgreSQL | 2 GB | 2 | PostgreSQL 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 GB | 2 | FlareSolverr 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 VPS | Not on a small VPS | Depends on the model | Mealie 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
| Item | What the project says | Source |
|---|---|---|
| Hardware | No 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 dependency | Mealie docs: Installation checklist checked Oct 31, 2026 |
| Memory limit | Both 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 |
| Database | SQLite 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 storage | Mealie docs: Installation checklist and PostgreSQL checked Oct 31, 2026 |
| Web workers | UVICORN_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 problems | Mealie docs: Backend configuration checked Oct 31, 2026 |
| Ports and first login | The 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 false | Mealie docs: Installation checklist checked Oct 31, 2026 |
| Reverse proxy | HOST_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 OIDC | Mealie docs: Backend configuration checked Oct 31, 2026 |
| Recipe scraping | URL 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 features | Optional. 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 Ollama | Mealie docs: AI providers checked Oct 31, 2026 |
| Backups | Full-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 version | v3.29.0, released 17 Oct 2026. The docs advise pinning a version tag rather than latest and reading the release notes before upgrading | GitHub: 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
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. KeepALLOW_SIGNUPfalse 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). Use127.0.0.1:9925:9000and 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_IPto the proxy's address, and setBASE_URLto 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.0instead oflatest, 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 & plan | RAM | vCPU | Disk | Price / month | Terms | Source |
|---|---|---|---|---|---|---|
| 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 & plan | RAM | vCPU | Disk | Price / month | Terms | Source |
|---|---|---|---|---|---|---|
| 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.