How to Self-Host Jellyfin: Media Server Alternative to Plex 2026
TL;DR
Jellyfin (GPL 2.0, ~33K GitHub stars, C#) is the free, fully open source media server — no subscription, no Plex Pass required, no data sent to any company's servers. It streams your movie, TV show, music, and photo library to every device: web browser, iOS, Android, Roku, Fire TV, Apple TV, Android TV, and Samsung/LG smart TVs. Plex charges $4.99/month (or $119.99 lifetime) for Plex Pass to unlock hardware transcoding and offline sync. In Jellyfin, all features are free.
Key Takeaways
- Jellyfin: GPL 2.0, ~33K stars, C# — fully free Plex alternative, no subscription
- Hardware transcoding: Intel QSV, AMD AMF, Nvidia NVENC — all free (Plex charges for this)
- Smart TV apps: Roku, Fire TV, Apple TV, Android TV, Samsung Tizen, LG WebOS
- Offline sync: Download for offline on iOS/Android — free (Plex charges Plex Pass)
- No account required: Runs fully self-contained with zero external services
- Metadata: TMDB, TheTVDB, MusicBrainz — automatic metadata and cover art
Part 1: Docker Setup
# docker-compose.yml
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
network_mode: host # Enables DLNA/auto-discovery
volumes:
- jellyfin_config:/config
- jellyfin_cache:/cache
- /path/to/movies:/media/movies:ro
- /path/to/tvshows:/media/tv:ro
- /path/to/music:/media/music:ro
environment:
TZ: America/Los_Angeles
JELLYFIN_PublishedServerUrl: "https://media.yourdomain.com"
# For hardware transcoding (Intel):
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
volumes:
jellyfin_config:
jellyfin_cache:
docker compose up -d
Visit http://your-server:8096 → setup wizard.
Part 2: HTTPS with Caddy
media.yourdomain.com {
reverse_proxy localhost:8096
}
Part 3: Media Library Structure
Jellyfin follows the standard Kodi/Plex naming convention:
Movies
/movies/
├── The Godfather (1972)/
│ └── The Godfather (1972).mkv
├── Inception (2010)/
│ ├── Inception (2010).mkv
│ └── Inception (2010) - Featurettes/
│ └── Making of Inception.mkv
└── Dune Part Two (2024)/
└── Dune Part Two (2024).mkv
TV Shows
/tvshows/
├── Breaking Bad (2008)/
│ ├── Season 01/
│ │ ├── Breaking Bad S01E01 - Pilot.mkv
│ │ └── Breaking Bad S01E02 - Cat's in the Bag.mkv
│ └── Season 02/
│ └── Breaking Bad S02E01 - Seven Thirty-Seven.mkv
└── The Wire (2002)/
└── Season 01/
└── The Wire S01E01 - The Target.mkv
Part 4: Hardware Transcoding
Hardware transcoding lets Jellyfin transcode H.264/H.265 video in real-time without maxing out the CPU:
Intel Quick Sync (QSV)
# docker-compose.yml
services:
jellyfin:
devices:
- /dev/dri:/dev/dri
group_add:
- "109" # render group (check: getent group render | cut -d: -f3)
In Jellyfin → Admin → Playback → Transcoding:
- Hardware acceleration: Intel QuickSync (QSV)
- Enable H.264, H.265 hardware encoding: Yes
Nvidia GPU
services:
jellyfin:
runtime: nvidia
environment:
NVIDIA_VISIBLE_DEVICES: all
NVIDIA_DRIVER_CAPABILITIES: all
In Jellyfin → Admin → Playback:
- Hardware acceleration: NVIDIA NVENC
Verify transcoding
Stream a 4K file to a device that can't handle 4K → Jellyfin should transcode to 1080p. Check Admin → Dashboard → Playback Sessions to see if "Transcode" or "Direct Play" is shown.
Part 5: Client Apps
Web browser
https://media.yourdomain.com — full web player with:
- Custom subtitles (SRT, PGS, ASS)
- Audio track selection
- Chapter navigation
- Playback speed
Mobile
| App | Platform | Notes |
|---|---|---|
| Jellyfin (official) | iOS/Android | Full-featured, offline downloads |
| Swiftfin | iOS | Native Swift UI — better iOS experience |
| Findroid | Android | Material You design |
Smart TV / Streaming
| Platform | App |
|---|---|
| Roku | Jellyfin for Roku (official) |
| Fire TV | Jellyfin for Amazon Fire TV |
| Apple TV | Jellyfin Media Player (tvOS) |
| Android TV / Google TV | Official Jellyfin app |
| Kodi | Jellyfin for Kodi add-on |
| Samsung Tizen | Jellyfin web app |
| LG WebOS | Jellyfin web app |
Part 6: Metadata and Artwork
Jellyfin fetches metadata automatically from:
- TMDB (The Movie Database) — movies and TV
- TheTVDB — TV shows
- MusicBrainz — music
- AniDB — anime
Custom artwork
Right-click item → Edit → Images:
- Upload custom poster, backdrop, logo, banner
- Or select from multiple auto-fetched options
NFO files (manual metadata)
Create movie-name.nfo alongside your video file:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<movie>
<title>The Godfather</title>
<originaltitle>The Godfather</originaltitle>
<year>1972</year>
<plot>The aging patriarch of an organized crime dynasty...</plot>
<tagline>An offer you can't refuse.</tagline>
<genre>Drama</genre>
<genre>Crime</genre>
</movie>
Part 7: Users and Parental Controls
# Create users in Admin → Users:
# - Admin: full access
# - Standard user: limited access
# - Parent-restricted: parental controls
# Per-user settings:
# - Max video stream quality (bandwidth limiting)
# - Parental rating filter (PG-13, R, etc.)
# - Allow media downloads: Yes/No
# - Access specific libraries only
Parental controls
- Admin → Users → [user] → Parental Control
- Maximum allowed content rating: PG
- Block items with no content rating: Yes
- Blocked tags: "adult", etc.
Part 8: DLNA and Live TV
DLNA (local network streaming)
network_mode: host # Required for DLNA auto-discovery
Jellyfin exposes DLNA — Samsung/LG/Sony smart TVs discover it automatically on the local network.
Live TV and DVR (with a tuner)
Connect a network tuner (HDHomeRun) or USB TV tuner:
- Admin → Live TV → + Add tuner
- Type: HDHomeRun, M3U Playlist, or XMLTV
- Guide data: Schedules Direct ($25/year)
Maintenance
# Update:
docker compose pull
docker compose up -d
# Backup (config only — your media stays on filesystem):
tar -czf jellyfin-config-$(date +%Y%m%d).tar.gz \
$(docker volume inspect jellyfin_jellyfin_config --format '{{.Mountpoint}}')
# Clear transcoding cache:
docker exec jellyfin rm -rf /cache/transcodes/*
# Rebuild metadata for a library:
# Admin → Libraries → [library] → Scan library files
# Logs:
docker compose logs -f jellyfin
See our comparison: Jellyfin vs Plex vs Emby
See all open source media tools at OSSAlt.com/categories/media.