Chaptarr
Readarr was archived in June 2025 after its metadata backend went offline for good, which left books as the one gap in an otherwise complete *arr stack. Chaptarr fills it: same idea, same UI conventions, but built for audiobooks and ebooks from the start.
Chaptarr is an audiobook and ebook collection manager.
- Audiobooks and ebooks in one instance — no more running two Readarrs side by side
- Narrator-aware — tells two readings of the same book apart, which general-purpose managers ignore
- Multi-provider metadata — resolves books across several sources and aggregates by consensus, so one dead API cannot take it down the way it did Readarr
- MP3 → M4B conversion with chapters preserved
- Series handling, renaming and quality upgrades — the usual *arr feature set
- SQLite by default, optional external PostgreSQL
Prerequisites
- The media stack layout — Chaptarr slots into it like Sonarr or Radarr
- A download client: qBittorrent or SABnzbd
- Prowlarr for indexers
1. The container
Upstream's example mounts /audiobooks, /ebooks and /downloads separately. Don't — separate mounts break hardlinks, exactly as they would for Radarr. Use the single /data mount like the rest of the stack:
chaptarr:
image: chaptarr/chaptarr:latest
container_name: chaptarr
restart: unless-stopped
environment:
- PUID=99
- PGID=100
- UMASK=022
- TZ=Europe/London
volumes:
- /mnt/user/appdata/chaptarr:/config
- /mnt/user/data:/data
ports:
- 8789:8789
Create the config directory first, or Docker creates it as root:root and Chaptarr cannot write to it:
sudo mkdir -p /mnt/user/appdata/chaptarr
sudo chown 99:100 /mnt/user/appdata/chaptarr
mkdir -p /mnt/user/data/media/{audiobooks,books}
docker compose up -d chaptarr
2. Authentication and API key
http://<host-ip>:8789. Set up authentication on first run, then copy the API key from Settings → General — Prowlarr needs it.
3. Root folders
Settings → Media Management → Root Folders → Add one per media type:
/data/media/audiobooks/data/media/books
Start with a small folder if you are importing an existing library. Matching books is harder than matching films, and it is much easier to fix a bad match on twenty titles than on two thousand.
4. Download clients
Settings → Download Clients → +:
| Field | qBittorrent | SABnzbd |
|---|---|---|
| Host | qbittorrent |
sabnzbd |
| Port | 8080 |
8080 |
| Auth | WebUI user/pass | API key |
| Category | books |
books |
Host is the container name, never localhost. Inside the Chaptarr container, localhost is Chaptarr itself. Both containers must be on the same Docker network.
Create the books category in the client too, or downloads land in the wrong folder and never import.
5. Indexers
Chaptarr speaks the standard arr indexer protocol. In Prowlarr, Settings → Apps → +* and check whether your Prowlarr version lists Chaptarr. If it does, give it http://chaptarr:8789 and the API key and Prowlarr pushes indexers across like it does for Sonarr.
If it does not, add indexers in Chaptarr directly (Settings → Indexers → +, Torznab/Newznab) using each indexer's Prowlarr proxy URL.
Make sure your indexers actually carry book categories. Most general trackers have few audiobooks; this is where private trackers matter.
6. Coming from Readarr
There is no import path. Quality profiles, naming and settings have to be rebuilt by hand. The files themselves are fine — point a root folder at the existing library and let Chaptarr match them.
Updating
Chaptarr is new. Pin a version tag once your library is in it, and back up before upgrading.
Backup
docker compose stop chaptarr
sudo tar czf /mnt/user/backups/chaptarr-$(date +%F).tar.gz -C /mnt/user/appdata chaptarr
docker compose start chaptarr
Stop it first — SQLite.
Privacy note
Metadata lookups go to Chaptarr's own service at api2.chaptarr.com. Requests can include search text, provider IDs, tags and filenames, but not full paths or credentials. Worth knowing if that matters to you.
Troubleshooting
Permission denied on /config. The directory was created by Docker as root. chown 99:100 it (or your PUID:PGID).
Download client test fails. Host is set to localhost, or the two containers are not on the same network. docker network inspect <network> and check both are listed.
Imports copy instead of hardlink. Downloads and library are on different mounts. See the media stack page.
Downloads complete but do not import. Category mismatch between Chaptarr and the client, or permissions on /data.
Wrong edition or narrator matched. Edit the book and pick the correct edition manually; then rename.