Audiobookshelf is an open-source server for audiobooks and podcasts. It organises your audiobook collection with covers and metadata, remembers each listener’s position across devices, and can subscribe to podcasts and download new episodes automatically. With official Android and iOS apps, it’s a self-hosted alternative to Audible’s app experience and podcast clients that sync in the cloud.

Requirements

  • A small VPS: 1–2 vCPU and 1–2 GB RAM is plenty.
  • Storage for audio files. Audiobook libraries can reach hundreds of GB. See storage VPS.
  • Docker. See install Docker.

Only host audiobooks you own, such as DRM-free purchases, or public domain works like LibriVox.

Install with Docker

# /opt/audiobookshelf/compose.yaml
services:
  audiobookshelf:
    image: ghcr.io/advplyr/audiobookshelf:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:13378:80"
    environment:
      TZ: Etc/UTC
    volumes:
      - /srv/audiobooks:/audiobooks
      - /srv/podcasts:/podcasts
      - /opt/audiobookshelf/config:/config
      - /opt/audiobookshelf/metadata:/metadata
cd /opt/audiobookshelf && docker compose up -d

Open the web UI (through a tunnel, or after setting up the reverse proxy below), and create the root user first.

Organise the library

Audiobookshelf works best with one folder per book:

/srv/audiobooks/
  Author Name/
    Book Title/
      01 - Chapter One.mp3
      02 - Chapter Two.mp3
      cover.jpg
    Series Name/
      Book 1 - Title/
        Title.m4b
  • M4B files with embedded chapters are ideal. Multi-file MP3 books work too.
  • Create a library of type Books, pointing to /audiobooks, and one of type Podcasts, pointing to /podcasts.
  • Use Match to fetch metadata and covers from Audible, Google Books or Open Library.

Upload books through the web UI, or copy them with rsync or SFTP. See rsync.

Podcasts

Add a podcast by searching (via iTunes) or by RSS feed URL. Enable auto-download with a schedule, and keep the last N episodes to limit disk use. Episodes appear in the apps alongside your books, with synced progress.

Users and progress sync

  • Create users for family members. Each gets their own progress, bookmarks and listening stats.
  • Restrict users to specific libraries, or tags.
  • Progress syncs between the web player and mobile apps automatically.

Mobile apps

Official Audiobookshelf apps for Android and iOS support streaming, downloads for offline listening, sleep timers and playback speed. Connect with your server URL (https://books.example.com) and user credentials.

HTTPS with Nginx

server {
    server_name books.example.com;
    client_max_body_size 2G;          # large uploads via the web UI
    location / {
        proxy_pass http://127.0.0.1:13378;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    # listen 443 ssl; certbot --nginx -d books.example.com
}

WebSocket support is needed for live progress updates. See Nginx WebSocket proxy.

Backups and updates

  • Audiobookshelf has built-in scheduled backups (Settings → Backups) of its database and metadata. Copy the backup folder off-server.
  • Back up the audio files separately, since they’re often irreplaceable. See backup strategy.
  • Update: docker compose pull && docker compose up -d. See updating self-hosted apps.

Security

  • Strong passwords for all users. Disable the guest user if you don’t need it.
  • HTTPS only. Optionally restrict access to a VPN (Tailscale, WireGuard). See Tailscale.
  • Keep the server patched.

Quick reference

Task Command / setting
Start docker compose up -d
Port 13378 → 80 in the container (behind Nginx)
Library types Books, Podcasts
Best format M4B with chapters
Built-in backups Settings → Backups

Related: Navidrome music server and Jellyfin media server.

  • Self-Hosting
  • Media
  • Docker