Switching from Plex to Jellyfin was a deliberate choice. I stopped waiting for features to become standard and had grown tired of basic functionality locked behind the Plex Pass paywall. Besides, I was uneasy about metadata being sent to someone else’s cloud.
Ownership and control over my own media library with Jellyfin was worth the trade-offs. I run Jellyfin on my home server with remote access configured, and my family uses it often. Still, there’s one thing Plex handles better that I keep running into. I'd rather admit it plainly than pretend that it doesn’t.
I've stopped recommending Plex to newcomers, because Jellyfin is ready for families now
The gap between the Plex and Jellyfin's polish is no longer a chasm
My Jellyfin setup that runs in my home lab
Owning the media library
Picking Jellyfin isn’t a casual test, but a calculated move. While my Plex Pass still had a few days left, I ran Jellyfin on a used mini PC and Intel Quick Sync for hardware-accelerated transcoding. Made me wonder why I ever paid Plex for the privilege. All those media files played back without a single hiccup.
Moving to Jellyfin, I set up a Caddy server to act as a reverse proxy for local HTTPS using a self-signed certificate. No need for an external domain or cloud account just for that. My media library is the same one I used with Plex. But I changed the software that served it. The friction I encountered wasn’t from misconfigurations — it came later.
Remote streaming gave me the reality check
Work required to set it up
Caddy handles local HTTPS cleanly with minimal config, a self-signed certificate, and no babysitting once it’s running. The problem occurs when I try to reach my server while away from home.
Any device gets a certificate warning before reaching my server’s login screen. I briefly looked at Cloudflare Tunnels, with a slicker setup that sidesteps the self-signing certificate problem. Then I read the ToS carefully. Cloudflare restricts high-bandwidth apps through its tunnel service, and media services fall under that category. So I shelved it.
So I ended up on Tailscale, a WireGuard-based mesh VPN that lets my devices reach the home server as if it’s on a local network. The best part is that I don’t need to open any ports or touch the router’s firewall rules — Tailscale makes outbound connections from both ends, and coordinates them through its control plane. So there’s nothing inbound to expose.
All that works, but when something goes wrong, the troubleshooting falls entirely on me.
The one thing Plex does better
Backed by infrastructure
Plex handles remote streaming better, and Jellyfin can do it too. The difference is: Plex has an infrastructure layer to support that. Meanwhile, I have to configure everything with Jellyfin.
On Plex, the remote access just worked. All it took was a few clicks to activate it in my account and open the port on my router. After that, I didn’t have to configure a single thing. Whenever I wanted to access my library, I just logged into my Plex account. If direct connection didn’t happen properly, Plex Relay stepped in quietly. My home network’s topology was always invisible through Plex. Meanwhile, I didn’t open ports on my router to access Jellyfin remotely. Instead, I use Tailscale, and it works for me. However, my family and friends need to have it installed on their devices. I need to connect them to my Tailnet and configure their accounts.
Besides that, Plex’s transcoding pipeline anticipates that the bandwidth can fluctuate. So it adjusts ahead and is tuned to deliver remote streams smartly. Jellyfin’s remote streams work great on a stable Wi-Fi or Ethernet connection. But they struggle with mobile connections. I can easily recognize network trouble when the quality drops, the stream stutters, and recovery is slow.
Plex handles streams in the same conditions with more grace, and I never noticed the behind-the-scenes optimizations.
A bunch of other friction points still exist
A few rough edges
Though I sorted the remote streaming gap, it’s one of the workarounds I managed. When watching foreign-language content, I miss the ease of automatic subtitle tracks in Plex. Jellyfin requires manual selection, and if a subtitle track isn’t embedded in the video file, I need to source it myself.
In Jellyfin, I am required to install plugins for the features I took for granted in Plex, like the Intro Skipper. Sometimes the absence of these features means my family calls me for help. Plex bakes those things in by default. Jellyfin’s interface looks very functional, but my family struggles with its settings-heavy menu. They ask me to find options and turn them off or on. That never happened on Plex, as everyone managed to use it independently. I realized that the gap between Plex and Jellyfin was one of polish, which appears in small ways regularly. With Plex, no one ever had to call me for help.
Save on Storage & Networking deals for home servers
The Jellyfin project won’t build a relay infrastructure in line with its founding philosophy. Closing the remote streaming gap isn’t much of a feature request at this point. But the inconvenience of using Tailscale or other solutions continues.
I finally ditched Plex for Jellyfin, and I’m never going back
I don't see the point in self-hosting Plex anymore
Living with a self-hosted server and complete control
Plex is genuinely better at remote streaming. If you share your library with family and friends, then you’ll need to help them set up their devices so that your library works effortlessly. Plex’s infrastructure advantage is real and worth weighing before you commit to Jellyfin.
Jellyfin gets a bunch of things right, like no subscription, and your server’s availability doesn’t depend on a cloud account. Your metadata stays on your network, and you don’t need to pay for hardware transcoding. In fact, you can skip it and use direct play.
You can choose Jellyfin as your personal media server. Think twice if others use your library and whether they are willing to install Tailscale themselves.
- OS
- Windows, macOS, Linux
- Individual pricing
- Free, $6.99/month, $250/lifetime
