If you've spent any time in the self-hosting community, you've probably heard whispers about "the Arr stack." Maybe you've seen screenshots of perfectly organized media libraries with automatic downloads, subtitle fetching, and quality upgrades happening while the owner sleeps. That's not magic. That's the Arr stack doing its thing.
I've been running this setup for years now, and after countless hours of tinkering, breaking things, and starting over, I've got it dialed in. This guide is everything I wish someone had told me when I started. No fluff, no assumptions that you already know what indexers are, just a straight path from zero to automated media nirvana.
What Exactly Is the Arr Stack?
The "Arr stack" is a collection of open-source applications that work together to automate your media library. The name comes from the shared naming convention: Sonarr, Radarr, Prowlarr, Bazarr, and others. Each handles a specific job, but they're designed to integrate seamlessly with each other.
Think of it like an assembly line for your media. You tell the system what you want, it finds it, downloads it, organizes it, and even grabs subtitles. All automatically. All without you lifting a finger after the initial setup.
Why is this the gold standard? Because it just works. Once configured, you can add a movie to your watchlist and wake up the next morning to find it sitting in your media server, properly named, with subtitles ready to go. That's the dream, and the Arr stack delivers.
Meet the Players
Before we dive into setup, let's get familiar with each component. Understanding what each app does will make configuration much easier.
Sonarr - The TV Show Manager
Sonarr handles TV series. You add a show, tell it what quality you want, and it monitors for new episodes. When one airs, Sonarr automatically searches your indexers, sends the download to your client, and imports the finished file into your library with proper naming. It can also upgrade existing episodes if a better quality release becomes available.
Radarr - The Movie Manager
Radarr is basically Sonarr for movies. Same concept, same interface philosophy, different media type. Add movies to your watchlist, set your quality preferences, and let it handle the rest. It's particularly nice for upcoming releases since you can add movies before they're available and Radarr will grab them when they appear.
Prowlarr - The Indexer Manager
Here's where things get clever. Prowlarr manages your indexers (the sources that the other apps search) and automatically syncs them to Sonarr, Radarr, and any other Arr apps you're running. Before Prowlarr existed, you had to add each indexer to each app manually. Now you add them once in Prowlarr and it handles the distribution. Trust me, this saves hours of tedious configuration.
Bazarr - The Subtitle Companion
Bazarr syncs with Sonarr and Radarr to automatically download subtitles for your media. If you watch anything in a foreign language or just prefer subtitles, this is essential. It searches multiple subtitle providers and can even handle hearing-impaired versions or specific languages for different shows.
Honorable Mentions
Lidarr does for music what Sonarr does for TV. Same interface, same automation, different media. Readarr handles ebooks and audiobooks. Whisparr manages... adult content, if that's your thing. The beauty of the ecosystem is that they all speak the same language and integrate the same way.
Prerequisites
Before we start, you'll need a few things in place.
A Server
This can be anything from an old laptop to a dedicated server. If you're just starting out, a VPS works great. I recommend Hetzner for European users (incredible value for money) or Vultr if you need locations closer to the US. For a basic Arr stack, 2GB of RAM and 2 CPU cores is enough to get started, though 4GB is more comfortable.
Docker
We'll be using Docker Compose for this setup. If you're not familiar with Docker, check out my Docker for self-hosting beginners guide first. Seriously, take 20 minutes to understand the basics. It'll save you countless headaches later.
Storage
You need somewhere to put your media. This could be local drives, a NAS, or cloud storage mounted to your system. Plan for growth here. Media libraries get big fast.
A Download Client
The Arr apps don't download anything themselves. They tell a download client what to grab. The two most popular options are:
- qBittorrent - For torrents. Free, open source, and has a great web interface.
- SABnzbd - For Usenet. If you're using newsgroups, this is the standard.
You can use both if you want to search both torrents and Usenet. I'll include qBittorrent in the Docker Compose below since it's the more common starting point.
The Docker Compose Setup
Here's a complete, working Docker Compose file that includes everything you need. Create a directory for your stack (I use /opt/media-stack) and save this as docker-compose.yml:
version: "3.8"
services:
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- ./config/sonarr:/config
- /data/media:/data/media
- /data/downloads:/data/downloads
ports:
- 8989:8989
restart: unless-stopped
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- ./config/radarr:/config
- /data/media:/data/media
- /data/downloads:/data/downloads
ports:
- 7878:7878
restart: unless-stopped
prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- ./config/prowlarr:/config
ports:
- 9696:9696
restart: unless-stopped
bazarr:
image: lscr.io/linuxserver/bazarr:latest
container_name: bazarr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- ./config/bazarr:/config
- /data/media:/data/media
ports:
- 6767:6767
restart: unless-stopped
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
- WEBUI_PORT=8080
volumes:
- ./config/qbittorrent:/config
- /data/downloads:/data/downloads
ports:
- 8080:8080
- 6881:6881
- 6881:6881/udp
restart: unless-stoppedA few things to note about this configuration:
- PUID and PGID - These should match the user that owns your media folders. Run
idin your terminal to find your values. - TZ - Set this to your timezone. Matters for scheduling and release time calculations.
- Volume paths - Adjust
/data/mediaand/data/downloadsto match your actual storage locations.
Start everything with:
docker compose up -dGive it a minute to pull images and start up, then you can access each service:
- Sonarr:
http://your-server:8989 - Radarr:
http://your-server:7878 - Prowlarr:
http://your-server:9696 - Bazarr:
http://your-server:6767 - qBittorrent:
http://your-server:8080
Configuration Walkthrough
Now comes the fun part: connecting all the pieces. The order matters here, so follow along.
Step 1: Set Up qBittorrent
First, access qBittorrent at port 8080. The default login is usually admin / adminadmin, but check the container logs if that doesn't work (newer versions generate a random password on first run).
Go to Settings > Web UI and change your password to something secure. Then go to Settings > Downloads and set your default save path to /data/downloads.
Step 2: Configure Prowlarr
Open Prowlarr and add your indexers. Go to Indexers > Add Indexer and search for your preferred sources. Each indexer will have different requirements, some need API keys, some need accounts.
If you're new to this, start with a couple of public indexers to get the hang of it. You can always add private trackers or Usenet indexers later.
Step 3: Connect Prowlarr to Your Apps
In Prowlarr, go to Settings > Apps. Click the plus button and add Sonarr:
- Name: Sonarr
- Sync Level: Full Sync
- Prowlarr Server:
http://prowlarr:9696 - Sonarr Server:
http://sonarr:8989 - API Key: (grab this from Sonarr's Settings > General)
Repeat for Radarr. Now whenever you add an indexer to Prowlarr, it automatically appears in your other apps. This is the magic of Prowlarr.
Step 4: Configure Sonarr
In Sonarr, you need to set up a few things:
Download Client: Go to Settings > Download Clients > Add > qBittorrent
- Host:
qbittorrent(the container name) - Port:
8080 - Username and password from earlier
Root Folder: Go to Settings > Media Management > Add Root Folder and set it to /data/media/tv
Quality Profiles: Check out Settings > Profiles. The defaults are sensible, but you might want to customize based on your storage and quality preferences. I personally use a modified "HD-1080p" profile that also accepts 720p as a fallback.
Step 5: Configure Radarr
Same process as Sonarr:
- Add qBittorrent as your download client
- Set root folder to
/data/media/movies - Adjust quality profiles to your liking
Step 6: Set Up Bazarr
In Bazarr, go to Settings > Sonarr and Settings > Radarr. Add each one with:
- Host:
sonarrorradarr(container names) - API Key: from each app's settings
Then go to Settings > Providers and add your subtitle sources. OpenSubtitles is the most popular, but you'll need a free account. Add a few providers for better coverage.
Finally, go to Settings > Languages and configure which languages you want and in what priority.
Tips and Gotchas
After running this stack for years, here's what I wish I knew from day one.
Folder Structure Matters
The single biggest source of problems I see is incorrect folder structure. Here's what works:
/data
├── downloads
│ ├── complete
│ └── incomplete
└── media
├── movies
└── tvThe key insight: your download folder and media folder should be on the same filesystem (or at least mounted that way in Docker). This allows the Arr apps to use hardlinks instead of copying files, which saves disk space and time.
Don't Use the Container's Internal Paths
When setting up download clients, use the container names (qbittorrent, sonarr) not localhost. Containers see localhost as themselves, not your host machine.
Check Your Permissions
If downloads complete but don't import, it's almost always a permissions issue. Make sure PUID/PGID are set correctly and that user owns your media directories:
sudo chown -R 1000:1000 /data/media /data/downloadsEnable Hardlinks
In Sonarr and Radarr, go to Settings > Media Management and make sure "Use Hardlinks instead of Copy" is enabled. This prevents duplicate files eating your storage.
Set Up Authentication
All these apps are accessible on your network by default. At minimum, go into each app's Settings > General and enable authentication. Better yet, put them behind a reverse proxy with proper SSL. Security matters, especially if you're exposing anything to the internet.
Going Further
Once your basic stack is running smoothly, there are some excellent additions to consider.
Overseerr or Jellyseerr
These apps provide a beautiful request interface for your media server. Instead of logging into Sonarr and Radarr directly, users can browse a Netflix-like interface, request movies and shows, and the requests automatically flow to your Arr stack. Jellyseerr is the Jellyfin-focused fork if you're not using Plex.
Tautulli
If you're running Plex, Tautulli gives you detailed statistics about who's watching what, when, and in what quality. It's fascinating (and slightly obsessive) to track your media server usage.
Connect to Your Media Server
The whole point of this automation is to feed a media server. Check out my guide on setting up Plex with Sonarr and Radarr if you haven't already. Jellyfin is also an excellent free and open-source alternative that I'll cover in a future guide.
Wrapping Up
The Arr stack transformed how I manage media. What used to be hours of manual searching, downloading, renaming, and organizing now happens automatically while I sleep. The initial setup takes an afternoon, but you'll save that time back within the first week.
Start simple. Get Sonarr, Radarr, and Prowlarr working first. Add Bazarr once you've got the basics down. Then expand to request apps and monitoring when you're ready. There's no rush, and it's easier to troubleshoot when you add things incrementally.
If you run into issues, the communities around these apps are incredibly helpful. Check the GitHub issues, Reddit's r/sonarr and r/radarr, or the official Discord servers. Chances are someone has already solved whatever problem you're facing.
Happy automating.