All apps · 0 apps
Livrarr
Docker app from grtgbln's Repository
Overview
Readme
View on GitHubLivrarr
Self-hosted ebook and audiobook library manager. Built for the *arr ecosystem — finds, grabs, and organizes your books the way Sonarr does for TV.
⚠️ Alpha software. Core workflows work. Rough edges exist. Feedback welcome.
Note: alpha4 and earlier used an OpenLibrary User-Agent that wasn't fully policy-compliant, which could cause OL lookups (search, enrichment, author monitor, cover backfill) to fail. alpha5 ships a compliant UA — run alpha5 or later. See Notes → OpenLibrary compliance for detail.
What it does
- Search any Torznab or Newznab indexer (Prowlarr, NZBHydra2, Jackett, or direct) for ebooks and audiobooks
- Grab via qBittorrent or SABnzbd (forthcoming: support for other clients)
- Import to your library with automatic file organization
- Enrich metadata from Hardcover, OpenLibrary, Google Books, and Audnexus
- Read in your browser with a built-in ebook reader and audiobook player
- Push to Calibre-Web Automated (CWA) or AudioBookShelf (ABS)
Design Philosophy
- Ebooks and audiobooks unified in a single instance — no separate installations
- No closed-source metadata proxy — all providers are open, pluggable, and federated
- Single container, single SQLite database — nothing else to manage
- AI-assisted metadata disambiguation when exact matches fail
Quick Start
1. Copy the compose file
services:
livrarr:
image: ghcr.io/kkodecs/livrarr:0.1.0-alpha5
container_name: livrarr
ports:
- 8789:8789
volumes:
- ./config:/config
- /path/to/books:/books
- /path/to/downloads:/downloads
restart: unless-stopped
2. Set permissions and start
mkdir config
sudo chown 1000:1000 config
docker compose up -d
3. Open the UI
Navigate to http://your-server:8789. You'll be prompted to create your admin account on first launch — no pre-seeding required.
4. Configure
Go to Settings and add:
- A root folder (where books land after import)
- A download client (qBittorrent or SABnzbd)
- At least one indexer (any Torznab/Newznab source: Prowlarr, NZBHydra2, Jackett, or direct indexer URL + API key)
Configuration
All settings live in the UI. Optionally create /config/config.toml for advanced options:
[server]
port = 8789 # internal port (map externally in compose)
bind_address = "0.0.0.0"
[log]
level = "info" # trace | debug | info | warn | error
Requirements
| Component | Required | Notes |
|---|---|---|
| Docker | Yes | Multi-arch image — linux/amd64 and linux/arm64 |
| qBittorrent or SABnzbd | Yes | Download client |
| Torznab or Newznab indexer | Yes | Prowlarr, NZBHydra2, Jackett, or direct feed |
| Hardcover API key | No | Better metadata — free at hardcover.app |
| LLM integration | No | Better search and metadata |
| Calibre-Web Automated | No | Downstream ebook delivery |
| AudioBookShelf | No | Downstream audiobook delivery |
Permissions
Livrarr runs as UID/GID 1000 inside the container. All mounted paths must be accessible by that user:
/config— must be writable (database, covers, config file)/books— must be writable (Livrarr moves files here on import)/downloads— must be readable (completed download directory)
If you're on a different UID, chown 1000:1000 the host directories before starting.
Download path mapping
Livrarr and your download client must see completed downloads at the same host path. Example:
- qBittorrent saves to
/mnt/data/downloadson the host - Mount that same path into both containers:
- /mnt/data/downloads:/downloads
/books and /downloads in the compose file are example container paths — you can rename them as long as you're consistent across all containers.
Alpha Limitations
- Multi-user partially implemented — additional users can log in but share admin indexers/clients. Treat as single-user for alpha.
- PUID/PGID not configurable — runs as UID/GID 1000 (fix in beta)
- Cover accuracy can still vary for some titles (especially Goodreads matches). A manual refresh usually fixes it.
Stack
Built in Rust (backend) + React (frontend). Ships as a single Docker image — no database sidecar, no separate web server. For full workflows you'll still need a download client and at least one indexer. Starts in under a second.
Notes
OpenLibrary compliance
Per OpenLibrary's published API policy, bulk clients must use a User-Agent that identifies the app and includes a contact (email or URL). alpha4 and earlier sent a UA with the app name but no contact field (Livrarr/0.1.0-alpha4), which OL flagged as non-compliant bulk traffic — this could cause OpenLibrary search, enrichment, author monitor, and cover backfill to fail. The gap is tracked in #83.
alpha5 ships a fully policy-compliant UA (app name + version + contact email + contact URL), which also earns OL's higher rate limit (3 req/s vs 1 req/s). If you're on an older build, upgrade:
docker compose pull livrarr && docker compose up -d
Community
- Discord: Join the Livrarr Discord — help, discussion, feature requests
- GitHub Issues: Report bugs or request features
License
GPLv3
Install Livrarr on Unraid in a few clicks.
Find Livrarr in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
Related apps
Explore more like this
Explore allDetails
ghcr.io/kkodecs/livrarr:0.1.0-alpha5Runtime arguments
- Web UI
http://[IP]:[PORT:8789]/- Network
bridge- Privileged
- false
Template configuration
Container Port: 8789
- Target
- 8789
- Default
- 8789
- Value
- 8789
Path to books storage
- Target
- /books
Path to downloads storage
- Target
- /downloads
Path to the config data
- Target
- /config
- Default
- /mnt/user/appdata/livrarr/config
- Value
- /mnt/user/appdata/livrarr/config