Why Jellyfin Alone Is Not Enough
Jellyfin is a powerful, fully open-source media server that lets you stream your personal library to any device without subscriptions or licensing fees. It handles playback, metadata, user profiles, and transcoding – but it does not handle requests. If someone in your household wants to watch a movie you do not own yet, there is no built-in way for them to ask for it without texting you directly. That gap is exactly what Overseerr fills.
Overseerr is a request management interface that sits on top of your media stack. Users log in, search for movies or TV shows, and submit requests. Those requests then route to your download clients automatically. Paired with Jellyfin, the combination gives you a streaming experience that functions like a private Netflix – complete with user accounts, watchlists, and a self-service request system. This guide walks through setting up both applications and connecting them into a working stack.

Installing Jellyfin
Jellyfin runs on Linux, Windows, macOS, and inside Docker containers. For a home server setup, Docker is the most practical choice because it isolates the application, makes updates simple, and keeps your host system clean. The official Jellyfin Docker image is maintained at jellyfin/jellyfin on Docker Hub. You will need to mount two volumes: one pointing to your media files and one for Jellyfin’s configuration and database. A basic Docker Compose definition looks like this:
- image: jellyfin/jellyfin
- network_mode: host (recommended for local device discovery)
- volumes: /path/to/config:/config and /path/to/media:/media
- restart: unless-stopped
After the container starts, Jellyfin’s setup wizard is available at port 8096. The wizard walks you through creating an admin account, adding media libraries, and choosing metadata scrapers. Point your libraries at the mounted media directory. Jellyfin will scan everything and pull artwork, descriptions, and cast information from TheMovieDB and TheTVDB automatically. The initial scan can take several minutes depending on library size.
Once the server is running, spend a few minutes configuring your library types correctly. Jellyfin treats Movies, TV Shows, Music, and Books as distinct library categories, each with different metadata behavior. Mixing media types in a single library causes mismatched metadata and broken displays. Keep movies in a movies folder and series in a separate shows folder, following the Plex naming convention that Jellyfin also recognizes: Movie Title (Year) for films and Series Name/Season 01/Episode for television.
Installing Overseerr
Overseerr is also Docker-native. The image is sctx/overseerr and it runs on port 5055 by default. Mount a config volume, set your timezone via the TZ environment variable, and bring the container up. On first launch, Overseerr’s own setup wizard asks you to sign in with a Plex account – ignore this if you are running Jellyfin. Overseerr was originally built for Plex, but full Jellyfin support was added later and works well. Select Jellyfin as your media server type during setup, then enter your Jellyfin server URL and an API key generated from Jellyfin’s dashboard under Advanced Settings.
Once the connection is confirmed, Overseerr syncs your existing Jellyfin library so it can show users which content is already available versus what needs to be requested. This sync runs on a schedule and can also be triggered manually. You will then configure at least one download client inside Overseerr’s settings – typically Radarr for movies and Sonarr for TV. Each service gets its own API key entry, and you can set quality profiles and root folders per service directly inside Overseerr’s interface.

Connecting the Full Stack
The handoff between Overseerr and your download clients is where the stack actually comes together. When a user submits a request through Overseerr, it sends that request to Radarr or Sonarr via API. Radarr and Sonarr then search your configured indexers, grab a torrent or NZB file, and pass it to your download client – typically qBittorrent or SABnzbd. When the download completes, the file moves to your media directory, and Jellyfin picks it up during its next library scan. The whole chain runs without any manual steps after initial setup. If you want indexer management centralized in one place, Prowlarr handles that role and integrates directly with both Radarr and Sonarr.
User management deserves careful attention. Overseerr has its own account system that maps to Jellyfin users. You can import your Jellyfin users into Overseerr directly, which means each person uses their existing Jellyfin login for requests. Permissions in Overseerr are granular: you can allow some users to auto-approve their own requests, require admin approval for others, and set per-user request limits to prevent one person from flooding the queue. This matters more than it seems once you have more than two or three people using the system.
Notifications are one of Overseerr’s more useful features and often get skipped during initial setup. Overseerr supports Discord, Slack, Telegram, email, and several webhook targets. Configuring a Discord notification means every approved request, every completed download, and every failed search sends a message to a designated channel. For a household server, this keeps everyone informed without anyone needing to check Overseerr manually. It also means the admin gets immediate alerts when something in the chain breaks.
There are a few friction points that come up consistently with this stack. Overseerr’s 4K request handling requires separate Radarr and Sonarr instances configured for 4K quality profiles – you cannot mix 1080p and 4K within a single service instance cleanly. Jellyfin’s 4K transcoding is also hardware-dependent; without hardware acceleration enabled (via Intel Quick Sync, NVENC, or VAAPI), 4K streams will struggle on most home server hardware. Hardware acceleration is configured under Jellyfin’s Playback settings and requires the appropriate drivers available inside the Docker container, which usually means passing through a device like /dev/dri in your Compose file. Getting this right the first time saves a lot of troubleshooting later.

Overseerr does not currently support requesting content from libraries that Jellyfin marks as non-standard types, so audiobook or music request workflows fall outside what this stack handles. The request system is designed around video content, and that is where it performs without compromise. If your media interests extend to audiobooks, a separate solution like Audiobookshelf runs independently alongside Jellyfin without any conflicts. The two stacks do not overlap, which is actually the cleaner architectural choice – each service does one thing well rather than one service trying to manage everything.
The real test of any self-hosted media stack is how it behaves after six months of use: whether library scans stay accurate, whether requests stop routing correctly after a container update, and whether users who are not technically inclined can still find and request content without help. Jellyfin and Overseerr both have active development communities, and breaking changes between versions do happen. Pinning your Docker image tags to specific version numbers rather than using latest gives you control over when updates apply and time to check changelogs before anything breaks in production.
Frequently Asked Questions
Does Overseerr work with Jellyfin or only Plex?
Overseerr added Jellyfin support after its initial Plex-focused launch. You can select Jellyfin as your media server during Overseerr’s setup wizard and connect via API key.
What download clients does this stack require?
Overseerr routes movie requests to Radarr and TV requests to Sonarr. Those services then pass downloads to a client like qBittorrent or SABnzbd.
Do I need Prowlarr to use this stack?
Prowlarr is not strictly required, but it centralizes indexer management for Radarr and Sonarr rather than configuring indexers separately in each application.
How does Overseerr handle user permissions?
Overseerr lets you import Jellyfin users and assign per-user permissions including auto-approval, request limits, and admin-only approval requirements.





