Head to head
Jellyfin vs Plex
Plex has better clients and a licence check. Jellyfin has neither. This page decides which of those two facts matters more for your household.
Should you use Jellyfin or Plex?
Use Jellyfin unless someone in your household will phone you when a TV app stutters. Jellyfin gates nothing: hardware transcoding, remote streaming, DVR and downloads are features rather than entitlements. Plex has required a paid pass for remote playback of personal media since 29 April 2025, enforced on Roku from late November 2025 and on Fire TV, Apple TV, Samsung, LG, Vizio, PlayStation and Xbox from 29 April 2026, and hardware transcoding has always been Plex Pass only. Plex still has the better first-party apps on Roku and older smart TVs, which is a legitimate reason to pay $6.99/month, $69.99/year or $249.99 once.
The feature lists are close enough to be useless. Both index a folder of video, both transcode, both do live TV and DVR, both have apps for the TV you already own. The decision underneath is what kind of object you want sitting in your rack.
Plex Media Server is a product. Someone else decides what it does, ships client apps for hardware you could never build for, and bills you for the privilege. Jellyfin is a program. It does what the code does, indefinitely, and nobody can renegotiate after you have moved 12 TB of video into it. Every argument below is downstream of that one difference.
What changed for Plex remote streaming, exactly#
Since 29 April 2025, remote playback of personal media requires that the server owner holds a Plex Pass, or that each remote viewer holds a Plex Pass or the cheaper Remote Watch Pass ($1.99/month, $19.99/year). "Remote" means not on the same network as the server, which includes the phone your partner is holding in a car park.
Enforcement arrived in stages. It began on Roku in late November 2025, and on 29 April 2026 it extended to Fire TV, Android TV, Apple TV, Samsung, LG, Vizio, PlayStation and Xbox. If your setup kept working through 2025, that is why, and it has now landed on the platform your relatives use.
Local-network playback stays free. Hardware transcoding has always been Plex Pass only. Put those two facts together and the current free Plex tier is a LAN-only, CPU-only server. The Pass itself went to $6.99/month, $69.99/year or $249.99 lifetime with the 2025 price increase. Along the way Plex retired the Plugins framework, Cloud Sync and Watch Later, so a few workflows people built in 2019 are simply gone.
Jellyfin has no equivalent line item because it has no line items. Remote access, transcoding, DVR, downloads and multiple users are all in the GPL-2.0 build.
What the spec table is actually telling you#
Skip the memory rows on your first pass. Both are one container with one SQLite database, both idle in the hundreds of megabytes, and both spend their real RAM on concurrent transcodes rather than on being awake. The two rows that decide anything are Licence and Identity.
| Specification | Jellyfin | Plex Media Server |
|---|---|---|
| Licence | GPL-2.0-only (Copyleft) | Proprietary (Proprietary) |
| Written in | C# / .NET | C++ (closed source) |
| First release | 2018 | 2008 |
| Maturity | Mature | Mature |
| Datastore | SQLite | SQLite |
| Services to run | 1 | 1 |
| Idle memory | 280 MB | 400 MB |
| Memory in use | 900 MB | 1200 MB |
| Operational load | 2 / 5, Light | 2 / 5, Light |
| Identity | OIDC via plugin | Local accounts only |
| arm64 builds | Yes | Yes |
| Default ports | 8096, 8920 | 32400, 32469 |
| Backup shape | SQLite backup | SQLite backup |
Licence explains why one row can change next year and the other cannot. Identity explains the part people underestimate: Plex's none means accounts, sharing and login all route through plex.tv, and there is no way to point it at your own provider. Jellyfin's oidc-plugin is not much better in practice (the SSO plugin covers the web UI only, and native clients still hit Jellyfin's own user table), but the user database is a file on your disk either way. If you are building around a single sign-on setup, neither server is a good citizen, and Plex is not a citizen at all.
Which one your family will not complain about#
Plex, and Jellyfin users should stop pretending otherwise.
Plex's Apple TV, Roku and Tizen apps are better than Jellyfin's: faster to browse, more consistent about resuming, fewer subtitle surprises, better remote handling. That is what a decade of paid client development buys. Jellyfin's web client and Android TV app are genuinely good, the Kodi integration is excellent, and the iOS app has improved a lot, but Roku and older Samsung and LG sets are where Jellyfin still feels like a community project. Dolby Vision profile 7 and lossless TrueHD passthrough remain the two things that misbehave on specific TVs.
The honest test is not which app you prefer, it is who calls you when it breaks. If that is a parent, a partner who will not tolerate a second attempt, or a friend three time zones away, the polish is worth the subscription. If it is only you, and you watch on a browser, a phone or an Nvidia Shield, the gap is a rounding error you are paying $69.99 a year to close.
Which one transcodes 4K without a licence#
Both use the same underlying hardware paths: Intel Quick Sync, VAAPI on AMD, NVENC on Nvidia. The difference is the gate.
On Jellyfin, hardware transcoding is a configuration problem. Pass the device in and add the render group:
services:
jellyfin:
image: jellyfin/jellyfin:10.11.11
devices:
- /dev/dri:/dev/dri
group_add:
- "989" # getent group render | cut -d: -f3
volumes:
- ./config:/config
- ./cache:/cache
- /srv/media:/media:roForget group_add and ffmpeg cannot open the device, falls back to software with no visible error, and you find out when the CPU pins during the first 4K HEVC stream. Check the playback info overlay: it says whether the session is hardware accelerated.
On Plex, the same --device /dev/dri:/dev/dri gets you nothing without an active Pass. The toggle in Settings, Transcoder is there, and it stays inert. This is the single clearest illustration of the difference between the two products: on one server the GPU you bought is yours to use, on the other it is a feature you rent. If you are still choosing hardware, GPUs, transcoding and local AI covers what an iGPU actually buys you in simultaneous streams.
What happens on upgrade day#
This is where Jellyfin gives back some of its advantage.
Plex upgrades are a tag pull. There is no supported schema downgrade, but breaking migrations are rare and the release cadence is steady, including security work: 1.43.3 on 1 September 2026 patched undisclosed flaws. The failure mode you should actually plan for is the library database itself, which corrupts often enough on large installs that Plex ships a repair procedure using its own bundled Plex SQLite binary rather than the system sqlite3.
Jellyfin's 10.11 (October 2025) was the hard one. It moved the library onto EF Core and merged library.db into a single jellyfin.db. The migration only runs from 10.10.7, runs once, has no downgrade path, and on libraries past roughly 50,000 items it can grind for hours with no visible progress. People who killed the container mid-migration lost watch history and metadata. Current stable is 10.11.11 (June 2026), and the next major skips 11 and goes straight to 12.0, in release candidates since June 2026 and at rc7 in August.
Two practical consequences. First, copy /config before any Jellyfin major, and let the first start run overnight if it needs to. Second, 10.11 dropped armhf entirely, so a Raspberry Pi on a 32-bit OS is stuck on 10.10.x and the fix is reinstalling 64-bit, not chasing a package. Either way, read An update strategy that does not lose data before you get into the habit of pulling latest.
Which one you can actually get your data out of#
Neither server stores anything precious in your media files. Watch history, play counts, users, collections and playlists exist only in the server database, and that is the asset.
Jellyfin: back up /config in full, or use the scheduled backup task added in 10.11 (Dashboard, Backups) which writes a consistent archive rather than a torn SQLite copy. /cache and the transcode temp are regenerable.
Plex: everything is under /config/Library/Application Support/Plex Media Server/, with the database at Plug-in Support/Databases/com.plexapp.plugins.library.db. Do not copy it while the server runs. Plex's own scheduled task keeps dated copies next to it, and those are your fastest restore.
The asymmetry is what you can do with the backup. A Jellyfin database is a SQLite file you can open, query and migrate. A Plex database is a SQLite file whose schema is undocumented and whose account bindings live in someone else's cloud. Moving off Plex is a migration project (Replace Plex walks it), and community tooling such as JellyPlex-Watched exists precisely because there is no supported export. Whichever you pick, fold the config directory into the routine described in Backups that actually restore.
Which one can change the deal after you have committed#
Only one of these can. Plex changed the remote-playback terms in 2025 for libraries that were already assembled, running and shared, and it phased enforcement in over eighteen months across platforms. That is not a criticism of the business decision, it is a description of the risk you accept: your server's behavior is partly a policy variable held by a company.
Jellyfin is GPL-2.0-only with no account, no telemetry gate and no licence check. The realistic risks there are different and worth naming: a volunteer client maintainer stops, a plugin you depend on gets archived (the OIDC plugin's original repository was archived in May 2026 and now lives in a community fork), or a major release migrates your database one way. Those are project risks. They are not someone changing your terms.
If you want the middle position, one payment and no cloud in the authentication path, that is Emby: see Jellyfin vs Emby.
The verdict, by situation#
| Situation | Pick | Why |
|---|---|---|
| Household watches on Roku or a 2019 Samsung, and calls you when it breaks | Plex, and pay | The first-party apps are better and the Pass is cheaper than your evenings |
| You already hold a pre-2025 lifetime Pass | Stay on Plex | The paywall is a non-event and you already own the hardware transcoding |
| You are the only viewer, on browser, phone or Shield | Jellyfin | The client gap disappears on these platforms and nothing is gated |
| Intel N100 or similar iGPU, no budget for a subscription | Jellyfin | Quick Sync transcoding is free; on Plex it is the paid tier |
| Sharing a library with friends across the internet | Jellyfin if nobody will pay, Plex if someone will | Remote viewers now need a Pass on one side of the connection |
| You object to a licence check on your own files | Jellyfin | There is nothing to check and no account to lose |
| Raspberry Pi 3 or any 32-bit ARM OS | Plex, or reinstall 64-bit | Jellyfin dropped armhf at 10.11 and will not move forward |
| You want one server for video and music both | Jellyfin | See Navidrome vs Jellyfin for music before you commit music to it |
What to do next#
Run both. One container each, different ports (8096 and 32400), pointed at the same read-only media directory. Give it a week on the actual televisions in your house, because the client experience is the only part of this comparison you cannot settle by reading.
While you are testing, wire up remote access properly rather than forwarding a port: Remote access without port forwarding and Reverse proxy and TLS cover the two normal answers. If you are assembling the wider stack around the server, Jellyseerr handles requests for either one, Sonarr and Radarr handle acquisition, and Stack planner will tell you what the whole thing costs in RAM before you build it. The rest of the category is in Media.
Questions#
Is Plex still free in 2026?
Yes, for playback on the same network as the server. What is no longer free is remote playback of your own video: since 29 April 2025 either the server owner holds a Plex Pass, or each remote viewer holds a Plex Pass or the cheaper Remote Watch Pass at $1.99/month or $19.99/year. Hardware transcoding has always required a Plex Pass. So the free tier today is a LAN-only, CPU-only media server.
Can Jellyfin do hardware transcoding for free?
Yes. Quick Sync, VAAPI, NVENC and AMF are all in the base GPL build with nothing to unlock. The work is host configuration, not licensing: pass the device in with --device /dev/dri:/dev/dri and add the host's render group ID with group_add (find it with getent group render). Miss the group and ffmpeg silently falls back to software, so check the playback info overlay to confirm the session says hardware accelerated.
Do I need a Plex Pass if I only watch at home?
Not for playback. Same-network streaming is unaffected by the 2025 change. You still need one for hardware transcoding, mobile sync, skip credits and the DVR, so a Plex user with a 4K library and an Intel iGPU usually ends up paying anyway. If your library is all direct play on a wired TV, the free tier genuinely covers you.
Can I move my Plex watch history to Jellyfin?
Partly, and only with community tooling. Watch state, play counts and collections live in Plex's com.plexapp.plugins.library.db and Jellyfin's jellyfin.db, with no supported export between them. JellyPlex-Watched is the tool most people use to sync watched status across both servers by matching on media IDs. Ratings, collections and playlists usually need rebuilding by hand, so run both servers in parallel for a week before you retire the old one.
Are the Jellyfin apps good enough on a smart TV yet?
The web client, Android, Android TV and the Kodi integration are fine. Roku and older Samsung Tizen and LG webOS sets are still noticeably rougher than Plex's first-party apps: slower browsing, more subtitle and Dolby Vision profile 7 edge cases, occasional TrueHD passthrough problems. If your household's main screen is a five-year-old Samsung, budget an evening and a fallback plan.
Does Jellyfin need an internet connection to play files?
No. There is no account, no claim token and no entitlement check anywhere in the playback path, so a Jellyfin server on an air-gapped LAN works normally. Plex can be made to work offline, but it requires a server that was claimed while online and specific fallback settings, and a plex.tv outage is a failure mode you cannot fix locally.
Sources#
- Plex support, requirements for remote playback of personal media
- Plex blog, important 2025 Plex updates
- Plex support, using hardware-accelerated streaming
- Plex support, changelogs and release notes
- Official Plex Media Server Docker repository
- Jellyfin 10.11.0 release announcement
- Jellyfin documentation, hardware acceleration
- Jellyfin server releases
Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.