Open-source alternatives guide
How to Self-Host Audiobookshelf 2026
Self-host Audiobookshelf in 2026. GPL 3.0, ~7K stars — self-hosted audiobook and podcast server with iOS/Android apps, progress sync, and Audible metadata.
TL;DR
Audiobookshelf (GPL 3.0, ~7K GitHub stars) is the go-to self-hosted audiobook and podcast server. It streams your MP3/M4B audiobook collection and podcast RSS feeds to the official iOS and Android apps, syncing playback position across all your devices. Audible charges $14.95/month for 1 credit. Audiobookshelf serves your own purchased and downloaded audiobook collection for free — no DRM restrictions, no monthly limits.
Key Takeaways
- Audiobookshelf: GPL 3.0, ~7K stars — audiobooks + podcasts in one server
- Dedicated mobile apps: iOS and Android apps with offline downloads and progress sync
- M4B/MP3: Handles both single-file audiobooks (M4B) and multi-part (one MP3 per chapter)
- Chapter markers: Automatically detects or creates chapter markers in M4B files
- Podcast manager: Subscribe to podcast RSS feeds, auto-download new episodes
- Audible metadata: Fetches metadata (cover, description, narrator) from Audible/Google
Part 1: Docker Setup
# docker-compose.yml
services:
audiobookshelf:
image: ghcr.io/advplyr/audiobookshelf:latest
container_name: audiobookshelf
restart: unless-stopped
ports:
- "13378:80"
volumes:
- /path/to/audiobooks:/audiobooks # Audiobook library
- /path/to/podcasts:/podcasts # Podcast library
- audiobookshelf_config:/config
- audiobookshelf_metadata:/metadata # Cover images, metadata cache
environment:
TZ: America/Los_Angeles
volumes:
audiobookshelf_config:
audiobookshelf_metadata:
docker compose up -d
Visit http://your-server:13378 → create root account on first visit.
Part 2: HTTPS with Caddy
audio.yourdomain.com {
reverse_proxy localhost:13378
}
Part 3: Audiobook Library Structure
Audiobookshelf reads folder structure to identify books:
Single-author, single-book
/audiobooks/
├── Brandon Sanderson/
│ ├── The Way of Kings/
│ │ ├── The Way of Kings.m4b ← Single-file audiobook (preferred)
│ │ └── cover.jpg ← Custom cover (optional)
│ └── Words of Radiance/
│ ├── Words of Radiance.m4b
└── Andy Weir/
└── The Martian/
├── The Martian Part 01.mp3 ← Multi-part audiobook
├── The Martian Part 02.mp3
└── The Martian Part 03.mp3
Series (with series metadata)
/audiobooks/
└── Discworld/
├── 01 - The Colour of Magic.m4b
├── 02 - The Light Fantastic.m4b
└── 03 - Equal Rites.m4b
Part 4: Add Libraries
- Settings → Libraries → + Add library
- Type: Books (for audiobooks) or Podcast
- Folder:
/audiobooksor/podcasts - Scan → Audiobookshelf finds all books
Metadata scan
After adding:
- Select all books → Fetch metadata
- Audiobookshelf queries Audible, Google Books, Open Library
- Fetches: cover art, description, narrator, series info, publish date
Part 5: iOS / Android Apps
iOS
- Install Audiobookshelf from App Store
- Connect to Server →
https://audio.yourdomain.com - Log in
- Browse library, tap book → Play
Features:
- Background audio with system controls
- Offline downloads (download book → listen without server access)
- Sleep timer
- Chapter navigation
- Playback speed (0.5x — 3x)
- Progress sync with server
Android
- Install from Google Play
- Same setup process
Part 6: Podcast Subscriptions
Audiobookshelf manages podcasts with auto-download:
Add a podcast
- Podcasts library → + Add Podcast
- Search by name:
"Darknet Diaries","99% Invisible", etc. - Or paste RSS URL:
https://feeds.simplecast.com/podcast.rss
Auto-download settings
Per podcast:
- Auto-download new episodes: Yes
- Download last N episodes: 3
- Auto-delete after listening: Yes
Episode management
Podcasts/
└── Darknet Diaries/
├── episode-001.mp3 ← downloaded
├── episode-002.mp3 ← downloaded
└── metadata.json ← episode list, descriptions
Part 7: Audible DRM Removal (Personal Use)
If you have DRM-free audiobooks or have legitimately stripped DRM from your own purchased books:
# AAX (Audible format) → M4B conversion using your activation bytes:
# First: get your activation bytes from Audible (requires your account credentials)
# Install AAXtoMP3:
docker run --rm -v /path/to/aax:/aax -v /path/to/output:/output \
kaczmarkiewiczp/aaxtomp3:latest \
/aax/your-book.aax \
-b your-activation-bytes \
-o /output \
--m4b
# The resulting .m4b file drops into your audiobooks folder
# Audiobookshelf picks it up automatically
Note: Only do this with audiobooks you've purchased. DRM removal is legal in many jurisdictions for personal use of legitimately purchased content.
Part 8: Multi-User and Reading Progress
Users
- Settings → Users → + Create user
- Username, password
- Permissions: Can access library, can download, etc.
Reading statistics
Per user:
- Total listening time
- Books started/finished
- Streaks and progress over time
Progress bookmarks
Audiobookshelf saves:
- Current position (to the second)
- Chapters completed
- Speed preference per book
- Notes/bookmarks at timestamps
All synced across web UI and mobile apps.
Maintenance
# Update:
docker compose pull
docker compose up -d
# Backup:
tar -czf audiobookshelf-backup-$(date +%Y%m%d).tar.gz \
$(docker volume inspect audiobookshelf_audiobookshelf_config --format '{{.Mountpoint}}') \
$(docker volume inspect audiobookshelf_audiobookshelf_metadata --format '{{.Mountpoint}}')
# Rebuild library cache (if metadata is wrong):
# Settings → Libraries → Scan and Match
# Logs:
docker compose logs -f audiobookshelf
Why Self-Host Audiobookshelf
Audible charges $14.95/month for a plan that gives you one credit — enough for one audiobook. A moderate listener who finishes two or three audiobooks per month is spending $30–45 on purchases beyond their subscription. Over a year that's $180 in Audible subscription fees alone, before buying extra credits. Audiobookshelf lets you serve your existing DRM-free audiobook collection — whether purchased from Libro.fm, downloaded from Librivox, or converted from your own CDs — to every device you own for the cost of a small VPS.
Podcast apps are another subscription target. Pocket Casts charges $3.99/month for its premium tier. Overcast Premium is $9.99/year. Audiobookshelf replaces both: it subscribes to any podcast RSS feed, auto-downloads new episodes, and streams them to the same iOS/Android app you use for your audiobooks. One app, one server, no subscriptions.
The data ownership argument is particularly strong for personal media. Audible has discontinued titles, changed terms, and in some regions revoked user access to purchased content when licenses changed. When you own the files and serve them yourself, none of that applies. Your collection is yours indefinitely. The files are on your hardware, playable locally without network access, and not subject to licensing renegotiations between publishers and platforms.
Multi-user support is another advantage that Audible doesn't provide. Audiobookshelf lets you create separate user accounts with individual progress tracking, bookmarks, and listening statistics. Each person in a household gets their own experience — separate playback positions, separate favorites, separate listening history — without paying per-seat fees. Family or housemate sharing is built in and free.
When NOT to self-host Audiobookshelf. If you don't own a significant library of DRM-free audiobooks, Audiobookshelf doesn't help you acquire content — it only serves what you already have. Audible's catalog of 750,000+ titles is hard to replicate. If discovery and access to new releases is your primary need, Audible or Libro.fm with a good podcast app may be the better path. Audiobookshelf is for people who have already built a library and want to access it everywhere.
Prerequisites
Audiobookshelf is one of the lightest self-hosted media servers available. It's a single Node.js container with no external database — metadata and progress are stored in SQLite files on disk. A Hetzner CX22 (2 vCPU, 4GB RAM) at €4.50/month is more than enough, and honestly even a CX11 (2GB RAM) handles it fine for a few simultaneous users. The limiting factor is usually disk space, not compute. See the VPS comparison guide for options that include large SSD allocations.
Disk planning: a typical audiobook in M4B format runs 300MB–600MB. A library of 200 books requires 60–120GB of storage. Most VPS providers offer additional volumes you can mount. On Hetzner, a 100GB volume costs €4.39/month; on Contabo or OVH you can get 200–400GB included in the base plan.
Docker Engine 24+ and Docker Compose v2 are required. The Audiobookshelf container runs as a specific UID — the compose file includes a user: parameter that should match your host's media directory owner to avoid permission errors on the mounted volumes.
DNS: point an A record (e.g., audio.yourdomain.com) to your VPS. Caddy handles HTTPS automatically. The server needs port 80 and 443 open for the ACME certificate challenge.
Production Security Hardening
Audiobookshelf exposes your personal media library, so keeping it locked down matters. At minimum, use a strong admin password — the initial setup screen lets you create the root account, but it's unauthenticated until you do, so complete setup immediately after first launch.
UFW firewall. Restrict all ports except SSH, HTTP, and HTTPS:
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
Port 13378 (Audiobookshelf's direct port) should not be publicly accessible. All traffic should flow through Caddy on 443.
Fail2ban. Protect the login endpoint from brute-force:
apt install fail2ban -y
systemctl enable fail2ban
systemctl start fail2ban
Secrets in environment variables. The Audiobookshelf container doesn't require application-level secrets (no secret key to generate), but keep your .env file readable only by root:
chmod 600 .env
SSH hardening. Disable root login and password authentication, use SSH keys only:
# /etc/ssh/sshd_config
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
systemctl restart sshd
Automatic OS updates. Audiobookshelf updates itself via Docker pulls, but the underlying OS needs patching too:
apt install unattended-upgrades -y
dpkg-reconfigure --priority=low unattended-upgrades
Backup your library metadata. The config and metadata volumes contain all your progress, bookmarks, and cover art. Losing them means re-scanning your entire library from scratch. Schedule regular backups — the automated backup guide covers using Restic to back up Docker volumes to S3-compatible storage. For Audiobookshelf, back up both audiobookshelf_config and audiobookshelf_metadata volumes, plus your audiobook directory if it's on the same host.
For a complete hardening checklist, see the self-hosting security checklist.
Troubleshooting Common Issues
Books not appearing after adding the library. Audiobookshelf expects a specific folder structure to detect books correctly. Each book should be in its own subfolder inside the library root — a flat list of MP3 files in the root directory will not be detected. Use the structure Author/Book Title/ for best results. After fixing the structure, trigger a manual scan from Settings → Libraries → Scan.
Progress not syncing between app and web player. Progress sync requires the mobile app to be connected to the server (not in offline mode) and for the server URL to be reachable. If you're using a VPN or split-tunnel setup, confirm the app can reach your Audiobookshelf domain over your current network. Check the app's server connection status in Settings.
Cover art missing after metadata scan. Audiobookshelf fetches covers from Audible, Google Books, and Open Library. If your books have unusual titles or are obscure, automatic matching may fail. You can manually set covers: select the book → Edit → Upload Cover. Or place a cover.jpg file directly in the book's folder — Audiobookshelf will pick it up automatically on the next scan.
Container exits immediately on startup. Check logs with docker compose logs audiobookshelf. The most common cause is a volume permissions mismatch. The container runs as UID 1000 by default. If your mounted audio directories are owned by a different user, the container can't read them. Fix with chown -R 1000:1000 /path/to/audiobooks.
High CPU usage during library scan. Initial library scans on large collections (500+ books) are CPU-intensive because Audiobookshelf reads audio file metadata, extracts chapter info, and caches duration data. This is a one-time cost per library scan. Let it finish overnight if needed — normal playback operation is very lightweight.
iOS/Android app can't connect to server. Ensure you're using https:// and not http:// in the server URL field. The mobile app requires HTTPS for API communication. If you see a certificate error, verify Caddy obtained a valid certificate by visiting the URL in your browser first.
Podcast episode downloads failing. Audiobookshelf downloads podcast episodes directly from the RSS feed's audio URLs. If episode downloads are failing, check whether the podcast feed requires authentication or is geo-restricted. Some enterprise podcast platforms (Spotify for Podcasters, for example) have moved to authenticated feeds that require a logged-in session. For public RSS feeds, the most common cause of download failures is temporary server-side rate limiting from the podcast host — the downloads will usually succeed on retry.
Audio files show incorrect duration. For MP3 files with variable bitrate encoding, the duration shown in Audiobookshelf may be estimated rather than exact on initial scan. Audiobookshelf refines duration data after playback. This is cosmetic only and doesn't affect actual playback. For M4B files, duration is embedded in the file metadata and is always accurate.
Sleep timer not working correctly on iOS. The sleep timer in the Audiobookshelf iOS app requires Background App Refresh to be enabled for the app in iOS Settings. If sleep timer stops playback immediately instead of at the chapter end, check that Background App Refresh is on. The "end of chapter" sleep timer option works by detecting chapter markers — books without proper chapter metadata will use a time-based estimate instead.
Container using more memory over time. Audiobookshelf's memory usage can grow as the metadata cache fills. The metadata volume stores cached cover images and description data for every book. On large libraries (1000+ books with covers), this can reach several gigabytes. This is expected behavior, not a leak. If memory is a concern, periodically clear the metadata cache from Admin → Tools → Database → Clean Database, which removes orphaned metadata entries.
See all open source audiobook and media tools at OSSAlt.com/categories/media.
The SaaS-to-Self-Hosted Migration Guide (Free PDF)
Step-by-step: infrastructure setup, data migration, backups, and security for 15+ common SaaS replacements. Used by 300+ developers.
Join 300+ self-hosters. Unsubscribe in one click.