Jellyfin
The free media server - stream your movies, TV, and music to any device. Plex without the paywall.
One-click deploy, from $49/mo on a Miget plan.
Jellyfin is the free, self-hosted media server: stream your movies, TV shows, music, and photos to a web player and native apps on practically every device, with no subscription, no account upsell, and no telemetry. It is the community alternative to Plex and Emby.
It is a single self-contained container with an embedded SQLite database, so there is nothing else to run. Jellyfin only sets its HTTP port through network.xml, so this template uses a thin wrapper that seeds port 5000 on first boot (and never touches it again, so changes you make in the UI stick).
The honest caveat is transcoding: a PaaS does not pass through a GPU, so transcoding is CPU-only. Direct-play - when the client can play the source file as-is - uses almost no CPU and is the happy path; heavy on-the-fly transcoding costs roughly a core per stream, so size the plan or prefer compatible clients.
Upstream project: Jellyfin
#what you get
- Stream movies, TV, music, and photos to every device
- Web player plus native apps (Android, iOS, TV, Kodi, Roku)
- Live TV / DVR, subtitles, and user profiles
- Single container, embedded SQLite - nothing else to run
- No subscription, no paywalled features, no tracking
- GPL-2.0; port-5000 wrapper (network.xml seed)
#topology
| Service | Role | Public |
|---|---|---|
| jellyfin | media server + web player (:5000) | yes |
| volumes | config + cache + media library (filesystem) | no |
#miget sizing
// this stack needs
2 GiB RAM · 115 GB disk · 1 service
Direct-play idles near zero; budget ~1 CPU core per 1080p software transcode. The 100 GB media volume is the variable - resize it to your library. Keep replicas at 1 (SQLite + library).
Hobby - recommended fit
$49/mo
4 vCPU · 8 GiB · 160 GiB disk
Headroom for your own apps: 16 GiB at $97/mo
Professional - production
$337/mo
16 vCPU · 32 GiB · 200 GiB disk
Dedicated resources, production SLOs - plan details
One Miget plan is a fixed pool of compute - the whole stack (managed databases included) deploys inside it, and anything left over runs your other apps. No per-service or per-seat math.
#vs. the managed service
What the hosted equivalents charge, against the flat Miget plan this stack fits on. Prices as of June 2026, sources linked.
| Service | Plan | Monthly | What you get |
|---|---|---|---|
| Jellyfin on Miget ★ | 8 GiB plan | $49 | this whole stack, flat - no usage meters, and room left for your own apps |
| Netflix | Standard | ~$15 | $15.49/mo - a rotating catalogue you do not own |
| Plex Pass | Monthly | ~$7 | $6.99/mo; lifetime rises to $749.99 on Jul 1 2026 |
Jellyfin is free software; you pay only for the plan it runs on, and the library is yours.
#vs. other PaaS
Estimated monthly cost of running this exact stack (2 GiB RAM, 115 GB disk, 1 container) elsewhere, from published June 2026 rates.
| Platform | Est. monthly | Notes |
|---|---|---|
| Miget ★ | $49 flat | compose stacks first-class: one deploy, dedicated vCPU, managed Postgres/Valkey, volumes and TLS all included in the plan |
| Heroku | ~$100 | no volumes; nothing between 1 GB ($50) and 2.5 GB ($250) dynos - 2 GB containers cost far more than shown |
| Render | ~$54 | per-service instances (0.5 GB $7, 2 GB $25) - every container is its own paid service |
| Railway | ~$37 | usage-based ($10/GB RAM-mo); vCPU billed separately at $20/vCPU-mo on top |
| Fly.io | ~$29 | cheapest sticker price - but burstable shared CPUs (1/16 core; dedicated vCPUs cost ~2-3×), no compose deploys (one app per container, manual wiring), managed DBs billed extra |
| DO App Platform | ~$29 | no persistent volumes - stateful containers need managed DBs/Spaces (base $5 Spaces included here) |
Estimates assume RAM fully allocated at published on-demand rates - and sticker price isn't the whole comparison: the cheaper rows buy burstable shared CPUs, per-service wiring instead of a compose deploy, and managed databases billed separately. Heroku and DO App Platform have no persistent volumes at all - stateful stacks like this one need workarounds there.
#deploy it
On Miget
- Create a Compose Stack in app.miget.com pointing at the templates repository
- Set the stack path to
jellyfin -
Set the required variables:
(none), first account created on first visit becomes adminPUBLISHED_SERVER_URL, optional: the https domain for client auto-discovery
- Deploy. Miget layers
compose.miget.yaml(RAM, privacy, volumes, managed services) automatically
Locally first?
Every template is portable, vanilla Docker Compose - the Miget overrides are ignored locally:
git clone https://github.com/deployable-sh/stacks
cd miget-compose-templates/jellyfin
docker compose up -d Same files, same behavior. The template README covers connection strings and scaling notes.
#faq
What does this save vs Plex or streaming services?
Plex keeps moving features behind Plex Pass ($6.99/month, lifetime jumping to $749.99 on Jul 1 2026), and Netflix-style services rent you a rotating catalogue. Jellyfin is one plan streaming a library that is entirely yours, with every feature included.
Can it transcode without a GPU?
Yes, in software, but a 1080p transcode uses roughly a full CPU core. Direct-play (a client that supports the source format) avoids transcoding entirely and is the recommended path on a PaaS, where GPU passthrough is not available.
Why does it need a wrapper for port 5000?
Jellyfin reads its listen port from network.xml, not an env var or flag. The thin wrapper seeds network.xml with port 5000 on first boot only, so it lands on Miget’s public port without clobbering any port change you make later in the UI.
Ship Jellyfin today
One compose stack, 2 GiB of RAM, from $49/month flat, and it runs on your laptop with the same files.