A Raspberry Pi 4 with an NVMe SSD is enough to run a full Jellyfin media server that streams 1080p direct-play to 2-3 concurrent clients, transcodes limited 720p content on the fly, and idles at under 5W. In 2026 this is the sweet spot for a "just works" home-media homelab that fits behind a router — significantly more capable than an all-USB Pi 4 build, meaningfully cheaper than a Pi 5 with equivalent storage, and dramatically more energy-efficient than repurposing an old desktop PC.
This guide walks through building a Jellyfin homelab on the Raspberry Pi 4 8GB with NVMe storage in 2026. It covers hardware selection, initial setup, Jellyfin installation, transcoding realities, network share configuration for a large media library, and the tradeoffs versus a Pi 5 or a small x86 mini-PC. This synthesizes community measurements from r/jellyfin, r/selfhosted and r/homelab, plus Jellyfin's own documentation.
Key takeaways
- Pi 4 8GB + NVMe is the recommended build. NVMe is the single biggest performance lever versus USB SSD storage.
- Direct-play works for 3-4 clients at 1080p. Everything runs off NVMe I/O.
- Transcoding is limited — expect one 720p transcode at a time; 1080p transcoding is uncomfortable.
- ~$180 total build cost including Samsung 970 EVO Plus or similar NVMe.
- Idle power draw ~4W, active ~7W. Runs on a solar-friendly LFP battery bank in a pinch.
Why NVMe on a Raspberry Pi 4?
The Pi 4 has USB 3.0 but no native PCIe. To use NVMe you go through a USB-to-NVMe bridge — a Startech or JMS583-based adapter that presents a USB Mass Storage device. Real-world I/O performance from this setup is around 300-400 MB/s read and 250-350 MB/s write, versus 40-60 MB/s from a microSD card. That's 5-8× the storage throughput, and it turns the Pi 4 from "slow for a homelab" into "genuinely usable."
The alternative — booting from microSD — is fine for early testing but wears out under Jellyfin's constant metadata writes within 6-18 months. NVMe removes that failure mode.
Parts list
| Part | Choice | Approx. price |
|---|---|---|
| Board | Raspberry Pi 4 8GB | $75 |
| NVMe SSD (boot + cache) | Samsung 970 EVO Plus 500GB | $60 |
| Bulk storage SSD (optional) | Crucial BX500 1TB SATA SSD | $60 |
| USB-to-NVMe adapter | JMS583 or Startech-based | $18 |
| USB-to-SATA adapter for bulk drive | Sabrent or Kingston-branded | $12 |
| Power supply | Official Pi 4 USB-C 5.1V 3A | $8 |
| MicroSD (initial install) | 32GB Sandisk | $10 |
| Case | 3D print or Argon Neo | $5-25 |
| Optional bulk storage | SanDisk SSD Plus 480GB | $50 |
| Total (base) | ~$180 |
For most home libraries, the boot NVMe is enough. If your library exceeds ~400GB, add a second SATA SSD via USB adapter for bulk storage.
Step 1: OS setup on NVMe
Flash Raspberry Pi OS Lite (64-bit) onto the microSD using the Raspberry Pi Imager. Boot the Pi, connect via SSH, then use rpi-clone or manual dd + partition resize to move the OS to the NVMe drive.
The specific commands:
sudo apt update && sudo apt install rpi-clone -y- Connect the USB-NVMe adapter with the Samsung drive
lsblk— confirm the NVMe appears (typically assda)sudo rpi-clone sda— clones the running microSD to NVMe- Update
/boot/firmware/cmdline.txtto boot from NVMe - Update
/etc/fstabon the NVMe to match - Shutdown, remove microSD, boot from NVMe
Confirm the boot with df -h — root should show the NVMe device.
Step 2: Install Jellyfin
Jellyfin is packaged for Raspberry Pi OS via the official repository:
Or use the Docker path — docker run with the Jellyfin container is easier to update and isolates dependencies. On a Pi 4 8GB, both approaches work; Docker adds ~200MB of resident memory versus the native package.
After install, browse to http://<pi-ip>:8096 and complete the setup wizard. The initial setup involves creating an admin user, pointing Jellyfin at your media directories, and choosing your library naming scheme.
Step 3: Storage layout for a media library
Recommended directory structure on the NVMe:
If you're using a second SSD for bulk storage, mount it at /mnt/media and keep the NVMe for the OS and Jellyfin cache. If the bulk drive is a network share (NFS or SMB from a NAS), mount it read-only via /etc/fstab.
For the metadata cache — which does the heavy read/write work — leave Jellyfin's default location on the NVMe. The metadata database and thumbnails will consume 5-15GB depending on library size and benefit hugely from fast local storage.
Step 4: Direct-play performance measurements
Community measurements on Pi 4 8GB with NVMe storage, running Jellyfin 10.9+, streaming to 2-3 concurrent clients:
| Content type | Concurrent streams | Result |
|---|---|---|
| 1080p H.264 (direct play) | 1 | Flawless |
| 1080p H.264 (direct play) | 2 | Flawless |
| 1080p H.264 (direct play) | 3 | Occasional buffering, network-dependent |
| 1080p H.264 (direct play) | 4+ | Buffering, sustained load |
| 4K H.265 (direct play compatible client) | 1 | Flawless on Ethernet |
| 4K H.265 (direct play compatible client) | 2 | Buffering on Wi-Fi clients |
| 720p transcode | 1 | ~70-80% CPU, workable |
| 1080p transcode | 1 | ~95%+ CPU, drops frames |
| 4K→1080p transcode | 1 | Not workable |
Practical implication: buy a client device (Nvidia Shield, Apple TV, Fire TV Stick 4K Max, Chromecast with Google TV) that direct-plays your content. Transcoding on the Pi 4 is a fallback, not a design point.
Step 5: Network configuration
For a home library, network configuration matters as much as CPU:
- Ethernet is essential for the Pi. The onboard gigabit port is the bottleneck-free option; Wi-Fi degrades under sustained load.
- Client devices on 5GHz Wi-Fi work fine for 1080p; 4K may need Ethernet or Wi-Fi 6.
- Reverse-proxy with Caddy or Nginx if you want HTTPS. Skip if Jellyfin is LAN-only.
- Port-forwarding to WAN is not recommended — use a VPN like Tailscale or WireGuard to reach the server remotely.
Community measurements show a Pi 4 on Ethernet delivering 300+ Mbps sustained network throughput while playing a Jellyfin stream, more than enough for multi-client direct play.
Step 6: Bulk storage strategy
For libraries larger than ~400GB, options in rough order of preference:
- Second SSD via USB — cheapest and fastest, no network dependency. A Crucial BX500 1TB SATA via USB-SATA adapter is the standard recommendation.
- NAS mount over NFS or SMB — best if you already have a Synology or QNAP. Higher latency but unlimited scale.
- External USB HDD — cheapest per TB but noisy and mechanical; fine for cold storage of full-quality rips.
- Cloud backend via rclone — Google Drive or Backblaze mounted at
/mnt/cloud. Works but adds streaming latency.
For a 500GB-2TB media library, option 1 is the recommended path. For larger libraries a NAS is the sanity-preserving choice.
Common pitfalls
- USB adapter incompatibility. Not every USB-NVMe adapter enumerates correctly on the Pi 4. Stick to JMS583 or ASM1153E bridges; avoid unbranded no-name adapters.
- Insufficient power supply. The Pi 4 + NVMe adapter + external drive can exceed the official PSU's 3A. Use a powered USB hub or add a second PSU for the drives.
- MicroSD boot failing to migrate. If
rpi-clonefails, use manualdd+resize2fsto expand the NVMe partition. - Wi-Fi client dropouts. Wi-Fi clients on 2.4GHz will suffer with any 1080p stream. 5GHz or Ethernet only.
- Metadata cache blowing up. If your library is 5000+ items, watch
/var/lib/jellyfindisk usage — the metadata database and thumbnails can grow to 20-30GB. - Automatic library scans killing playback. Set the library scan to a specific low-usage time (e.g., 4am) or disable automatic scanning entirely.
- Docker vs native install confusion. Both work, but mixing them (installing native then switching to Docker) leaves stray files. Pick one and commit.
When to skip the Pi 4 build
- You need routine 1080p transcoding. Move to a Pi 5, an Intel N100 mini-PC, or a used ThinkCentre with integrated graphics for QuickSync.
- You have a 5+ TB library. Bulk storage via USB gets clunky; a proper NAS is cleaner.
- You want to run Immich, Nextcloud, and Home Assistant on the same box. The Pi 4 8GB gets tight; consider a Pi 5 or an x86 mini-PC.
- You want reliable 4K HDR transcoding. Requires QuickSync (Intel) or NVENC (Nvidia). Not available on Pi.
Hardening for 24×7 uptime
A Jellyfin homelab that lives on your network needs some basic hardening to be a genuinely reliable service:
- UPS or brownout-safe PSU. A brief power flicker can corrupt ext4 filesystems. A 300-500VA UPS is cheap insurance. Alternately,
noatimeandcommit=5in/etc/fstabreduces the write-frequency risk. - Automatic updates. Enable
unattended-upgradesfor security patches only. Do not auto-update the Jellyfin package itself — occasional major releases require attention. - Log rotation. Jellyfin's default logging can fill the NVMe boot partition on a busy library. Ensure
/var/log/jellyfinis rotated weekly. - Backups. The Jellyfin config directory (
/var/lib/jellyfin) is essential to back up. Media files themselves can be re-scanned if lost. A weekly rsync to a second SSD or NAS is enough. - Monitoring. A basic Uptime Kuma or Prometheus + Grafana setup on the Pi tracks CPU, temperature, disk I/O and playback session counts. Fits on 8GB of RAM alongside Jellyfin.
- Fan noise. The active-cooler fan on a Pi 4 is audible in a quiet room. If the server sits in a bedroom or living room, use a passive-cooling case with a heatsink and undervolt the CPU by 50-100 mV to lower thermal load.
Pi 5 vs Pi 4: is the upgrade worth it?
The Pi 5 8GB adds native PCIe (via HAT), faster CPU cores, and better GPU. For a Jellyfin-specific homelab:
- Direct-play performance is similar — both are bottlenecked by network, not CPU.
- 1080p transcoding on Pi 5 is genuinely usable — 2-3 concurrent 1080p transcodes is realistic. Pi 4 struggles at one.
- NVMe throughput is higher on Pi 5 thanks to native PCIe (600+ MB/s vs 350 MB/s on Pi 4 via USB).
- Power draw is similar — Pi 5 idles slightly higher but hits similar peak.
- Cost is ~$5-10 more for the board itself, plus the NVMe HAT (~$12).
Recommendation: if you're buying today and don't already own a Pi 4, buy the Pi 5. If you own a Pi 4, don't upgrade unless you want the transcoding headroom.
Bottom line
A Raspberry Pi 4 8GB with a Samsung 970 EVO Plus NVMe is a legitimate Jellyfin homelab in 2026 — comfortable direct-play to 2-3 clients, minimal power draw, and a ~$180 total build cost that includes room for a second SATA SSD via USB for bulk storage. It's the right build if you own the Pi 4 already or want the cheapest working homelab that doesn't require any x86 hardware. For a brand-new build in 2026 the Pi 5 is a modest step up worth the extra $15-20 for the transcoding headroom.
Related guides
- Raspberry Pi 5 active cooler NVMe VESA case
- Raspberry Pi Zero W RetroPie handheld
- Ryzen 5 5600G APU local LLM inference
Citations and sources
- Jellyfin official documentation — canonical installation, transcoding and hardware requirements documentation.
- Raspberry Pi 4 official product page — board specs including USB 3.0 bandwidth ceiling relevant to NVMe over USB.
- Jellyfin Docker image on Docker Hub — primary source for the containerized install path.
This piece is editorial synthesis based on publicly available information. No independent first-party benchmarking is reported.
