Tech Digest

Media

Jellyfin

Full-featured media server with no paid tier, no account and no licence check

MediaGPL-2.0-onlyMaturearm64 buildsOIDC via plugin
Last reviewed Profile maintained against the project's own documentation
Operational load
2 / 5
Light
Idle memory
280 MB
typical use ~900 MB
Moving parts
1
containers in a normal deployment
Backup shape
SQLite backup
needs a dump or a stop

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.

ToolOps loadIdle RAMLicence
Audiobookshelf2, Light200 MBGPL-3.0
Calibre-Web2, Light120 MBGPL-3.0
Emby2, Light350 MBProprietary
Jellyseerr2, Light220 MBMIT
Kavita2, Light250 MBGPL-3.0
Plex Media Server2, Light400 MBProprietary

Where Jellyfin comes up elsewhere#

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.

  1. Jellyfin 10.11.0 release announcement
  2. Jellyfin server releases
  3. Hardware acceleration documentation
  4. Hardware selection guidance
  5. SSO plugin repository (archived May 2026)

Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.