The Arr Stack: Sonarr, Radarr, Prowlarr, and Jellyseerr Explained
The "Arr stack" is a collection of tools that work together to automate media library management. Each tool handles a specific part of the pipeline: finding content, downloading it, organizing it, and serving it. The name comes from the shared naming convention — Sonarr, Radarr, Lidarr, Prowlarr — all ending in "arr."
If you're already running Jellyfin or Plex for media playback, the Arr stack is the automation layer that keeps your library organized and up to date. Instead of manually finding, downloading, renaming, and sorting media files, the Arr tools handle the entire workflow.

The Stack at a Glance
| Tool | Purpose | What it manages |
|---|---|---|
| Prowlarr | Indexer manager | Manages and syncs indexers to all other Arr apps |
| Sonarr | TV show manager | Monitors, downloads, and organizes TV series |
| Radarr | Movie manager | Monitors, downloads, and organizes movies |
| Lidarr | Music manager | Monitors, downloads, and organizes music |
| Readarr | Book manager | Monitors, downloads, and organizes ebooks/audiobooks |
| Jellyseerr/Overseerr | Request manager | Lets users request content through a clean interface |
| Bazarr | Subtitle manager | Automatically downloads subtitles for your media |
You don't need all of them. Most people start with Prowlarr + Sonarr + Radarr and add others as needed.
How They Work Together
The workflow flows like this:
- Prowlarr connects to indexers (sources that list available content) and shares them with Sonarr/Radarr/Lidarr.
- Sonarr/Radarr search those indexers when new content is available or when you add something to your wanted list.
- When a match is found, Sonarr/Radarr send it to a download client (typically qBittorrent, Transmission, SABnzbd, or NZBGet).
- Once downloaded, Sonarr/Radarr automatically rename and organize the files into your media library's folder structure.
- Jellyfin or Plex picks up the new files and makes them available for playback.
- Jellyseerr provides a user-friendly interface where family members can request movies or shows without needing access to Sonarr/Radarr.
Deploying the Core Stack
Here's a Docker Compose setup for the essential components:
services:
prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
restart: unless-stopped
ports:
- "9696:9696"
volumes:
- ./prowlarr:/config
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
restart: unless-stopped
ports:
- "8989:8989"
volumes:
- ./sonarr:/config
- /data/media/tv:/tv
- /data/downloads:/downloads
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
restart: unless-stopped
ports:
- "7878:7878"
volumes:
- ./radarr:/config
- /data/media/movies:/movies
- /data/downloads:/downloads
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
jellyseerr:
image: fallenbagel/jellyseerr:latest
container_name: jellyseerr
restart: unless-stopped
ports:
- "5055:5055"
volumes:
- ./jellyseerr:/app/config
environment:
- TZ=America/New_York
Setting Up Prowlarr
Prowlarr is the central hub for indexers. Instead of configuring indexers in each Arr app separately, you configure them once in Prowlarr and sync to everything else.
- Open Prowlarr (port 9696) and go to Settings → Apps.
- Add Sonarr and Radarr as applications — you'll need their API keys (found in each app under Settings → General).
- Go to Indexers and add your indexer sources.
- Prowlarr automatically syncs the indexers to Sonarr and Radarr.
When you add or remove indexers in Prowlarr, the changes propagate to all connected Arr apps automatically.
Configuring Sonarr and Radarr
Both work similarly. The key configuration areas:
Root Folders
Tell Sonarr/Radarr where your media library lives:
- Sonarr:
/tv(mapped to your TV shows directory) - Radarr:
/movies(mapped to your movies directory)
Quality Profiles
Define what quality level you want. Common profiles:
- Any: Accept whatever's available first.
- HD-720p/1080p: Standard HD quality. Good balance of quality and file size.
- HD-1080p: Only 1080p. Larger files but consistent quality.
- Ultra-HD: 4K when available. Large files (30-80 GB per movie).
Download Clients
Connect your download client under Settings → Download Clients. Add qBittorrent, Transmission, or your preferred client with its URL and credentials.
Naming
Configure how files get renamed under Settings → Media Management. A common naming scheme:
For TV shows:
{Series TitleYear} - S{season:00}E{episode:00} - {Episode CleanTitle} [{Quality Full}]
Produces: Breaking Bad (2008) - S01E01 - Pilot [Bluray-1080p]
For movies:
{Movie CleanTitle} ({Release Year}) [{Quality Full}]
Produces: Inception (2010) [Bluray-1080p]
Jellyseerr for Requests
Jellyseerr gives your household a Netflix-like interface for requesting content. Family members browse, search, and request — without needing to know how Sonarr or Radarr work.
After deploying Jellyseerr:
- Connect it to your Jellyfin (or Plex) server for authentication and library scanning.
- Connect it to Sonarr and Radarr so requests automatically create entries.
- Users sign in with their Jellyfin accounts and can request movies or TV shows.
- You can set up auto-approval or manually approve each request.
Folder Structure
A clean folder structure prevents headaches. The recommended approach uses a single /data root with separate directories:
/data/
├── downloads/
│ ├── complete/
│ └── incomplete/
├── media/
│ ├── movies/
│ ├── tv/
│ ├── music/
│ └── books/
Mount this same /data directory into all containers. This allows Sonarr/Radarr to use "hardlinks" or "atomic moves" instead of copying files — which is much faster and doesn't use extra disk space.
The key principle: all Arr apps and your download client should see the same file paths. If your download client saves to /data/downloads/complete and Sonarr sees the same path, it can instantly move files without copying.
Bazarr for Subtitles
Bazarr automatically downloads subtitles for your media. It connects to Sonarr and Radarr to know what's in your library, then searches subtitle providers for matches.
bazarr:
image: lscr.io/linuxserver/bazarr:latest
container_name: bazarr
restart: unless-stopped
ports:
- "6767:6767"
volumes:
- ./bazarr:/config
- /data/media/movies:/movies
- /data/media/tv:/tv
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
Configure subtitle providers (OpenSubtitles is the most popular) and language preferences. Bazarr downloads subtitles automatically when new media appears and can also backfill subtitles for your existing library.
Tips for a Smooth Setup
Start with Prowlarr. It eliminates the most tedious part of setup — configuring indexers across multiple apps.
Get file permissions right early. All containers should run with the same PUID/PGID, and the media directories should be writable by that user. Permission issues are the number one source of "it found and downloaded but didn't import" problems.
Use the same base path everywhere. If Sonarr sees
/data/media/tvand Radarr sees/data/media/movies, keep those paths consistent in Docker volumes. Don't map/mnt/nas/televisionin one container and/media/tvin another for the same directory.Set up quality profiles before adding content. It's easier to define what you want upfront than to re-download everything later.
Don't add your entire want-list on day one. The Arr apps will search for everything simultaneously, which can overwhelm indexers and your internet connection. Add content gradually.
The Arr stack has a reputation for being complex, and the initial setup does take some time. But once it's running, it's remarkably hands-off. New episodes download automatically, movies organize themselves, and your library stays clean and consistent.