Install via docker compose

# docker-compose.yml
services:
  audiobookshelf:
    image: ghcr.io/advplyr/audiobookshelf:latest
    container_name: audiobookshelf
    restart: unless-stopped
    user: "1000:1000"          # match the owner of your media files
    ports:
      - "127.0.0.1:13378:80"
    volumes:
      - ./config:/config
      - ./metadata:/metadata
      - /mnt/media/audiobooks:/audiobooks:ro
      - /mnt/media/podcasts:/podcasts
      - /mnt/media/ebooks:/ebooks:ro
    environment:
      TZ: "America/Toronto"
docker compose up -d
docker compose logs -f audiobookshelf

Reverse proxy

# Caddy
audiobooks.example.com {
    reverse_proxy 127.0.0.1:13378
    request_body { max_size 5GB }
}

Set the SERVER_URL in Audiobookshelf settings to the public URL so the mobile apps can connect from outside the LAN.

First-run setup

Browse to http://<host>:13378:

  1. Create the root user (becomes admin).
  2. Add libraries:
    • Type: Books → Folder: /audiobooks → Match: Audible / Google Books
    • Type: Podcasts → Folder: /podcasts
    • Type: Books → Folder: /ebooks (treated as ePub library)
  3. Click "Scan" — Audiobookshelf reads metadata from filenames + embedded ID3 tags, fetches cover art and book descriptions from the configured providers.

Library file layout

Audiobookshelf parses metadata from filenames. The conventions:

# Audiobooks: one folder per book
audiobooks/
    Andy Weir/
        The Martian/
            01 - The Martian.m4b
            cover.jpg                       (optional explicit cover)

    Ursula K. Le Guin/
        The Dispossessed/
            Disc 1 - The Dispossessed.mp3
            Disc 2 - The Dispossessed.mp3
            Disc 3 - The Dispossessed.mp3
            metadata.opf                    (optional explicit metadata)

# Podcasts: one folder per podcast
podcasts/
    The Daily/
        2024-09-25 - Morning Brief.mp3
        2024-09-26 - Morning Brief.mp3

For podcasts, Audiobookshelf can auto-fetch new episodes from RSS feeds — configure the feed URL per podcast and the server downloads new episodes on a schedule.

Mobile apps

  • iOS: Audiobookshelf on the App Store, plus the third-party "Plappa" and "BookPlayer-AS" clients.
  • Android: Audiobookshelf official, plus the more-polished "Audiobookshelf Tracker" community client.

Both apps stream audio from the server over HTTPS; both can download for offline; both sync the playback position back to the server so opening on another device picks up where you left off.

Multi-user with per-user progress

Settings → Users → Add. Each user has independent library access (configurable per-library) and their own playback progress. Useful for families — everyone has their own "Continue Listening" queue, no spoilers in the metadata.

Podcast features

  • OPML import — bring in subscriptions from another podcast client.
  • Auto-download episodes — configurable per podcast: last-N episodes, all episodes, none.
  • Custom feeds — expose your library as RSS feeds; useful for adding self-curated content as a "podcast" in another app.

ePub support

ePub libraries get rendered in the browser via a built-in reader; the mobile apps also handle them. Bookmarks and last-position sync. For PDFs, the reader supports them but the experience is plainer than dedicated PDF apps.

Bringing in content

  • DRM-free audiobook purchases — libro.fm, downpour, audiobookstore, direct from publishers. Drop the resulting .mp3 / .m4b files into the library structure.
  • Library lending — Libby / OverDrive WMA-DRM downloads can be converted (the legality varies by jurisdiction; check yours).
  • Audibleaudible-cli can download owned content; AAXtoMP3 converts the .aax / .aaxc to playable mp3/m4b. Owned-content-only.
  • Self-recorded — if you record audio yourself (sermons, lectures, family histories), drop it in. Audiobookshelf handles non-published material identically.

Performance

On modest hardware (a Raspberry Pi 5, a small VPS), Audiobookshelf handles a few hundred audiobooks + a dozen podcasts with no issue. Audio transcoding is rarely needed — all major formats stream directly to clients. CPU usage at idle is essentially zero.

Backups

  • ./config/ — users, library definitions, playback progress, sessions.
  • ./metadata/ — covers, fetched book metadata, cached chapter info.
  • The media itself (your audiobooks/podcasts/ebooks) — back up if losing them would matter; podcasts you can re-download.

When Audiobookshelf is the wrong tool

  • If you want a unified video + audio media server, Jellyfin (see that tutorial) handles audiobooks but the UX is video-first.
  • If you need an Audible-replacement that handles their DRM directly — you can't, period; you have to convert to DRM-free first.
  • For very large podcast queues with episode-level scoring / ML recommendations — Audiobookshelf is utilitarian; Spotify-style discovery isn't its lane.

For "I own audiobooks, listen to podcasts, want to read ePubs, and want it all on a server my family shares," Audiobookshelf is the cleanest pick in 2026.