The official documentation for most self-hosted apps gives you a minimum spec — the smallest hardware on which the software will technically boot — and stops. It does not tell you what you actually need to run the thing in real life, with real users, without it occasionally falling over.
This page is the version I wish someone had given me. Real-world resource usage from running each of these on small VPSes, paired with the spec at which the experience stops being annoying.
If you just want the answer:
| App | Minimum (works) | Comfortable (recommended) | Notes |
|---|---|---|---|
| Vaultwarden | 256 MB RAM, 1 vCPU | 512 MB RAM, 1 vCPU | Sips resources |
| Pi-hole | 512 MB RAM, 1 vCPU | 1 GB RAM, 1 vCPU | Database grows over time |
| Nextcloud | 1 GB RAM, 1 vCPU | 4 GB RAM, 2 vCPU | RAM matters for concurrent users |
| Jellyfin (no transcoding) | 1 GB RAM, 1 vCPU | 2 GB RAM, 2 vCPU | Direct-play only |
| Jellyfin (transcoding) | 4 GB RAM, 4 vCPU | 8 GB RAM, 4+ vCPU + GPU | Transcoding is the killer |
| All four together (single user) | 4 GB RAM, 2 vCPU | 8 GB RAM, 4 vCPU | Hetzner CX22 borderline |
The longer story is below, by app.
Vaultwarden — Bitwarden-compatible password manager
What it is
A Rust rewrite of the Bitwarden server, API-compatible with all official Bitwarden clients (web, mobile, browser extension, CLI). Lighter than Bitwarden’s official self-hosted server, which requires multiple Docker containers and ~2GB RAM.
Resource usage in practice
| Idle | Active (login + sync, 1 user) | Worst case (5+ users syncing) |
|---|---|---|
| ~30-50 MB RAM | 60-100 MB RAM | 150-250 MB RAM |
| <1% CPU | <5% CPU | 10-30% CPU briefly |
Minimum that works
- 256 MB RAM, 1 vCPU
- 1 GB disk (database stays small unless you store large file attachments)
- Most cheap VPS plans handle this without breaking a sweat
Recommended
- 512 MB RAM, 1 vCPU
- 5-10 GB disk (room for backups + reasonable file attachments)
- Hetzner CX11 (€3.79/mo) or DigitalOcean Basic Droplet ($4/mo) is comfortable
Disk usage
The SQLite or PostgreSQL database stays under 50 MB for individual use. File attachments (if you store any) can grow indefinitely. Backups roughly equal database size + attachments.
Key insight
Vaultwarden is the closest thing to “free server software” — it costs essentially no resources. If you have any small VPS already running, just add it. There’s almost never a reason to provision a separate server for it.
Pi-hole — Network-wide ad blocker
What it is
A DNS server that blocks queries to ad/tracker domains. Devices on your network point at Pi-hole as their DNS server; Pi-hole returns no-reply for blocked domains. Works at network level, so it covers smart TVs, IoT devices, and apps that don’t have their own ad blocker.
Resource usage
| Idle | Light traffic (1-3 devices) | Heavy traffic (10+ devices, busy household) |
|---|---|---|
| ~80-120 MB RAM | 100-180 MB RAM | 200-400 MB RAM |
| <2% CPU | 2-5% CPU | 5-15% CPU |
Minimum that works
- 512 MB RAM, 1 vCPU
- 4 GB disk (mostly for the query log database, which grows ~1-2 MB per day per device)
Recommended
- 1 GB RAM, 1 vCPU
- 10 GB disk
- Or, alternatively, run it on a Raspberry Pi 4 / Pi 5 at home (the original use case; no monthly fee)
Important deployment note
Pi-hole on a remote VPS only blocks ads for your network if you configure your router to use it as DNS, OR you tunnel your devices to the VPS via VPN/Tailscale. Just running it on a public VPS without doing one of those things accomplishes nothing useful for your home network. The cleanest pattern: Pi-hole on Tailscale, your devices configured to use the Tailscale IP as DNS.
Key insight
Pi-hole’s database grows over time. If you’re on a small disk (5-10 GB), enable log rotation aggressively or set query log retention to 30 days max. We’ve seen Pi-hole instances eat 20+ GB of database after years of full-fidelity logging.
Nextcloud — Self-hosted file sync, calendar, contacts
What it is
The “self-hosted Google Drive / Dropbox + Office + Calendar + Contacts” suite. Mature, comprehensive, sometimes infuriating. The closest thing the open-source world has to a complete personal cloud.
Resource usage — this is where it gets tricky
Nextcloud’s resource usage scales aggressively with concurrent users and which features you enable.
| Setup | RAM | CPU | Disk |
|---|---|---|---|
| 1 user, files only | 800 MB - 1.2 GB | <10% | Whatever your file storage is |
| 1 user, files + calendar + contacts + Talk | 1.5 - 2 GB | 5-15% | Same + ~500 MB |
| 3-5 users, full suite | 2.5 - 4 GB | 10-30% | Same + 1-2 GB |
| 10+ users, full suite | 6 GB+ | 20-50% sustained | Significant |
The official “minimum 512 MB” figure is technically true but completely unrepresentative. Nextcloud at 512 MB has so many edge cases (file uploads timing out, search reindexing crashing, photo previews failing) that you should not put yourself through it.
Minimum that works (for one user, files only)
- 1 GB RAM, 1 vCPU
- Plus your file storage (separate volume, sized for what you’ll actually store)
- Default DigitalOcean / Linode / Vultr 1GB instances at $6/month are right at the edge
Recommended
- 4 GB RAM, 2 vCPU for a comfortable single-user setup with calendar/contacts
- 8 GB RAM, 4 vCPU for 3-5 user families
- Hetzner CX22 (4 GB / 2 vCPU / €5.83) is actually the sweet spot for personal use
- Storage: separate object storage or block storage volume, sized for actual file storage needs (we recommend Hetzner Storage Box for personal cloud — €3.20/month for 1TB)
Database choice matters
SQLite is not recommended in production. Use MariaDB or PostgreSQL. The performance difference under any concurrent load is significant.
Key insight
Nextcloud is the most resource-hungry of the apps in this list, by a large margin. If you only want secure file sync without the calendar/talk/everything-else, Sync.com or Proton Drive will save you a lot of operational pain at $3-10/month, and you avoid being your own ops team.
Jellyfin — Self-hosted media server
What it is
The open-source fork of Emby; the “self-hosted Netflix” for your own media library. Streams to any device, transcodes on the fly when needed, organizes library via metadata.
Resource usage — the transcoding cliff
The big variable is whether your client can play your files directly or needs them transcoded.
| Scenario | RAM | CPU |
|---|---|---|
| Direct play (client supports the file format natively) | 500 MB - 1 GB | <5% |
| Audio transcode only (e.g., AC3 to AAC) | 800 MB - 1.5 GB | 5-15% per stream |
| Video transcode (1080p H.264 to H.265, no GPU) | 2-4 GB | 80-100% of multiple cores per stream |
| Video transcode (4K to 1080p, no GPU) | 4-6 GB | Saturates 8+ cores per stream |
| Video transcode with hardware acceleration (Intel QuickSync, NVENC, VideoToolbox) | 1-2 GB | 10-30% per stream |
Minimum that works
- Direct-play only setup: 1 GB RAM, 1 vCPU. Library scan during indexing will use more.
- For most realistic use: 2 GB RAM, 2 vCPU.
Recommended (for any transcoding)
- 8 GB RAM, 4+ vCPU, ideally with hardware-accelerated transcoding
- This is not a great VPS workload — most cheap VPS providers don’t expose hardware video acceleration
- Better answer: run Jellyfin on a small home server / NAS with a CPU that has Intel QuickSync (any modern Intel chip, including N100 mini-PCs) or a small Nvidia GPU for NVENC
Key insight
Jellyfin on a remote VPS for media streaming is usually a mistake. The bandwidth cost (you’re streaming media files outbound, often 5-20 Mbps per stream) and the lack of hardware transcoding will both bite. Run Jellyfin at home; if you want to access it remotely, use Tailscale to tunnel into your home network. The home electricity for an N100 mini-PC running Jellyfin is cheaper and the experience is dramatically better.
Running multiple of these on one VPS
The most realistic scenario for a self-hoster: one small VPS running Vaultwarden + Pi-hole + Nextcloud (single user, files only). What does that need?
| Setup | What’s running | RAM needed | Recommended VPS |
|---|---|---|---|
| Tier 1 — minimal | Vaultwarden + Pi-hole | 1 GB | Hetzner CX11 (€3.79) or DO $6 droplet |
| Tier 2 — comfortable | + Nextcloud (1 user, files) | 4 GB | Hetzner CX22 (€5.83) |
| Tier 3 — generous | + small extras (Heimdall, Watchtower, monitoring) | 8 GB | Hetzner CX32 (€10.30) or DO $24 droplet |
| Tier 4 — household | + multiple Nextcloud users + Jellyfin (direct-play) | 16 GB + GPU | Hetzner Auction dedicated server (~€30) or home server |
Real recommendation for a privacy-focused individual self-hoster: Tier 2 on Hetzner CX22. €5.83/month gets you the full personal stack comfortably, and you’re not paying for capacity you’ll never use.
What we deliberately didn’t include
- Mastodon / Pixelfed — federated social, very different resource profile (database-heavy, scales with follow graph). Separate post.
- Matrix / Synapse — also database-heavy, separate ops considerations.
- Plex — closed-source alternative to Jellyfin; resource profile is similar but the licensing/ownership model is different.
- GitLab — much heavier (8GB minimum), separate target audience.
If you’d like a similar specs reference for any of those, email [email protected].
How we measured
For Vaultwarden, Pi-hole, and Nextcloud (single-user files), the numbers above come from running each on Hetzner CX11 and CX22 instances over multi-week periods, observed via docker stats and Prometheus / node_exporter. Jellyfin numbers come from documented community benchmarks and our own observation on hardware-accelerated and software-only configurations. We are publishing the raw collection data alongside the dedicated hosting reviews — those will appear as we complete the 30-day cycle for each provider.
The numbers will not exactly match yours. They reflect:
- Single user (mostly)
- Linux x86_64 host
- Default app configurations
- Off-peak hours
Your real-world numbers will vary by 20-50% depending on user count, app configuration choices, and traffic patterns. Use these as a planning baseline, not a hard line.
—
VPS provider choice in 2026 · 13 things I wish someone had told me before self-hosting · Encrypted DNS guide