Skip to main content
Build a Raspberry Pi 4 NVMe Jellyfin Homelab Box in 2026

Build a Raspberry Pi 4 NVMe Jellyfin Homelab Box in 2026

Direct-play to 3 clients, ~5W idle, $180 total — the sweet-spot Pi homelab build for a modern media library.

A Raspberry Pi 4 8GB with NVMe storage runs a Jellyfin media server that direct-plays 1080p to 3 clients at ~5W idle. Full build guide and parts list for 2026.

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

PartChoiceApprox. price
BoardRaspberry 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 adapterJMS583 or Startech-based$18
USB-to-SATA adapter for bulk driveSabrent or Kingston-branded$12
Power supplyOfficial Pi 4 USB-C 5.1V 3A$8
MicroSD (initial install)32GB Sandisk$10
Case3D print or Argon Neo$5-25
Optional bulk storageSanDisk 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:

  1. sudo apt update && sudo apt install rpi-clone -y
  2. Connect the USB-NVMe adapter with the Samsung drive
  3. lsblk — confirm the NVMe appears (typically as sda)
  4. sudo rpi-clone sda — clones the running microSD to NVMe
  5. Update /boot/firmware/cmdline.txt to boot from NVMe
  6. Update /etc/fstab on the NVMe to match
  7. 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:

curl https://repo.jellyfin.org/install-debuntu.sh | sudo bash

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:

/mnt/media/
├── Movies/
├── TV/
├── Music/
├── Photos/
└── Books/ (for Kavita or Komga sidecar)

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 typeConcurrent streamsResult
1080p H.264 (direct play)1Flawless
1080p H.264 (direct play)2Flawless
1080p H.264 (direct play)3Occasional buffering, network-dependent
1080p H.264 (direct play)4+Buffering, sustained load
4K H.265 (direct play compatible client)1Flawless on Ethernet
4K H.265 (direct play compatible client)2Buffering on Wi-Fi clients
720p transcode1~70-80% CPU, workable
1080p transcode1~95%+ CPU, drops frames
4K→1080p transcode1Not 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:

  1. Second SSD via USB — cheapest and fastest, no network dependency. A Crucial BX500 1TB SATA via USB-SATA adapter is the standard recommendation.
  2. NAS mount over NFS or SMB — best if you already have a Synology or QNAP. Higher latency but unlimited scale.
  3. External USB HDD — cheapest per TB but noisy and mechanical; fine for cold storage of full-quality rips.
  4. 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-clone fails, use manual dd + resize2fs to 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/jellyfin disk 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, noatime and commit=5 in /etc/fstab reduces the write-frequency risk.
  • Automatic updates. Enable unattended-upgrades for 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/jellyfin is 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

Citations and sources

This piece is editorial synthesis based on publicly available information. No independent first-party benchmarking is reported.

Products mentioned in this article

Tap any product for full specs, live Amazon & eBay pricing, and alternatives.

SpecPicks earns a commission on qualifying purchases through both Amazon and eBay affiliate links. Prices and stock update independently.

Frequently asked questions

Can a Raspberry Pi 4 transcode 1080p video for Jellyfin?
Not comfortably — 1080p software transcoding on a Pi 4 uses ~95% CPU and typically drops frames on complex scenes. 720p transcoding works at one concurrent stream. For a Jellyfin homelab that occasionally needs to transcode, prefer to buy client devices (Nvidia Shield, Apple TV, Fire TV) that direct-play your content. If routine transcoding is a hard requirement, move up to a Pi 5 or a small x86 mini-PC with QuickSync.
Do I need NVMe or is a USB SATA SSD enough?
USB SATA works but NVMe over USB delivers 300-400 MB/s versus 200-250 MB/s for SATA, and is dramatically faster than microSD. The bigger benefit is reliability — Jellyfin's constant metadata writes will wear out a microSD in 6-18 months. A Samsung 970 EVO Plus 500GB NVMe adds only about $15 over a comparable SATA SSD and removes the wear-out failure mode entirely.
How many clients can a Pi 4 Jellyfin server support?
For direct-play streaming with no transcoding, expect 2-3 concurrent 1080p clients to work flawlessly and 3-4 to work with occasional buffering depending on your network. The Pi 4's onboard gigabit Ethernet delivers 300+ Mbps sustained throughput, which is comfortably above what direct-play streams require. Wi-Fi clients on 2.4GHz will suffer; use 5GHz or Ethernet for consistent playback.
Should I run Jellyfin in Docker or install it natively?
Both work well on the Pi 4 8GB. Docker adds about 200MB of resident memory versus the native package but isolates dependencies and makes updates easier to manage. For a first-time Jellyfin build, use the native install via the official Jellyfin repository — it's simpler. If you plan to run other homelab services (Home Assistant, Pi-hole, Immich) alongside Jellyfin, prefer Docker for cleaner service isolation.
Is the Pi 5 worth the upgrade over the Pi 4 for a Jellyfin server?
For pure direct-play the Pi 4 and Pi 5 perform similarly — both are network-bottlenecked, not CPU-bottlenecked. The Pi 5's meaningful advantage is transcoding: 2-3 concurrent 1080p transcodes are realistic on the Pi 5 versus one on the Pi 4. If you own a Pi 4 already, don't upgrade unless transcoding matters. For a fresh 2026 build, the Pi 5 is worth the extra $15-20 for the transcoding headroom.

Sources

— SpecPicks Editorial · Last verified 2026-07-22

More guides & deep dives from the SpecPicks archive

Browse all articles & guides →

More reviews from the SpecPicks archive

Browse all reviews →

More buying guides from SpecPicks

Browse all buying guides →