Self-Hosted SaaS Alternatives: Which Applications Are Worth Running Locally
We earn commissions when you shop through the links on this page, at no additional cost to you. Learn more.
The dream of self-hosting is seductive: take back control, pay nothing monthly, own your data. But not every SaaS alternative is worth the effort. Some self-hosted apps demand constant babysitting, others eat RAM like there's no tomorrow, and a few are genuinely easier to maintain than their cloud counterparts. I've spent the last two years running a homelab with Docker Compose, and I've learned which applications justify the complexity and which ones should stay in the cloud.
The Real Economics of Self-Hosting
Before we talk about specific apps, let's be honest about costs. Running a self-hosted application isn't free—it's just a different payment model. You're trading monthly SaaS fees for hardware, electricity, bandwidth, and time. For me, the math works like this:
- Nextcloud (100 GB storage): Replaces Google Drive ($120/year) and Dropbox ($120/year). My homelab NAS already existed, so I'm essentially paying electricity costs (~$10/year). Win.
- Vaultwarden (password manager): Replaces Bitwarden Premium ($10/year). Running cost: negligible. Win.
- Jellyfin (media server): Replaces Plex, Netflix, Disney+. Server cost: $0 (already running). Content: I buy once, stream forever. Massive win if you have media already purchased.
- Immich (photo backup): Replaces Google Photos ($120/year). Storage cost: already on my NAS. Win.
- Open WebUI + Ollama (AI chat): Replaces ChatGPT Plus ($200/year). But requires a GPU (~$300 upfront). Break-even in ~2 years if you use it daily.
The rule I follow: if the app runs in 2–3 containers and uses less than 2 GB RAM at idle, it's probably worth hosting yourself. If it needs dedicated hardware, constant maintenance, or consumes more than 4 GB RAM, you're likely better off paying.
Nextcloud: The Swiss Army Knife
Nextcloud is the closest thing to a universal SaaS replacement. It does files, calendars, contacts, bookmarks, notes, email integration, and more. I've run it on a Raspberry Pi 4 with 4 GB RAM and a 2 TB external SSD, and it handles my family's needs without breaking a sweat.
Effort level: Medium. Setup is straightforward, but backups are critical because a corrupted Nextcloud database is painful to recover from.
Cost savings: High. If you're paying for Google Drive, Dropbox, and CalDAV hosting separately, Nextcloud consolidates them all.
Caveat: Nextcloud is slow on cheap hardware. Use an SSD, not spinning disks. On a Raspberry Pi, basic file browsing works fine, but uploading a video takes forever. I eventually moved it to a used Intel i5 mini PC with 8 GB RAM and never looked back.
Vaultwarden: The No-Brainer
Vaultwarden is a lightweight Bitwarden-compatible password manager. It runs in a single Docker container, uses ~100 MB RAM, and has zero maintenance overhead. This is the app that convinced me self-hosting was worth it.
Effort level: Trivial. Seriously, this is a 5-minute Docker setup.
Cost savings: Bitwarden Premium is $10/year, so this only saves you money if you're already paying for something else. But if you're self-hosting anyway, bundling Vaultwarden into your Docker Compose stack is a no-cost addition.
Why it works: Password managers don't change. There are no API rate limits, no complexity, no surprise updates that break your setup. You set it and forget it.
Here's a minimal Vaultwarden Docker Compose config:
version: '3.8'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- vw_data:/data
- ./ssl:/ssl
environment:
DOMAIN: https://vault.yourdomain.com
SIGNUPS_ALLOWED: "false"
SHOW_PASSWORD_HINT: "false"
LOG_LEVEL: info
volumes:
vw_data:
Pair this with Caddy for auto-HTTPS (using DNS challenge so you don't expose ports), and you have a production-ready password manager in under 30 minutes.
Jellyfin: Worth It If You Have Media
Jellyfin is a self-hosted media server—think Plex, but with no subscriptions, no Plex+ upsell, and complete control over your content. I run it alongside my Nextcloud instance on the same Intel i5 mini PC.
Effort level: Medium. Jellyfin setup is simple, but organizing your media library (movies, shows, music) correctly is tedious and time-consuming. I spent three weeks renaming files and organizing metadata.
Cost savings: Massive, but only if you already own media. Jellyfin is free software. There are no per-user costs, no bans for "bandwidth abuse," and no ads. Once your library is organized, you have a permanent, unrestricted media server.
Caveat: Transcoding (converting video on the fly for slower devices) requires CPU resources. A Raspberry Pi can stream from its own library without transcoding, but if you're serving video to remote devices over slow internet, you need better hardware. I use an Intel i5, which handles 2–3 simultaneous transcodes comfortably.
Immich: The Modern Photo Backup
Immich is newer than Nextcloud and specifically designed for photo backup, organization, and sharing. It's blazingly fast, has excellent mobile apps, and does smart features like automatic library organization, face recognition, and timeline browsing.
Effort level: Low. Docker Compose deployment, point it at your photos folder, done.
Cost savings: If you're paying for Google Photos, Amazon Photos, or Backblaze backup, Immich replaces them. Family plan? The savings multiply.
Performance: Immich uses PostgreSQL and runs best on a machine with 4+ GB RAM, but it's still lightweight. I run it on the same mini PC as Jellyfin, and the two coexist peacefully.
Here's my Immich Docker Compose (production-ready):
version: '3.8'
services:
immich-server:
image: ghcr.io/immich-app/immich-server:latest
container_name: immich_server
restart: always
depends_on:
- immich-db
- redis
volumes:
- immich_upload:/usr/src/app/upload
- /mnt/photos:/photos:ro
ports:
- "3001:3001"
environment:
DB_HOSTNAME: immich-db
DB_USERNAME: immich
DB_PASSWORD: immich_secure_password_here
DB_NAME: immich
REDIS_HOSTNAME: redis
PUBLIC_LOGIN_PAGE_MESSAGE: "Welcome to my Immich"
immich-microservices:
image: ghcr.io/immich-app/immich-server:latest
container_name: immich_microservices
restart: always
command: /bin/sh -c "node start.js microservices"
depends_on:
- immich-db
- redis
volumes:
- immich_upload:/usr/src/app/upload
- /mnt/photos:/photos:ro
environment:
DB_HOSTNAME: immich-db
DB_USERNAME: immich
DB_PASSWORD: immich_secure_password_here
DB_NAME: immich
REDIS_HOSTNAME: redis
immich-db:
image: postgres:15-alpine
container_name: immich_db
restart: always
volumes:
- immich_db:/var/lib/postgresql/data
environment:
POSTGRES_USER: immich
POSTGRES_PASSWORD: immich_secure_password_here
POSTGRES_DB: immich
redis:
image: redis:7-alpine
container_name: immich_redis
restart: always
volumes:
- immich_redis:/data
volumes:
immich_db:
immich_upload:
immich_redis:
Open WebUI + Ollama: The Gamble
Running a local LLM sounds amazing until you realize the hardware costs. A decent GPU (RTX 4060 Ti or better) costs $300–$500. Running Ollama with Open WebUI uses 3–4 GB VRAM just at idle. The break-even point is 1–2 years of ChatGPT Plus usage.
Effort level: High. CUDA driver setup, VRAM management, model selection—it's technical.
Cost savings: Only if you use AI tools daily. Casual users should stick with ChatGPT.
Why do it anyway: Privacy. Your prompts never leave your machine. No API rate limits. Models run offline. If you're building AI-augmented tools for your homelab (like search, documentation, summarization), local LLMs are unbeatable.
Apps NOT Worth Self-Hosting
Email. Don't self-host email unless you're running your own mail server professionally. Spam filtering, DKIM/SPF/DMARC setup, and deliverability are nightmares. Use ProtonMail or Fastmail instead.
DNS. Pi-hole is great for ad-blocking, but full DNS hosting (authoritative nameserver) with automatic failover? Use Cloudflare or Route 53. Too much complexity for the benefit.
Databases. If you're running PostgreSQL or MySQL just as a hobby, sure. But maintaining backups, replication, and disaster recovery is a lot of work. Managed options (AWS RDS, PlanetScale) are cheap enough to not be worth the risk.
Office suite (OnlyOffice, Collabora). They work, but they're slow, RAM-hungry, and collaborating feels sluggish compared to Google Docs or Office 365. Only use if your organization explicitly rejects cloud software.
The Hardware Stack That Actually Works
After experimenting with Raspberry Pis, old laptops, and cloud VPS, I settled on this for my homelab:
- Local: Intel i5 mini PC (8 GB RAM, 256 GB SSD) running Nextcloud, Jellyfin, Immich, Vaultwarden, Authelia, and Caddy. ~$400 used, runs everything I need.
- Remote VPS: $40/year RackNerd or Hetzner instance running a reverse proxy, Cloudflare Tunnel entry point, and log aggregation. Lets me access my homelab securely without port forwarding.
- Network: Caddy reverse proxy on the mini PC, Tailscale for mobile access, Cloudflare Tunnel for untrusted networks.
This setup costs about $50/year in VPS fees plus electricity. Compare that to the equivalent SaaS stack: Google Workspace ($144/year), Bitwarden ($10/year), Plex ($120/year), Google Photos ($120/year), and you're already at $400+/year in subscription costs. Self-hosting pays for itself in the first year.
Should You Self-Host?
Self-hosting is worth it if:
- You already have spare hardware or are willing to spend ~$300–$400 on used mini PCs or Nuc-style machines.
- You use the apps regularly. Set-and-forget homelabs are less painful than the ones you fiddle with constantly.
- You care about privacy, data ownership, or avoiding vendor lock-in.
- You enjoy tinkering. If debugging Docker networking issues sounds fun, go all in.
Self-hosting isn't worth it if:
- You want zero operational overhead. Cloud services exist for a reason.
- Your hardware is expensive (like a brand-new MacBook). Running 24/7 services on it is wasteful.
- You need enterprise SLAs and uptime guarantees. Your homelab will go down eventually.