Recipes are scattered everywhere. Bookmarked tabs, screenshot folders, handwritten cards, that one blog post buried under 2,000 words of life story. You just want the ingredients and steps.
Mealie is a self-hosted recipe manager that pulls recipes from any URL, strips out the fluff, and stores them in a clean, searchable format. It also handles meal planning and shopping lists.
What Mealie Does
- Import recipes from any URL — paste a link, Mealie scrapes the recipe automatically
- Meal planning — drag and drop recipes into a weekly calendar
- Shopping lists — auto-generated from your meal plan
- Household sharing — multiple users, shared cookbooks
- Nutritional info — automatic calculation from ingredients
- Mobile-friendly — works great on a phone or tablet in the kitchen
- API-first — everything is accessible via REST API
Docker Setup
mkdir -p ~/mealie && cd ~/mealie
# docker-compose.yml
version: "3.8"
services:
mealie:
image: ghcr.io/mealie-recipes/mealie:latest
container_name: mealie
restart: unless-stopped
ports:
- "9925:9000"
volumes:
- mealie_data:/app/data
environment:
ALLOW_SIGNUP: "true"
PUID: 1000
PGID: 1000
TZ: America/New_York
MAX_WORKERS: 1
WEB_CONCURRENCY: 1
BASE_URL: http://192.168.1.100:9925
volumes:
mealie_data:
docker compose up -d
Visit http://your-server:9925. The default credentials are:
- Email: [email protected]
- Password: MyPassword
Change these immediately after first login.
Importing Your First Recipe
From a URL
This is Mealie’s killer feature. Find a recipe online, copy the URL, and:
- Click the + button
- Select Import from URL
- Paste the URL
- Click Import
Mealie uses the Recipe Schema standard (used by most food blogs) to extract:
- Title
- Ingredients list
- Step-by-step instructions
- Prep and cook time
- Servings
- Nutritional info (when available)
- Image
No more scrolling past someone’s childhood memories to find the ingredient list.
Manual Entry
For grandma’s recipes that aren’t online:
- Click + → Create Recipe
- Fill in title, ingredients, and instructions
- Upload a photo if you have one
Bulk Import
Moving from another service? Mealie supports import from:
- Nextcloud Cookbook
- Chowdown
- Paprika
- Plain JSON/ZIP exports
Organizing Recipes
Categories and Tags
Set up categories that match how you cook:
Categories (broad):
- Breakfast
- Lunch
- Dinner
- Dessert
- Snacks
- Meal Prep
Tags (specific):
- Quick (under 30 min)
- Vegetarian
- Gluten-Free
- Kid-Friendly
- Freezer-Friendly
- One-Pot
Cookbooks
Group recipes into themed collections:
- “Weeknight Dinners” — meals ready in 30 minutes
- “Holiday Baking” — seasonal favorites
- “Meal Prep Sunday” — batch cooking recipes
Meal Planning
The meal planner is a weekly calendar where you drag recipes into days:
- Go to Meal Planner
- Click on a day
- Search and add recipes for breakfast, lunch, and dinner
- Repeat for the week
Once your week is planned, you can generate a shopping list with one click.
Shopping Lists
Mealie creates shopping lists from your meal plan:
- Plan your meals for the week
- Click Generate Shopping List
- Mealie combines all ingredients, merging duplicates
- Check off items as you shop
You can also create standalone shopping lists for non-recipe items.
The shopping list works on your phone — pull it up at the grocery store and check items off as you go.
Multi-User Setup
Mealie supports households. Set it up for your family:
- Go to Settings → Users
- Create accounts for family members
- Everyone shares the same recipe library
- Each person can have their own meal plan
Set ALLOW_SIGNUP: "false" in your compose file after creating all accounts to prevent unwanted signups.
Recipe Scaling
Need to double a recipe for a dinner party? Click the servings number and adjust. All ingredient quantities update automatically. This alone saves constant mental math.
API and Integrations
Mealie has a full REST API. Some useful automations:
Random Recipe Suggestion
curl -s http://192.168.1.100:9925/api/recipes/summary \
-H "Authorization: Bearer YOUR_TOKEN" | \
jq '.[rand | floor].name'
Add to Home Assistant
Display today’s dinner on your Home Assistant dashboard:
# configuration.yaml
rest:
- resource: http://192.168.1.100:9925/api/meal-plans/today
headers:
Authorization: "Bearer YOUR_TOKEN"
sensor:
- name: "Tonight's Dinner"
value_template: "{{ value_json[0].recipe.name }}"
Backup
Back up the Mealie data volume:
# Stop, backup, restart
docker compose stop
tar czf mealie-backup-$(date +%Y%m%d).tar.gz -C /var/lib/docker/volumes/ mealie_mealie_data
docker compose start
Or use Mealie’s built-in export:
- Go to Settings → Backups
- Click Create Backup
- Download the ZIP file
Schedule automatic backups:
0 3 * * 0 cd ~/mealie && docker compose exec -T mealie python /app/mealie/scripts/backup.py
Performance Notes
Mealie is lightweight:
- RAM: ~200MB
- CPU: Minimal (spikes during URL imports for scraping)
- Storage: ~1MB per recipe (including images)
A Raspberry Pi 4 runs it comfortably with hundreds of recipes.
Putting It Behind a Reverse Proxy
For HTTPS access:
server {
server_name recipes.yourdomain.com;
location / {
proxy_pass http://localhost:9925;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Update BASE_URL in your compose file to match: https://recipes.yourdomain.com
Why Self-Host Your Recipes?
- No ads — recipe blogs are notoriously ad-heavy
- No tracking — your meal habits are private
- Offline access — works on your LAN even without internet
- Permanent — recipes don’t disappear when a blog shuts down
- Shareable — your whole household uses the same library
Wrapping Up
Mealie turns recipe chaos into an organized, searchable, meal-planning system. Import from URLs, plan your week, generate shopping lists, and access everything from your phone in the kitchen.
Setup takes five minutes. Importing your favorite recipes takes an evening. Having every recipe you’ve ever loved in one searchable place? That lasts forever.