Jellyfin is a media server for video, music, live TV and books that streams to browsers, phones, TVs and set-top boxes. It replaces Plex and Emby without a subscription, a vendor account or a feature unlock.
Our verdict on Jellyfin#
Jellyfin is the only server here where nothing is gated. Hardware transcoding, remote access, DVR and downloads are features rather than entitlements, which matters more since Plex began enforcing its remote-streaming paywall in November 2025. You pay in client polish: the web and Android clients are good, Roku and Tizen lag, and Dolby Vision profile 7 plus lossless TrueHD passthrough still misbehave on some TVs. Version 10.11 (October 2025) defines current operational risk: it moved the library onto EF Core and collapsed library.db into a single jellyfin.db. That migration only runs from 10.10.7, runs once, has no downgrade path, and on libraries past roughly 50,000 items it can churn for hours. 10.11.11 (June 2026) is the current stable. The next major skips 11 and goes straight to 12.0, which has been in release candidates since June 2026 and reached rc7 in August.
Who Jellyfin is for#
Choose it if
- You want remote streaming for family and refuse to make any of them pay a monthly fee.
- You have an Intel iGPU with Quick Sync and want several simultaneous 4K HEVC transcodes for no licence cost.
- You are leaving Plex specifically because of the 2025 remote-playback requirement.
- You want watch history, users and playlists in a SQLite file on your disk rather than in a vendor account.
Look elsewhere if
- Your household watches mostly on Roku or older Samsung and LG TVs, where the clients are noticeably rougher than Plex's first-party apps.
- You need parental controls and per-user rating enforcement that behave identically across every client.
- You are running a 32-bit ARM board: 10.11 removed armhf support outright.
What running it actually looks like#
One container with three mounts: /config for the database, metadata and plugins, /cache for transcode scratch, and your media read-only. Nothing needs to exist first. The first-run wizard creates the admin account, sets a language and adds libraries, and it will not let you skip creating a user. Port 8096 is HTTP, 8920 is Jellyfin's own TLS listener, which you usually leave off in favor of a reverse proxy. Hardware transcoding is the only real setup work. Intel or AMD VAAPI and QSV need --device /dev/dri:/dev/dri plus the host's render group ID passed through group_add (getent group render gives you the number), otherwise ffmpeg silently falls back to software. NVIDIA needs the NVIDIA Container Toolkit, the nvidia runtime and NVIDIA_DRIVER_CAPABILITIES=compute,video,utility. Upgrades are a tag bump, except 10.10 to 10.11.
Resource profile#
- Memory
- 280 MB idle, around 900 MB in ordinary use. Idle is the .NET runtime plus the library database; the jumps come from concurrent transcode sessions and from library scans on large collections.
- CPU and acceleration
- Direct play costs almost nothing. Software transcoding of 4K HEVC will saturate any consumer CPU, so an Intel iGPU with Quick Sync or an NVIDIA card with NVENC is the difference between four streams and one.
- Storage growth
- The database stays small, but downloaded artwork, trickplay images and subtitle extractions under /config/metadata grow with library size, and the transcode cache can spike to several GB per active session.
- Operational load
- 2 of 5, Light. One container, one SQLite file, and backup is a directory copy. It sits at 2 rather than 1 because major upgrades occasionally carry one-way database migrations, as 10.11 did, and hardware transcoding needs host device and group configuration that survives host kernel and driver changes.
Figures describe a small single-household install and are the working assumptions behind our stack planner. Your numbers will differ with library size, user count and hardware. See methodology.
Data and backup surface#
Back up /config in full. That means jellyfin.db on 10.11 and later, data/library.db on older installs, the XML files under config/, the plugins/ directory, and metadata/ with downloaded artwork. /cache and the transcode temp directory are regenerable, so exclude them. A live file copy of an open SQLite database can capture a torn write, so use the scheduled backup task added in 10.11 (Dashboard, Backups), which writes a consistent archive, or stop the container first. Artwork and trickplay images come back from a rescan; watch history, users, playlists and collections do not exist anywhere except the database.
Derived backup shape
SQLite backup. sqlite3 <db> ".backup out.db" while running, or stop the container and copy. A live cp of a WAL-mode SQLite file can restore corrupt.
Traps and surprises#
The 10.11 database migration is one way
10.11 rewrote the library layer onto EF Core and merged library.db into jellyfin.db. It is only supported when upgrading from 10.10.7, and there is no downgrade. A large library can sit at startup for hours with no visible progress, and people who killed the container mid-migration lost history and metadata. Copy /config before pulling the tag, and let the first start finish overnight if you have to.
ARM32 boards stopped being supported at 10.11
armhf builds were dropped entirely in 10.11.0, so Raspberry Pi 1, 2 and 3 running a 32-bit OS cannot move past 10.10.x. A Pi 4 or 5 on a 64-bit OS is fine. If your Pi is on Raspberry Pi OS 32-bit, the fix is reinstalling the 64-bit image, not chasing a package.
The render group matters as much as the device node
Passing --device /dev/dri:/dev/dri alone is not enough. The container user also needs the host's render group ID, added with group_add in compose. Without it ffmpeg cannot open the device, transcoding falls back to software with no obvious error in the UI, and you only notice when CPU pins under load. Check the playback info overlay: it says whether transcoding is hardware accelerated.
The OIDC plugin changed hands in 2026
The 9p4/jellyfin-plugin-sso repository was archived by its author on 12 May 2026. A community fork continues it, but the plugin manifest URL you configured previously points at an archived repo, so it stops receiving updates silently. It also only covers the web UI: native clients still authenticate against Jellyfin's own user database, which is why many people use the LDAP plugin instead.
Specifications#
- Category
- Media servers and libraries
- Licence
- GPL-2.0-only (Copyleft)
- Written in
- C# / .NET
- First release
- 2018
- Maturity
- Mature
- Datastore
- SQLite
- Default ports
8096,8920- Ships as
- docker, deb/rpm package, native binary, windows installer
- arm64 builds
- Yes
- Identity
- OIDC via plugin. An official LDAP plugin ships in the plugin catalog; OIDC comes from the third-party SSO plugin, whose original repo (9p4) was archived in May 2026 and is now carried by a community fork.
- Replaces
- Plex, Emby, Netflix, Apple TV app
- Project site
- jellyfin.org
- Source
- github.com/jellyfin/jellyfin
- Documentation
- jellyfin.org/docs
Alternatives to Jellyfin#
Everything else in media servers and libraries, closest in operational weight first.
| Tool | Ops load | Idle RAM | Licence |
|---|---|---|---|
| Audiobookshelf | 2, Light | 200 MB | GPL-3.0 |
| Calibre-Web | 2, Light | 120 MB | GPL-3.0 |
| Emby | 2, Light | 350 MB | Proprietary |
| Jellyseerr | 2, Light | 220 MB | MIT |
| Kavita | 2, Light | 250 MB | GPL-3.0 |
| Plex Media Server | 2, Light | 400 MB | Proprietary |
Where Jellyfin comes up elsewhere#
Head to head
Migration guides
Guides
- Choosing hardware for a home server
- Docker Compose conventions that survive year two
- GPUs, transcoding and local AI: what hardware you actually need
- Mini PC, NAS or used enterprise gear
- The minimum viable monitoring stack
- What a home server actually costs to run
- Remote access without port forwarding
- Reverse proxy and TLS, done properly
- Single sign-on for self-hosters: the honest state of it
- Storage layout: ZFS, btrfs, mdadm, or just one disk
- An update strategy that does not lose data
- When not to self-host
Research
Sources#
Facts on this page were checked against the project's own material. Where a number is our own estimate rather than a published figure, the text says so.
Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.