Jellyfin
Media ServersFree software media system for streaming your library
Replaces Plex, Emby
Streams your library to every device
Fully automated movie and TV pipeline from request to play.
The classic *arr stack automates an entire media pipeline: users request titles in Jellyseerr, Radarr and Sonarr manage movie and TV libraries, Prowlarr keeps indexers in sync across both, qBittorrent handles downloads, Bazarr fetches subtitles, and Jellyfin streams the result to every device. Each piece is replaceable, which is exactly why this combination became the default homelab media setup.
Free software media system for streaming your library
Replaces Plex, Emby
Streams your library to every device
Media request and discovery tool for Jellyfin and Plex
Replaces Plex Requests
Request portal for users
Movie collection manager for Usenet and BitTorrent users
Movie library automation
Series collection manager for Usenet and BitTorrent users
TV library automation
Complete management of your indexers for Radarr, Sonarr, Lidarr
Indexer manager for Radarr and Sonarr
Bittorrent client that aims to be a good alternative to all other
Replaces µTorrent
Download client
Automated subtitle downloading for Sonarr and Radarr
Automatic subtitles
Last reviewed Oct 11, 2026 · 648 words
The *arr stack works when every app agrees on one folder tree and breaks when they don't. Give qBittorrent, Sonarr, Radarr and Bazarr the same /data mount, deploy the download client first and the request portal last, and the whole seven-app pipeline fits in about 1,324 MB of RAM by the directory's estimates. Most of that is Jellyfin and Jellyseerr at 512 MB each; the automation apps in the middle are listed at 50 to 100 MB apiece.
Requests flow left to right, and every arrow is an API key pasted from one app's settings into another's.
Jellyseerr is the front door. Users sign in with their Jellyfin accounts, browse, and click request; Jellyseerr hands movies to Radarr and series to Sonarr. Those two hold the library logic: what is wanted, which quality profile applies, when to upgrade. They search for releases through indexers, and this is where Prowlarr earns its place. You add each indexer once in Prowlarr, register Sonarr and Radarr as applications there, and Prowlarr pushes the indexer list into both and keeps it in sync. Without it you maintain the same indexers twice.
When Sonarr or Radarr pick a release they send it to qBittorrent, usually tagged with a category per app so each one only imports its own downloads. After the download finishes, the *arr app imports, renames and files it into the library, then tells Jellyfin to rescan. Bazarr watches Sonarr and Radarr through their APIs and fetches subtitles for whatever lands. Jellyfin streams the result.
| Step | App | Why at this point |
|---|---|---|
| 1 | qBittorrent | Sonarr and Radarr need a client to test against |
| 2 | Prowlarr | Indexers must exist before the *arrs can search |
| 3 | Sonarr, Radarr | Add the client, then register both in Prowlarr |
| 4 | Bazarr | Reads its library list from Sonarr and Radarr |
| 5 | Jellyfin | Libraries point at the finished media folders |
| 6 | Jellyseerr | Needs Jellyfin for logins and the *arrs for requests |
The directory rates Radarr and Bazarr Medium and the other five Easy. Jellyfin's own transcoding and remote access questions are covered in the Jellyfin setup guide.
Because the download client and the arr apps see different mounts. If qBittorrent writes to /downloads and Radarr manages /movies as two separate volumes, the kernel cannot hardlink across them, so every import becomes a full copy and your disk briefly holds two of each file. The catalogue's own deploy note for both Sonarr and Radarr says it plainly: one shared /data mount for the arr app and the download client, with torrents and media as subfolders inside it. Then imports are instant hardlinks, seeding continues from the same blocks, and nothing doubles. This is the single most common mistake with this combination, and fixing it later means moving the whole library.
The related trap is path mismatch. If qBittorrent reports a file at one path and Sonarr expects another, imports fail silently. Use identical container paths everywhere rather than remote path mappings.
Only Jellyfin and Jellyseerr need to face users. Keep Sonarr, Radarr, Prowlarr, Bazarr and qBittorrent on the LAN or behind a VPN; they hold API keys to each other. If you proxy Jellyfin, enable websocket pass-through or the dashboard and SyncPlay break. Back up each app's /config folder, not the media: the configs hold your quality profiles, indexer list and request history, and they are small.
Lay out the /data tree before starting a single container, follow the order above, and wire Prowlarr to both arrs on day one. The arr stack explainer goes deeper on quality profiles, and Sonarr and Radarr are where most of your tuning time will go.