Jellyfin
The free software media system
What is Jellyfin?
Jellyfin lets you stream your own movies, TV shows, music and photos to any device. It is a fully free and open-source alternative to Plex and Emby with no premium tier, no tracking and no account required. You keep complete control of your library and your data.
Best for
People replacing Netflix or Plex with a private media server
Why choose Jellyfin
Jellyfin is what a media server looks like when there is no commercial tier to upsell. Streaming to phones, TVs, browsers and set-top boxes works without a subscription, hardware transcoding is free, no account is required, and none of your viewing data is reported anywhere. It organises your own files with metadata, artwork and subtitles, and it plays them to almost anything on the network. Because there is no premium edition, features do not get moved behind a paywall after you have built your setup around them, which is a durability argument rather than a feature list. For someone with a library of their own media who wants to watch it on the devices they own, it does the job without asking for anything.
Replaces
- Plex
- Emby
- Netflix
Key features
- Movies, TV, music and photo libraries
- Transcoding with hardware acceleration
- Apps for TV, mobile and browser
- Live TV and DVR support
What to watch out for
Clients vary in quality far more than the server does. The web interface is solid, but the experience on a smart TV or a streaming stick depends on an app developed by a volunteer, and some platforms are considerably better supported than others. Transcoding is the resource that determines what hardware you need: direct playback of a compatible file is cheap, but converting a high-bitrate format for a device that cannot play it will overwhelm a modest CPU, and hardware acceleration requires the right GPU and configuration. Metadata matching for unusual or poorly named files is imperfect, and a disorganised library produces a disorganised server. There is no cloud relay, so remote access requires port forwarding or a VPN you set up yourself.
How to deploy
- Docker
- Linux packages
- Windows
Getting started
Organise your files with a sensible folder and naming convention before pointing Jellyfin at them, because metadata matching quality is largely determined by that. Decide your client situation early — if your TV has no good client, a cheap dedicated streaming device is often the real solution rather than fighting the built-in app. Establish whether your media will be direct played or transcoded, and size the hardware or enable hardware acceleration accordingly, since this is the difference between smooth and unusable. Set up remote access through a VPN rather than exposing the server directly. Put the library on storage that is backed up, because rebuilding metadata is annoying but losing media is not recoverable.
Typical setup
It runs on a machine whose transcoding capability has been established in advance — direct play where files are compatible, hardware acceleration enabled where they are not — because that decision determines whether the experience is smooth or unusable. The media library follows a consistent folder and naming convention, which is what makes metadata matching work. Playback is verified on the actual devices that will be used, with a dedicated streaming device added where a smart TV client is weak. Remote access goes through a VPN rather than an open port, and the library storage is backed up because metadata is rebuildable but media is not.
Who should look elsewhere
Do not choose it if you need a polished experience on a specific smart TV platform whose client is immature, because the server cannot fix a weak client. Avoid it if you have no interest in managing files and metadata — a hosted streaming service is genuinely better value for casual viewing. And do not expose it directly to the internet, because the remote access problem is solved correctly with a VPN and solved dangerously with an open port.
Project health
- GitHub stars: 57,679
- Last code push: 2026-09-30
- Open issues: 719
- Status: actively developed
Figures pulled from the GitHub API and refreshed periodically.