Jellyseerr: Self-Hosted Media Request Management for Jellyfin and Plex
If you run a media server for your family, partner, or roommates, you've almost certainly been the "download guy." Someone texts you the name of a movie. A housemate asks if you can grab the latest season of a show. You open Radarr, search, click, confirm. Repeat. It's not hard, but it turns every casual request into a personal favor — and the people making those requests have no visibility into whether it worked, how long it will take, or what's already queued.
Photo by Zach Graves on Unsplash
Jellyseerr ends that. It's a self-hosted request management interface that sits in front of Radarr and Sonarr, letting anyone with an account browse a Netflix-style catalog, click "Request," and get their movie or episode added to the download queue automatically. Your role drops from dispatcher to administrator.
What Jellyseerr actually is
Jellyseerr is a fork of Overseerr with full Jellyfin and Emby support added alongside Plex. It:
- Connects to your media server (Jellyfin, Plex, or Emby) to sync the library and user accounts
- Connects to Radarr and Sonarr (one or more instances each) to fulfill requests
- Uses TMDB for a rich, browsable catalog with posters, trailers, cast, and reviews
- Provides per-user quotas, approval workflows, and notifications (Discord, email, Pushover, Telegram, webhooks)
Because it's a fork, it inherits Overseerr's polished UI but adds a substantial feature: native Jellyfin auth. If you moved away from Plex, this is the only mature request tool that treats Jellyfin as a first-class citizen.
Deployment with Docker Compose
Here's a minimal docker-compose.yml that runs Jellyseerr with persistent config:
services:
jellyseerr:
image: fallenbagel/jellyseerr:latest
container_name: jellyseerr
environment:
- LOG_LEVEL=info
- TZ=America/Los_Angeles
- PORT=5055
ports:
- 5055:5055
volumes:
- ./config:/app/config
restart: unless-stopped
Bring it up with docker compose up -d and visit http://<host>:5055 to start the setup wizard. You'll authenticate with a Jellyfin or Plex admin account, then point Jellyseerr at your Radarr/Sonarr instances using their API keys.
The Radarr/Sonarr connection
This is where Jellyseerr earns its keep. During setup, for each Radarr/Sonarr instance, you configure:
- Quality profile: which profile gets used when a request comes in (e.g., "1080p WEB-DL" vs "4K Remux")
- Root folder: where files land on disk
- Default: which instance handles requests if a user doesn't specify
You can run multiple Radarr instances — one for 1080p, one for 4K — and Jellyseerr lets advanced users pick which one. Most households won't need that, but it's there.
When a user requests a movie, Jellyseerr calls Radarr's API with the TMDB ID, and Radarr handles the rest: indexer search, download client, import, rename. Jellyseerr polls Radarr to show status (Pending → Processing → Available) back to the requester.
Want more media guides? Get guides like this in your inbox — Self-Hosted Weekly delivers one free deep-dive every week.
User management and approval workflows
By default, new users can request content but requests need admin approval. For a trusted household, flip this to auto-approve and set reasonable quotas:
- Movie quota: e.g., 10 requests per 7 days
- Series quota: e.g., 5 per 7 days
- Permissions: who can request 4K, who can auto-approve, who can manage users
For my setup, partner and kids get auto-approve with quotas; housemates get a higher tier with approval required for 4K content. The quota system is the single best feature for managing expectations — it stops the occasional "I just added 40 things to the list" enthusiasm that fills your storage overnight.
Notifications
Jellyseerr's notification system is the other underrated feature. Every request event (created, approved, available, declined, failed) can fire notifications to multiple channels. For a household, the useful ones are:
- Per-user email when their specific request becomes available
- Admin Discord webhook for all new requests (so you can intervene)
- Admin email when a request fails (indexer problems, import failure)
I pipe admin alerts to an ntfy topic that goes to my phone. That's how I find out about Radarr issues without logging in.
Integration with reverse proxies
If you're exposing Jellyseerr publicly via Cloudflare Tunnel, Tailscale, or a reverse proxy, there's one gotcha: Jellyseerr enforces strict CSRF checks and needs the HOSTNAME environment variable set correctly when behind a proxy. For Caddy:
requests.example.com {
reverse_proxy 10.0.0.5:5055 {
header_up Host {http.request.host}
header_up X-Real-IP {http.request.remote}
}
}
For Nginx Proxy Manager, enable the "Websocket Support" toggle — Jellyseerr uses WebSockets for real-time status updates on the homepage.
When not to use Jellyseerr
Jellyseerr adds another moving part. If you're the only user of your media server, you don't need it. If you already have a workflow with Ombi (the older, heavier alternative), Jellyseerr isn't dramatically better feature-for-feature — but it's faster, has a nicer UI, and is more actively maintained.
The one real gap: Jellyseerr doesn't handle music requests. If you want request management for Lidarr, you'll need a separate tool (or Ombi, which supports Lidarr).
Backup strategy
The config/ directory contains a SQLite database with all requests, user accounts, and settings. Back it up nightly — rebuilding user permissions and notification rules from scratch is painful. restic or borgbackup pointed at the config volume is enough.
Final verdict
For a family media server, Jellyseerr collapses "download dispatcher" into "occasional administrator." Your users browse, request, and get notified. You approve exceptions and watch the stack work. If you run Jellyfin or Plex with the *arr stack, the 10-minute Docker Compose install has one of the highest quality-of-life payoffs in the self-hosted ecosystem.
