Why Jellyfin and Sonarr Belong Together
Jellyfin is a free, open-source media server that lets you stream your personal TV and movie library to any device on your network – or remotely, if you configure it that way. On its own, it does the streaming job well. But getting new TV episodes into your library still requires manual work unless you pair it with something that automates the download and organization side. That is where Sonarr comes in.
Sonarr monitors RSS feeds from indexers, grabs new episodes automatically when they air, and deposits them into a folder structure that Jellyfin can read. Together, the two tools create a hands-off pipeline: a show airs, Sonarr downloads it, Jellyfin picks it up, and it is ready to stream within minutes. Setting this up correctly requires some patience, but once it is running, the system largely manages itself.

Step 1 – Install Jellyfin
Jellyfin runs on Linux, Windows, macOS, and inside Docker containers. For most home server setups, the Docker approach is the cleanest because it keeps Jellyfin isolated from the rest of your system and simplifies updates. If you already run Docker, pull the official Jellyfin image and map a host port – typically port 8096 – to the container. You will also need to bind-mount at least two directories: one for Jellyfin’s configuration data and one for your media library. That media directory is the shared space where Sonarr will eventually deposit downloaded files, so choose a path that is easy to reference across both applications.
Once the container is running, open a browser and navigate to http://localhost:8096. The setup wizard walks you through creating an admin account, selecting your server language, and adding your first media library. Choose the “Shows” library type, point it at the media folder you mounted, and let Jellyfin do its initial scan. At this stage the folder will likely be empty, but the library needs to exist before you integrate it with Sonarr’s output. After the wizard completes, take a moment to enable remote access under Settings > Networking if you plan to stream outside your home network.
Step 2 – Install and Configure Sonarr
Sonarr also runs neatly inside Docker. Pull the Sonarr image – the linuxserver/sonarr image is the most actively maintained option – and expose it on port 8989. As with Jellyfin, you need two bind mounts: one for Sonarr’s configuration directory and one for the TV download destination. This second mount must point to the exact same path that Jellyfin is watching. If your media folder on the host is /data/tv, both containers need to see that path identically. Path mismatches are the single most common reason this setup fails silently.
Open Sonarr at http://localhost:8989 and navigate to Settings > Media Management. Enable “Rename Episodes” and configure the naming format to match Jellyfin’s preferred convention. A format like Series Title/Season 01/Series Title – S01E01 – Episode Title keeps things organized and ensures Jellyfin can match episodes to metadata correctly. Sonarr’s default naming templates are close to ideal, but double-check that season folders are enabled – without them, Jellyfin’s library scanner struggles to assign episodes to the right seasons.
Next, go to Settings > Download Clients and add the download client you plan to use. Sonarr supports a wide range of clients, including qBittorrent, Transmission, NZBGet, and SABnzbd. Fill in the host, port, and credentials for whichever client you have running, then hit the test button to confirm the connection. Sonarr communicates directly with the download client to monitor progress and move completed files to the correct library folder automatically. If you see a green checkmark, the connection is solid.
After connecting your download client, add at least one indexer under Settings > Indexers. Indexers are the sources Sonarr queries to find episode releases. Public indexers are an option if your region allows it, but private trackers or Usenet indexers typically offer faster and more reliable results. If you use a meta-indexer like Prowlarr, you can manage all your indexers from a single interface and sync them to Sonarr automatically, which cuts down on redundant configuration across multiple apps.

Step 3 – Connect Sonarr to Jellyfin
Sonarr can notify Jellyfin to refresh its library the moment a new episode is downloaded. This is handled through Sonarr’s notification system. Go to Settings > Connect, click the plus icon, and select “Emby” from the list – Jellyfin uses the same API protocol as Emby, so this option works directly. Enter your Jellyfin server URL, then paste in your Jellyfin API key, which you can find under Jellyfin Dashboard > Advanced > API Keys. Generate a new key if one does not already exist.
Enable the “On Download” and “On Upgrade” triggers so that every time Sonarr deposits or replaces a file, Jellyfin immediately scans for changes. Without this connection, Jellyfin would only discover new episodes when it runs its scheduled library scan, which could mean a delay of hours. With the webhook active, new content appears in Jellyfin almost the moment Sonarr finishes moving the file. Test the connection from within Sonarr before saving – a successful test sends a ping to Jellyfin and confirms that authentication is working.
Step 4 – Add Shows and Test the Pipeline
With everything connected, add a TV series inside Sonarr by clicking Series > Add New and searching for a show by name. Sonarr pulls metadata from TVDB, so most shows populate automatically. Before saving, pay attention to the root folder path – it must point to the same media directory you configured earlier. You can also set a quality profile here, which tells Sonarr whether to prefer 1080p, 4K, or a lower resolution depending on your storage and bandwidth constraints.
After adding a series, go to the series page and click Search All to trigger an immediate hunt for existing episodes. Sonarr sends the query to your indexers, the download client picks up the result, and once the download finishes, Sonarr moves the file into the correct folder. Open Jellyfin and wait about 30 seconds – if the webhook is configured correctly, the episode should appear in your library without any manual refresh. This first successful pass confirms that every piece of the chain is talking to the others properly.
One detail worth getting right early on is Sonarr’s quality profile cutoff. The cutoff setting tells Sonarr when to stop looking for a better version of an episode. If you set a cutoff of 1080p Bluray and Sonarr grabs a 720p WEB release first, it will keep searching for an upgrade until it finds a 1080p Bluray copy and then replace the file automatically. Jellyfin will reflect that upgrade after the next webhook fires. Setting the cutoff too high – for example, requiring 4K Remux for everything – can leave gaps in your library for niche shows where those release types simply do not exist.





