Disclosure: I run HomelabDeck, a directory of self-hosted apps. Every app below was installed in my own homelab (Proxmox, LXC containers), and the RAM figures come from that setup.
Subscriptions add up, and your photos, passwords and documents sit on someone else's servers. Self-hosting gets that control back, but most "best self-hosted apps" lists copy each other and never show the apps running. So I installed them, took screenshots and wrote down what each one needs.
The short version
| Instead of | Self-host | RAM (estimate) | License |
|---|---|---|---|
| Google Photos | Immich | ~4 GB | AGPL-3.0 |
| Plex | Jellyfin | ~2 GB | GPL-2.0 |
| Bitwarden Cloud | Vaultwarden | ~128 MB | AGPL-3.0 |
| Todoist / Trello | Vikunja | ~512 MB | AGPL-3.0 |
| Feedly | FreshRSS | ~256 MB | AGPL-3.0 |
| GitHub (private repos, CI) | Gitea | ~512 MB | MIT |
| UptimeRobot | Uptime Kuma | ~256 MB | MIT |
| Zapier / IFTTT | n8n | ~1 GB | Sustainable Use |
| Notion / Confluence (wiki) | Wiki.js | ~512 MB | AGPL-3.0 |
| Google Keep | Memos | ~256 MB | MIT |
| Audible (your own files) | Audiobookshelf | ~512 MB | GPL-3.0 |
RAM numbers are estimates from my tests; real usage grows with library size and users.
What surprised me
- Vaultwarden is tiny. It is written in Rust and sat well under 100 MB at idle for a family-sized vault. If you only self-host one thing, this is the cheapest to run.
- Immich is the heavy one. The machine-learning container (face recognition, CLIP search) is the biggest RAM and CPU consumer and scales with your library. Plan 4 GB as a comfortable baseline for a small library.
- Jellyfin's real cost is transcoding, not the app. Direct play is light; 4K transcoding needs a capable CPU or hardware acceleration (Quick Sync, NVENC).
- Several apps need PostgreSQL (Immich, Vikunja, Wiki.js, Paperless-ngx), while Vaultwarden, FreshRSS, Gitea, Uptime Kuma and n8n get by with SQLite. Check this before you deploy.
Honest caveats
- n8n uses the Sustainable Use License: the source is available, but it is not classic open source.
- Self-hosting means you own the backups and the updates. A password manager without a tested backup is a risk, not a feature.
- A self-hosted photo library is not a backup of itself.
How I would start
- Pick one app that replaces something you pay for today.
- Run it in a small LXC container or on a Docker host.
- Copy the
docker-compose.ymlfrom its page and adjust the paths. - Add a reverse proxy (I use Nginx Proxy Manager) and set up backups before you trust it with real data.
Each app has a page with dashboard screenshots, the compatibility matrix and a ready-to-use compose file: homelabdeck.dev/en/apps. I also post short weekly notes on what I add: homelabdeck.dev/en/updates.
What are you self-hosting that I should test next? Tell me in the comments.
Top comments (1)
Which self-hosted app should I try next? I have a GPU box (RTX 3090), so ML-heavy apps are allowed. Also, what's the one SaaS you're paying for and can't be replaced by a self-hosted app?