The best homelab apps for 2026 are Immich, Nextcloud AIO, Vaultwarden, Paperless-ngx, Jellyfin, AdGuard Home, Tailscale, Home Assistant OS, AudioBookshelf, n8n, BookStack and Uptime Kuma. They replace Google Photos, Drive, 1Password, Plex, Zapier, Notion and UptimeRobot. Ten run in Docker, Home Assistant OS runs as a VM, and one 32 GB mini PC holds all twelve.

Contents
By LK Wood IV · Published 2026-05-01 · Corrected 2026-10-07 · Updated 2026-10-10 · 15 min read · St. Louis County, MO
The twelve homelab apps I would run in 2026 are Immich for photos, Nextcloud AIO for files, Vaultwarden for passwords, Paperless-ngx for paper, Jellyfin for media, AdGuard Home for DNS, Tailscale for remote access, Home Assistant OS for the smart home, AudioBookshelf for audiobooks, n8n for automation, BookStack for a wiki and Uptime Kuma for monitoring. Each one replaces a subscription. Ten run as Docker containers, Home Assistant OS wants a VM, Tailscale installs on the host, and all twelve fit on one 32 GB mini PC.
TL;DR · The 12-app stack at a glance
- Photos: Immich (replaces Google Photos)
- Files / sync: Nextcloud AIO (replaces Dropbox + Google Drive + Office)
- Passwords: Vaultwarden (replaces 1Password / LastPass)
- Documents: Paperless-ngx (replaces filing cabinet + scanner cloud)
- Media: Jellyfin (replaces Netflix-style streaming)
- DNS / ad blocking: AdGuard Home
- Remote access: Tailscale (free Personal plan: 6 users, unlimited user devices)
- Smart home: Home Assistant OS
- Audiobooks: AudioBookshelf
- Workflow automation: n8n (replaces Zapier)
- Notes / wiki: BookStack (replaces Notion / Confluence)
- Monitoring: Uptime Kuma
Full stack runs on a 32 GB mini PC + 1 TB NVMe. RAM is the bottleneck — Immich + Nextcloud + HA in a VM eats 12–14 GB before any user load.
Correction, September 8: the Immich v3.1.0 setup now uses /data and matching auxiliary files. Tailscale can use encrypted relays. Existing installations should check their mounts before importing more photos.
The scannable table — 12 apps, what they replace, what they need
| # | App | Replaces | Difficulty (1–5) | Plan for | Killer feature | Verdict |
|---|---|---|---|---|---|---|
| 1 | Immich | Google Photos / iCloud Photos | 3 | 6 GB RAM, 2 cores, Docker | ML face + object search that genuinely beats Google’s UI | Ship it. v3.2.0 to v3.2.2 listed no breaking changes. |
| 2 | Nextcloud AIO | Google Drive / Dropbox / Workspace | 3 | 4 GB RAM, 2 cores, 40 GB disk | One container manages the whole stack including backups | Use AIO. Skip the manual compose. |
| 3 | Vaultwarden | Bitwarden cloud / 1Password | 1 | 256 MB RAM | Bitwarden-compatible, runs on a potato, end-to-end encrypted | Easiest win on the list. |
| 4 | Paperless-ngx | Evernote / Dropbox Scan / paper | 3 | 2 GB RAM, OCR is CPU-hungry | Tika + OCR + tagging makes paper actually searchable | Replace your filing cabinet. |
| 5 | Jellyfin | Plex / Netflix / Disney+ | 2 | 4 GB RAM, Intel N100 or 11th-gen+ iGPU for transcode | No subscriptions, no phoning home, hardware transcoding works | Still the Plex-killer. AMD GPUs remain weak for transcode. |
| 6 | AdGuard Home | Pi-hole / NextDNS | 1 | 256 MB RAM | DNS-over-HTTPS upstream + per-client rules in a clean UI | Picked over Pi-hole for the better UI. |
| 7 | Tailscale (or Headscale) | ZeroTier, paid remote-access VPN | 1 (Tailscale) / 4 (Headscale) | Negligible | WireGuard mesh that punches NAT and “just works” | Tailscale free tier is enough for most. Headscale if you want to host the control plane. |
| 8 | Home Assistant OS | Apple Home / Google Home / SmartThings | 4 | 2 GB RAM, 2 vCPUs, 32 GB disk | Local control, no cloud dependency, every protocol | Run it as a VM, not a container. |
| 9 | AudioBookshelf | Audible / Libby | 2 | 1 GB RAM | Tracks progress per-user across devices, podcast support included | Drop-in for an Audible library you already own. |
| 10 | n8n | Zapier / Make / IFTTT | 3 | 1 GB RAM | 500+ integrations, queue mode for real workloads | Beats Zapier for anything serious. Fair-code, not open source; you maintain it. |
| 11 | BookStack | Notion / Confluence (read-mostly) | 2 | 1 GB RAM | Books → Chapters → Pages structure that doesn’t fight you | Picked over Outline for simpler hosting. |
| 12 | Uptime Kuma | UptimeRobot / Better Stack | 1 | 256 MB RAM | Self-hostable status page for friends and family | The first thing every homelab should add after DNS. |
What got cut and why
- Plex — not a SaaS replacement; it is the SaaS. Jellyfin replaces Plex.
- Pi-hole — voted out for AdGuard Home. The DNS-over-HTTPS upstream and per-client rules in AdGuard’s UI are meaningfully better, and the Docker deploy is identical in difficulty. Pi-hole still works fine if you already run it. One deliberate disagreement inside this site: the self-hosting starter order still opens on Pi-hole, because for someone’s first container the smaller footprint and the mountain of beginner documentation matter more than DoH. Both guides are pointing at the same job. This is a preference, not a correctness call.
- Seafile — solid block-sync, but Nextcloud AIO has closed the gap and the ecosystem (calendar, contacts, office) is broader.
- Plausible CE / Umami / Mealie / FreshRSS / Linkding — all good, all on the bench. They didn’t beat the 12 above on either daily use or obvious SaaS replacement. If a self-hosted bookmark manager is specifically what you’re after, Linkding is fine but the two strongest options get their own head-to-head in Karakeep vs Linkwarden.
- Mail-in-a-Box / Mailcow — explicitly cut. Self-hosted outbound email in 2026 still gets your IP scored as suspicious by Microsoft and Google more often than not, and inbound MX is fine until your dynamic IP changes or your ISP blocks port 25. Use a paid relay (Fastmail, Migadu, Proton) and move on.
- Matrix / Mattermost / Rocket.Chat — a self-hosted chat server is its own category, not a general SaaS swap, so it sits outside this list. There is also no drop-in clone of Discord’s text-plus-voice bundle in 2026, and the voice/video story is the part most roundups skip. If replacing a Discord community or a team chat is what you actually want, the self-hosted Discord alternatives comparison breaks down which tool fits and the voice/video reality. Worth knowing before you pick: Mattermost gates production SSO behind paid plans, and Rocket.Chat, which moved its advanced identity sync to paid tiers in 2021, now says LDAP and SAML will need a Premium module from version 9.0.0; the newest release on September 23, 2026 was 8.8.1, so 9.0.0 had not shipped. The self-hosted SSO tax tracker documents both with verified receipts and free-SSO alternatives.
A difficulty score of 1 is “single container, defaults work, ten-minute deploy.” A 5 is “you’ll read documentation for a weekend and read it again at the next major upgrade.” Most of the 12 land at 1–3. The apps that survive in homelabs are the ones where the 80% case is boring.
Where to start
Do not stand up Immich and Home Assistant on day one. Deploy the ten-minute wins first, then climb in this order.
The top 5 — full setups
1. Immich — the Google Photos replacement that finally works
The mobile app uploads from iOS and Android in the background, the ML stack identifies faces and objects locally, and the timeline UI beats Google Photos for most operations. The catch is RAM. Immich’s requirements page sets a 6 GB minimum and recommends 8 GB, and the first library import pins a couple of cores for hours. Moving an existing library over is its own job; the Google Photos to Immich migration guide covers Takeout and immich-go, and Immich vs PhotoPrism vs Ente covers the case for end-to-end encryption instead.
v3.2.2 was the newest release on September 23, 2026. This setup uses the v3.2.2 Compose file. Keep its files together; mixing releases can break the setup. For an upgrade, follow the Immich installation guide and the target release’s instructions.
Save the YAML below as docker-compose.yml in a dedicated directory. Download v3.2.2 example.env into that directory and rename it to .env. Also save v3.2.2 hwaccel.transcoding.yml under that exact filename. The extends block reads it even when you select cpu.
Edit .env before starting:
- Set
UPLOAD_LOCATIONto your media directory (./libraryin the example). It mounts at/datainside the server. - Set
DB_DATA_LOCATIONto local database storage (./postgresin the example). The database does not support network shares. - Replace
DB_PASSWORD=postgreswith a random password using onlyA-Za-z0-9, as the release’s example instructs. - Keep
DB_USERNAME=postgresandDB_DATABASE_NAME=immich. SetIMMICH_VERSION=v3.2.2to match the explicit image pins below. - Optionally set
TZto your timezone.
The example selects cpu for software transcoding. On an Intel iGPU host with /dev/dri available, change it to quicksync; both services exist in the linked file. That selects device access for the container; configure hardware transcoding in Immich using its transcoding guide.
Critical detail: Immich is not a backup. The database can corrupt. Use Immich’s official backup guide and keep originals on a separate disk from the Immich Postgres.
# docker-compose.yml - Immich v3.2.2
name: immich
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:v3.2.2
extends:
file: hwaccel.transcoding.yml
service: cpu # use quicksync for a compatible Intel iGPU host
volumes:
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}:/data
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports:
- '2283:2283'
depends_on:
- redis
- database
restart: always
healthcheck:
disable: false
immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
# Example tag: v3.2.2-cuda
image: ghcr.io/immich-app/immich-machine-learning:v3.2.2
# extends: # uncomment this section for hardware acceleration - see https://docs.immich.app/features/ml-hardware-acceleration
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes:
- model-cache:/cache
env_file:
- .env
restart: always
healthcheck:
disable: false
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:9@sha256:70739f85ad2ee01a726a965584a0f94895f01b0c60b3cc8b0aeef11eaa6888cf
healthcheck:
test: redis-cli ping | grep -q PONG || exit 1
restart: always
database:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
# Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
# DB_STORAGE_TYPE: 'HDD'
volumes:
# Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
shm_size: 128mb
restart: always
healthcheck:
disable: false
volumes:
model-cache:
From this directory, run docker compose config to check interpolation, then docker compose up -d. Before importing your library, upload a disposable photo, recreate the containers, and confirm it remains available. Keep backups of both the media directory and database; container recreation is only a persistence check.
2. Nextcloud AIO — file sync, calendar, contacts, managed by one container
The official Nextcloud All-in-One project ships everything — Apache, PHP, the database, Redis, the office stack, Talk, the backup container — managed by a single mastercontainer that you talk to over a web UI on port 8080. It is the right answer for new self-hosters and for experienced ones who got tired of debugging PHP-FPM at 1 a.m.
# One-liner from the official AIO README
sudo docker run \
--init \
--sig-proxy=false \
--name nextcloud-aio-mastercontainer \
--restart always \
--publish 80:80 \
--publish 8080:8080 \
--publish 8443:8443 \
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
ghcr.io/nextcloud-releases/all-in-one:latest
The latest tag here is the AIO mastercontainer, which the project explicitly maintains as the supported entry point — the actual Nextcloud server image underneath gets pinned by AIO to a tested release. That’s the one place I make an exception to the “no :latest” rule. If you want full version control, watch the Nextcloud AIO releases page and use a digest pin instead.
A new AIO v14.1.1 instance (September 11, 2026) installs the Calendar and Contacts apps and switches on Talk, Imaginary, Whiteboard plus an office suite, which is now Euro-Office rather than Collabora. Collabora is still a card you can pick instead. Once any optional container is on, the AIO interface asks for at least 2 GB of RAM, a dual-core CPU and 40 GB of storage.
For the complete setup — NPM reverse proxy config, Office activation, CalDAV/CardDAV client setup, and AIO backup — see the Nextcloud AIO Docker setup guide.
3. Vaultwarden — Bitwarden, on a potato
Vaultwarden is a Rust reimplementation of the Bitwarden server API by dani-garcia. The newest release on September 23, 2026 was 1.37.3 (September 13), per the Vaultwarden releases; it adds rate limiting on the prelogin and auth-request endpoints and revokes 2FA remember tokens when credentials or 2FA change.
Do not deploy 1.36.x. 1.37.0 shipped fixes for ten GitHub security advisories (eight listed issues). They include two SSRF issues on the icon endpoint, cross-organization cipher access, and an organization-policy bypass on directory import. The maintainers state it “is required for support with clients with version 2026.7.0+.” Take the newest 1.37.x patch rather than 1.37.0. 1.37.1 repaired organization invites that 1.37.0 broke. The maintainers say 1.37.2 “is required for support with clients with version 2026.8.0+.” It is fully compatible with the official Bitwarden apps, browser extensions and desktop clients, which is the whole point — your phone doesn’t know it’s not talking to Bitwarden’s cloud.
# docker-compose.yml — Vaultwarden, version-pinned
services:
vaultwarden:
image: vaultwarden/server:1.37.3-alpine
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vault.example.lan"
SIGNUPS_ALLOWED: "false" # flip to true for first user, then back
# The admin page stays off until ADMIN_TOKEN is set. To turn it on, run
# docker run --rm -it vaultwarden/server:1.37.3-alpine /vaultwarden hash
# then uncomment the next line, paste the PHC string it prints, and
# write every $ as $$ so Compose does not treat it as a variable.
# ADMIN_TOKEN: "$$argon2id$$v=19$$m=65540,t=3,p=4$$..."
volumes:
- ./vw-data:/data
ports:
- 8222:80
WebSocket notifications run on the main port since 1.29.0, so the old WEBSOCKET_ENABLED variable is ignored and not in the file above. Two things people miss. Vaultwarden needs HTTPS, because browsers only expose the web vault’s crypto APIs over HTTPS; put it behind Caddy or Traefik with Let’s Encrypt, or use Tailscale Funnel for a zero-config TLS path. And back up ./vw-data somewhere off the host — a vault you can’t restore is a vault you don’t have. The Vaultwarden on Proxmox setup guide covers Caddy reverse proxy, the Tailscale-only setup path, and an automated SQLite backup script with online backup API support.
4. Jellyfin — Plex without the company
Jellyfin is the mature fork of Emby. It does what Plex does — library scanning, transcoding, apps for phones and TVs — without phoning home, without watching your viewing history, and without a “Pass” subscription gating hardware acceleration. The feature-by-feature case is in Jellyfin vs Plex.
Jellyfin 12.1 shipped September 15, 2026, a week after 12.0; the last 10.11 release was 10.11.11 in June. LinuxServer publishes no bare 12.1 tag. The file pins the full build tag.
# docker-compose.yml — Jellyfin with Intel Quick Sync transcoding
services:
jellyfin:
image: lscr.io/linuxserver/jellyfin:12.1ubu2604-ls50
container_name: jellyfin
environment:
- PUID=1000
- PGID=1000
- TZ=America/Chicago
- JELLYFIN_PublishedServerUrl=http://192.168.1.50:8096
devices:
- /dev/dri:/dev/dri # Intel iGPU passthrough for QSV
volumes:
- ./config:/config
- /srv/media:/data/media:ro
ports:
- 8096:8096
restart: unless-stopped
Intel Quick Sync is what makes Jellyfin viable on a budget mini PC. Jellyfin’s hardware selection guide names the Core i5-11400, Pentium Gold G7400 and N100 as integrated-graphics picks, and warns that Intel 10th-gen and older iGPUs are losing QSV support on Linux.
AMD GPUs remain the weakest transcode option in 2026. Jellyfin’s own hardware selection guide calls AMD “the least preferred choice” for its sub-par H.264 encoders before RDNA 4 (RX 9000). It says the poor encoder quality and driver support apply “even on Linux”. If your homelab is AMD-only, plan for direct-play clients (NVIDIA Shield, Apple TV, a recent smart TV). The Jellyfin team also keeps a clear hardware acceleration matrix; read it before you buy a box.
5. Home Assistant OS — local-first smart home
Home Assistant replaces Apple Home, Google Home, and SmartThings at once, and the cloud-dependency stories from those vendors keep getting worse. It is not easy; deep automation takes real time.
The recommended path in 2026 is still Home Assistant OS running as a VM rather than the Docker container. The Container install “does not have access to apps”, which is what Home Assistant has called add-ons since the 2026.2 release, and those apps (Mosquitto, Zigbee2MQTT, ESPHome, the official Z-Wave stack) are most of what makes HA worth running. Supervised installs lost support with 2025.12.
For a Proxmox host, the community-maintained Home Assistant OS VM script (the successor to tteck’s helper scripts) creates the VM with 2 vCPUs, 4 GB of RAM and a 32 GB disk. The VM then boots an installer image that you finish from its console. Home Assistant’s own minimum is 2 GB of RAM and 2 vCPUs. Pass through a USB Zigbee/Z-Wave coordinator if you have one. See the Proxmox vs TrueNAS vs Unraid comparison for which hypervisor fits your situation.
The Home Assistant 2026.3 release notes confirmed the move to zstd-compressed container images. The notes put the floor at Docker 23.0.0 / containerd 1.5.0. A Docker host that has not been updated past those versions will fail to pull the image, while any modern Docker is fine. Read release notes before every monthly upgrade. HA breaks integrations a few times a year. Upgrades are not background tasks.
The other 7 — short notes
AdGuard Home (replaces Pi-hole, NextDNS, your router’s bad ad blocker)
Pin adguard/adguardhome:v0.107.79, the newest release on September 23, 2026 (August 18); the Docker tag keeps the v, and there is no floating v0.107 tag. Point your router’s DHCP DNS at the AdGuard container IP and every device on your network — phones, smart TVs, the IoT garbage — gets DNS-level filtering with zero per-device setup. The DoH/DoT upstream config is in the UI; switch it to Quad9 or Cloudflare 1.1.1.1 and you’ve also leaked less DNS to your ISP than you did last week.
The AdGuard Home + Local DNS on Proxmox tutorial covers the LXC setup from scratch: port 53 in an unprivileged container, the OISD plus Steven Black blocklists, local A records for pve.lan / nas.lan, and an optional Unbound recursive resolver that cuts upstream providers out entirely.
Tailscale (replaces ZeroTier and a paid remote-access VPN)
Yes, Tailscale is technically a SaaS for the coordinator. The free Personal plan on the pricing page (September 23, 2026) covers 6 users, unlimited user devices and 50 tagged resources, and exit nodes count as tagged resources. That is enough for almost every homelab. Direct connections are preferred. When a direct path fails, DERP servers or peer relays can carry the traffic; all three paths remain end-to-end encrypted with WireGuard. See Tailscale connection types.
If you are choosing between Tailscale and ZeroTier, see ZeroTier vs Tailscale. If you genuinely refuse the coordinator, Headscale is the open-source alternative — but plan for a difficulty score of 4 rather than 1. And if the real question is how to reach these services from outside your LAN at all, Tailscale vs Cloudflare Tunnel covers the private-network-versus-public-tunnel split and the current free-tier limits.
AudioBookshelf (replaces Audible)
If you already own audiobooks (legitimately, ideally), AudioBookshelf gives you per-user progress sync, mobile apps, and podcast support in a single container with no companion services. The official apps are free and both still labelled beta: Android is on Google Play, but iOS is a TestFlight beta that was full on September 23, 2026, so an iPhone household may be waiting for a seat.
Podcast RSS auto-download is built in. Pin ghcr.io/advplyr/audiobookshelf:2.36.1 (September 16, 2026, per the releases) rather than :latest, per the no-:latest rule above. Full setup with library directory structure, mobile app config, metadata matching, and Tailscale remote access is in the AudioBookshelf Docker guide.
n8n (replaces Zapier, Make, IFTTT)
Over 500 integrations by n8n’s own count, a queue mode for production workloads that the free Community edition includes, and the ability to drop into JavaScript when the visual builder won’t do what you need. It is not open source. n8n ships under its Sustainable Use License, which allows use “only for your own internal business purposes or for non-commercial or personal use”. SSO, environments or log streaming need one of the paid plans.
Pin a release tag of n8nio/n8n; the stable channel was 2.40.5 on September 23, 2026. The 2.0 release (December 8, 2025) removed the Start node, dropped MySQL and MariaDB as databases and renamed the release channels from latest/next to stable/beta, which is the kind of change a floating tag delivers without warning.
BookStack (replaces Notion as a wiki / docs site)
For pure note-taking, Obsidian beats every self-hosted option. For a team or family wiki — recipes, runbooks, “how the network is set up” — BookStack is the right answer. Outline is also good but the hosting story is harder. The stack is two containers, BookStack plus MySQL 8.0+ or MariaDB 10.6+.
Pin lscr.io/linuxserver/bookstack:26.05.5 rather than :latest, per the no-:latest rule above. 26.05.5 (September 14, 2026) and 26.05.4 before it were both security releases. Do not stop at an older 26.05 tag. Configure LDAP if you’re already running Authentik or Keycloak for unified auth.
Uptime Kuma (replaces UptimeRobot, Better Stack)
Once you have 12 services running, you need to know which one died at 2 a.m. before your family tells you the internet is “broken.” Use louislam/uptime-kuma:2, which pointed at 2.5.5 (September 16, 2026) on September 23. Not :latest: the project’s Docker Hub page marks that tag deprecated, and it still points at the 1.x image. The Uptime Kuma Docker guide covers where to run it so it survives the outage it is meant to report, and the self-hosting essentials guide puts it in the first-week stack.
Paperless-ngx (replaces Evernote scan, Dropbox Scan, paper)
Drop a PDF in the consume folder, OCR runs, the document is tagged, you can full-text-search five years of mail in seconds. Pin ghcr.io/paperless-ngx/paperless-ngx:3.2.1, the newest release on September 23, 2026 (September 20). The project publishes no bare :3 tag; use a full release tag or a floating minor such as :3.2.
Run PostgreSQL next to it. The docs recommend it for multi-user or higher-throughput setups over the default SQLite, and v3 requires PAPERLESS_DBENGINE to be set for PostgreSQL or MariaDB, because v2 inferred the engine from PAPERLESS_DBHOST and v3 no longer does. Word or Excel documents and email files need Tika and Gotenberg containers alongside; the configuration docs require both servers for them. The full compose stack with correspondent auto-tagging, subdirectory tag mapping, and NPM HTTPS is in the Paperless-ngx setup guide.
Best self-hosted services beyond the twelve
The list above covers the apps with the clearest SaaS swap. Two more jobs come up often: automation and blogging. Both have a short, sourced answer. Before you move any service home, read the port-publishing note at the end of this section.
Best self-hosted automation: n8n or Home Assistant
Two entries on the list automate things, and they cover different ground. n8n moves data between web services and APIs, the way Zapier does. Home Assistant automates devices in your home. Home Assistant’s automation guide splits every automation into a trigger, an optional condition and an action, and builds them in the visual editor under Settings, then Automations & scenes. Choose n8n when the trigger is a web event or a schedule across services. Choose Home Assistant when the trigger is a sensor, a person arriving or a device changing state.
If you pick n8n, its self-hosting overview says that without a license key it runs as the free Community edition, and it names Docker Compose as the best fit for production deployments with databases and additional services. n8n’s Docker Compose guide serves the editor on port 5678. It also covers three limits that matter:
- The default SQLite database sits inside the container unless you mount a volume for it.
- For a production instance, n8n says to use PostgreSQL instead.
- The guide asks for at least 4 GB of RAM and 2 vCPUs, because its stack includes a Docker-in-Docker sandbox for n8n Assistant. The 1 GB figure in the table above does not cover that stack.
Self-hosted blog platforms: Ghost and WordPress
A blog is a different kind of replacement from the twelve apps. It swaps a hosted publishing service for a web server you maintain, so the requirements decide the choice.
Ghost is built around a narrow stack. Ghost’s hosting docs list the officially supported setup as Ubuntu 22.04, 24.04 or 26.04 LTS with Node.js 22 LTS and MySQL 8.0 or 8.4, served by NGINX under systemd. The server needs at least 1 GB of memory and a non-root user for running the ghost commands. Other operating systems, databases or web servers can work, but Ghost says they are not officially supported. Self-hosters also pay separately for email newsletter delivery, plus analytics and a CDN. The Docker Compose install is labelled a preview, and it is the route Ghost points to for self-hosting its social web and web analytics features.
WordPress accepts more. WordPress.org recommends a host with PHP 8.3 or greater, MariaDB 10.11 or greater or MySQL 8.0 or greater, and HTTPS. Apache or Nginx is recommended, but any server that supports PHP and MySQL will do. Older PHP 7.4 and MySQL 5.5.5 still run it, though both have reached end of life.
Pick Ghost if you want a publishing tool on its tested stack. Pick WordPress if you need the wider hosting choice. As with the apps above, plan backups and put a reverse proxy in front of either one.
Check what Docker publishes before you move a service home
The compose files on this page publish ports such as 2283 (Immich), 8222 (Vaultwarden) and 8096 (Jellyfin) without a host address. Docker’s port-publishing page calls publishing insecure by default, because the port becomes available to the outside world as well as the Docker host. Adding 127.0.0.1 to the publish flag, as in -p 127.0.0.1:8080:80, limits the port to the host itself. Docker’s firewall page adds that published container ports are diverted before ufw sees them, so a ufw rule does not protect them. If a service should only be reachable through a reverse proxy or Tailscale, bind it to localhost.
What hardware runs all 12
The table’s RAM figures add up to about 22 GB with all twelve running at once. Budget 24 GB, which means a 32 GB box. CPU is less of a problem than people think. Immich’s machine learning is the spike, and the rest idle hard.
Best Mini PCs for a Homelab in 2026 picks the Minisforum MS-01 for a host you plan to grow and a used OptiPlex 7060 Micro or ThinkCentre M720q to start cheap, with 32 GB as the practical minimum. The used 8th-gen boxes run the stack, but if Jellyfin will transcode, buy an N100 or an 11th-gen-or-newer chip, for the QSV reason above. Boot from NVMe and keep media on a separate disk. The Proxmox vs TrueNAS vs Unraid comparison covers the OS choice, and the Proxmox mini PC setup walkthrough takes a new box from USB stick to first VM.
An old gaming PC in a closet skips the purchase; the repurpose-as-server guide covers it, and the PC Builder checks socket/RAM/PSU/GPU-clearance compatibility if you build a tower instead. If the stack outgrows a single 2.5GbE link, the 10GbE homelab networking guide covers the cheap switch options.
Does it save money?
Four of the subscriptions this stack replaces, at the vendors’ monthly-billed list prices on September 23, 2026, come to $54.96 a month. Google’s 2 TB plan, now sold as Google AI Plus, is $9.99. 1Password Families is $7.99, Plex Pass $6.99 and Zapier Professional starts at $29.99. Annual billing lowers 1Password to $5.99 and Zapier to $19.99 a month.
The Self-Hosting Break-Even Calculator takes your own subscriptions, hardware price and electricity rate and returns the month the box pays for itself.
Sources
Each version and tag below was checked against the project’s releases on September 23, 2026, each requirement against its docs and each price against the vendor’s page.
- Releases: Immich, Nextcloud AIO, Vaultwarden, Paperless-ngx, Jellyfin, AdGuard Home, AudioBookshelf, n8n, BookStack, Uptime Kuma, Rocket.Chat
- Requirements and setup: Immich requirements, Nextcloud All-in-One, Vaultwarden wiki, Jellyfin hardware selection, Home Assistant installation, Paperless-ngx configuration, BookStack installation, n8n Community edition features
- Plans and prices: Tailscale, Google One plans, 1Password, Plex, Zapier
Email corrections to contact@techfuelhq.com.
Frequently asked questions
What are the best self hosted apps in 2026?
Can a single mini PC run all twelve?
Is Jellyfin really better than Plex in 2026?
Should I self-host email?
How do I back up these self-hosted services?
Is Tailscale really self-hosted?
Sources and corrections
- Last updated
- Methodology
- See our methodology for research and review standards. It draws on 52 cited sources, listed below, each checked against the original page on the date shown beside it.
- Sources
- Immich docker-compose template accessed 2026-05-02
- Immich releases accessed 2026-09-23
- Immich backup and restore accessed 2026-05-02
- Nextcloud All-in-One accessed 2026-09-23
- Nextcloud AIO releases accessed 2026-09-23
- Vaultwarden releases accessed 2026-09-23
- Tailscale Funnel accessed 2026-05-02
- Jellyfin hardware acceleration accessed 2026-05-02
- LinuxServer Jellyfin tags accessed 2026-05-02
- Home Assistant installation accessed 2026-09-23
- Home Assistant 2026.3 release notes accessed 2026-09-23
- Community-maintained Proxmox helper scripts accessed 2026-05-02
- AdGuard Home image accessed 2026-05-02
- AdGuard Home releases accessed 2026-09-23
- Headscale accessed 2026-09-23
- n8n Docker image accessed 2026-05-02
- Paperless-ngx setup docs accessed 2026-05-02
- Nextcloud system requirements accessed 2026-05-02
- Immich requirements accessed 2026-09-23
- Nextcloud AIO v14.1.1 ConfigurationManager (default containers and office suite) accessed 2026-09-23
- Vaultwarden wiki - Enabling admin page accessed 2026-09-23
- Vaultwarden wiki - Enabling WebSocket notifications accessed 2026-09-23
- Vaultwarden wiki - Enabling HTTPS accessed 2026-09-23
- Jellyfin releases accessed 2026-09-23
- Jellyfin hardware selection accessed 2026-09-23
- Home Assistant 2026.2 release notes (add-ons renamed apps) accessed 2026-09-23
- Home Assistant Container installation accessed 2026-09-23
- Home Assistant alternative installation (VM minimums) accessed 2026-09-23
- community-scripts Home Assistant OS VM accessed 2026-09-23
- Tailscale pricing accessed 2026-09-23
- Paperless-ngx releases accessed 2026-09-23
- Paperless-ngx v3 migration accessed 2026-09-23
- AudioBookshelf releases accessed 2026-09-23
- AudioBookshelf app README (iOS TestFlight beta) accessed 2026-09-23
- n8n LICENSE.md (Sustainable Use License) accessed 2026-09-23
- n8n Community edition features accessed 2026-09-23
- n8n 2.0 breaking changes accessed 2026-09-23
- n8n, host n8n (editions and install options) accessed 2026-10-10
- n8n, install using Docker Compose accessed 2026-10-10
- Home Assistant, understanding automations accessed 2026-10-10
- Ghost, hosting accessed 2026-10-10
- WordPress requirements accessed 2026-10-10
- Docker, packet filtering and firewalls accessed 2026-10-10
- Docker, publishing and exposing ports accessed 2026-10-10
- BookStack releases accessed 2026-09-23
- BookStack installation accessed 2026-09-23
- Uptime Kuma releases accessed 2026-09-23
- Rocket.Chat releases accessed 2026-09-23
- Google One plans accessed 2026-09-23
- 1Password personal pricing accessed 2026-09-23
- Plex plans accessed 2026-09-23
- Zapier pricing accessed 2026-09-23
- Update log
13 dated updates are retained in the full log.
Read the full update log (13 entries)
- 2026-10-10 — Added a section on self-hosted automation (n8n against Home Assistant), a section on self-hosted blog platforms (Ghost and WordPress requirements from their own docs), and a short check on Docker port publishing before you move a SaaS service home. Retitled the page so the title tag and heading name self-hosted services as well as apps. All sources were read on 2026-10-10. No version pin, price or table figure elsewhere on the page changed.
- 2026-09-23 — I edited this page for its top clicked July 2026 query, ‘homelab apps 2026’. I added an answer capsule, and the first paragraph now names the twelve apps. I re-checked versions against each project’s releases on 2026-09-23: Immich v3.1.0 to v3.2.2 (the v3.2.2 compose changed the valkey digest and the redis healthcheck), Vaultwarden 1.37.2 to 1.37.3 (WEBSOCKET_ENABLED removed, ignored since 1.29.0; ADMIN_TOKEN documented as an Argon2 PHC string from
vaultwarden hash, left commented so the admin page stays off until it is set), Jellyfin 10.11.11 to 12.1 (linuxserver 12.1ubu2604-ls50; no bare 12.1 tag), Paperless-ngx 3.0.5 to 3.2.1, AudioBookshelf 2.36.0 to 2.36.1, BookStack 26.05.3 to 26.05.5, Uptime Kuma 2.5.3 to 2.5.5, and AdGuard Home v0.107.x (not a real tag) to v0.107.79. I corrected these points: AIO’s default office suite is Euro-Office, not Collabora; the AudioBookshelf iOS app is a TestFlight beta; n8n is fair-code under its Sustainable Use License and counts 500+ integrations; Home Assistant add-ons have been apps since 2026.2, and the HAOS VM script lives at community-scripts.org; the mini PC guide’s picks were misquoted. I replaced the unsourced $30-50/mo and $170 figures with four vendor list prices dated 2026-09-23. I removed a duplicate TL;DR section, references to five guides that do not exist, unsourced idle-RAM and user-count figures, and process disclaimers. The 2026-09-08 Immich and Tailscale relay corrections are unchanged. - 2026-09-14 — Rocket.Chat’s plan matrix now says LDAP and SAML require a plan with the matching Premium module from version 9.0.0, a release that had not shipped on this date (latest release 8.8.1). The team-chat note named only the 2021 identity-sync change, so it now names the announced 9.0.0 change too, matching the re-verified entry on the self-hosted SSO tax tracker. The inline Article JSON-LD dateModified had drifted to 2026-09-08 against a 2026-09-12 lastmod and matches the front matter again.
- 2026-09-08 — Corrected the Immich v3.1.0 storage target and matched its setup files and Compose values. Corrected Tailscale relay routing in prose and both FAQ representations. No deployment test or general version refresh was performed.
- 2026-08-23 — A site audit on 2026-08-23 found a cross-page inconsistency. This page votes Pi-hole out for AdGuard Home, while /articles/self-hosting-essentials/ heads its first section “Pi-hole - Deploy This First, Period”, with no cross-reference either way. Both pages now say the disagreement exists, say why each pick wins its own question, and link to each other. I did not reverse either recommendation.
- 2026-08-23 — A site audit on 2026-08-23 found that the hand-maintained inline Article JSON-LD carried dateModified 2026-08-19T03:50 while the front-matter lastmod read 2026-08-22T16:19. The page markup and sitemap now carry the same stamp.
- 2026-08-22 — The Uptime Kuma line still told readers to pin louislam/uptime-kuma:1.23.x while this site’s Uptime Kuma guide and Docker starter stack both pin :2, and 2.5.3 is the current release per the GitHub releases API (published 2026-08-22). I corrected it to :2.
- 2026-08-22 — I moved the Paperless-ngx pin to the current major: :2 -> :3 (v3.0.0 released 2026-07-22), with the v3 requirement to set PAPERLESS_DBENGINE explicitly (paperless-ngx docs/migration-v3.md). The linked setup guide carries the full compose.
- 2026-08-24 — Correction to the 2026-08-22 entry above: that pin was wrong. paperless-ngx publishes no bare major tag; GHCR manifest queries return 404 for both :3 and :2, and 200 for :3.0, :3.0.5 and :latest. The compose block here and the two in the linked setup guide would have failed to pull with ‘manifest unknown’. All three now pin :3.0.5 (GitHub releases/latest = v3.0.5, published 2026-08-01T21:59:04Z). I re-checked the v3.0.0 date and the PAPERLESS_DBENGINE requirement above, and both stand.
- 2026-08-22 — I re-fetched every external citation on 2026-08-22 and checked the claims against them. (1) Immich currency: the page said the current stable is v3.0.3; the GitHub releases API shows v3.1.0 published 2026-07-29 as the newest non-prerelease, so the currency line and both compose pins moved to v3.1.0 (ghcr manifests for immich-server and immich-machine-learning v3.1.0 returned 200). (2) Vaultwarden: the 1.37.0 release notes carry no count; they list eight issues under ten distinct GHSA ids, so ’nine security advisories’ became ’ten GitHub security advisories (eight listed issues)’; 1.37.2 shipped 2026-08-22 and its notes say it is required for 2026.8.0+ clients, so the currency line and the compose pin moved to 1.37.2 (Docker Hub tag 1.37.2-alpine pushed 2026-08-22T12:21Z). (3) The Home Assistant 2026.3 notes say the zstd image change needs Docker 23.0.0 / containerd 1.5.0 and do not mention Synology; the Synology clause stated an inference the source does not make and now states the source’s own version floor. (4) The Jellyfin hardware-acceleration matrix does not call AMD weaker; Jellyfin’s hardware-selection guide does (’the least preferred choice’, ’even on Linux’), so the AMD sentence now cites that page and quotes it. (5) Tailscale’s live pricing page shows the Personal plan at up to 6 users and unlimited user devices, the same numbers this page states, so the clause claiming the limits had moved past them was removed.
- 2026-08-14 — (1) The Vaultwarden section asserted ’the current stable line is 1.36.x as of early 2026’ and its compose block pinned vaultwarden/server:1.36.0-alpine. I checked the GitHub releases API (retrieved 2026-08-14): 1.37.0 shipped 2026-07-24 with fixes for nine security advisories (two SSRF on the icon endpoint, cross-organization cipher access, organization-policy bypass on directory import, Send access-count bypass, unauthenticated WebSocket flooding, cross-organization secret sharing, organization import authorization, Manager-role data enumeration) and its notes state it ‘is required for support with clients with version 2026.7.0+’; 1.37.1 followed 2026-07-29 fixing organization invites that 1.37.0 broke. The copy-paste compose file pinned to 1.36.0 also contradicted my own Vaultwarden vs Bitwarden page, which already carried 1.37.1. I moved the currency claim and the compose pin to 1.37.1. (2) This page declares a “no ‘:latest’” rule and names Nextcloud AIO as its single exception, then told readers to ‘Pin ghcr.io/advplyr/audiobookshelf:latest’ and ‘Pin lscr.io/linuxserver/bookstack:latest’. Those are two further ‘:latest’ uses beyond the stated exception, described with the word ‘Pin’, which is the opposite of what ‘:latest’ does. Both now name a real release tag (audiobookshelf 2.36.0, 2026-07-27; BookStack 26.05.3, 2026-07-29, both per the GitHub releases API retrieved 2026-08-14).
- 2026-05-06 — Removed two unfinished photo callouts from the published page while keeping the app list, setup examples and hardware-sizing guidance in place.
- 2026-05-06 — Content update: Sources lifted into evidence ledger; inline duplicate Sources / Methodology blocks removed.
- Corrections
- Spotted an error or a stale number? Email contact@techfuelhq.com. Confirmed corrections are recorded here with the date and change.