Fully verified14,777

Media servers

Audiobookshelf

Audiobookshelf streams your own audiobook and podcast files, tracks listening progress, bookmarks and collections, and gives each account access to selected libraries. This recipe initializes a private administrator through the native API and backs up the database together with the actual media.

Alternative to PlexGPL-3.0-onlyVersion 2.37.2

Overview

Audiobookshelf

Stream your own DRM-free audiobooks and podcasts from a private server. Separate accounts retain listening position, bookmarks and collections; library permissions keep a regular listener away from libraries they were not granted.

This is a media library server, including an audiobook-focused alternative to managing your files in Plex. It does not replace a commercial content subscription or supply licensed books. Android and iOS clients and native OIDC are available upstream; this recipe verifies the browser and local accounts.

The pinned container runs as UID/GID 1000 with a read-only root, no capabilities and a single persistent /data volume. The volume includes configuration, SQLite, signing material, metadata, covers, audiobook files and podcasts. A dedicated tools service calls the native first-user API; it is not a background identity provider.

Verification

On 2026-10-25, amd64 smoke exercised native setup, restricted-user access, scanning, real audio range delivery, progress/bookmark/collection and recovery after deleting the volume. It also rejected incomplete backups before mutation and preserved a stopped service during backup. Three real screens per locale use original narrated samples and original covers. ARM64, mobile apps, OIDC, internet podcast fetching, external metadata and production TLS were not tested.

Security assessment (2026-10-25): loopback, UID 1000 process, read-only root, no host/Docker socket access, and explicit initial bootstrap. Protect first setup and the entire private data volume. This is a configuration review, not a vulnerability scan.

Update tracking

These are stored results of separate checks, not real-time data. An unknown status means the check has not been performed yet.

New releases

Recipe version compared with the latest known upstream release. A version number, not a reading of what changed.

Current version 2.37.2Oct 25, 2026, 8:07 AM UTC

Critical vulnerabilities

Result of a dedicated Docker image scan, not a Compose configuration check.

Not checkedNot checked

Breaking updates

A new major version is found by comparing version numbers. A compatibility verdict is entered by hand after reading the release notes and the migration steps.

Not checkedNot checked

compose.yaml

Upstream Compose changes relative to the verified recipe.

Upstream Compose is not trackedNot checked

Outdated Docker images

Pinned image tags checked for newer versions.

Not checkedNot checked

From observation to action

Update plan

The recipe already pins the latest known release. The steps below show the evidence retained for that version.

2.37.22.37.2
  1. Open the release evidence

    Open this release on GitHub ↗ The link is evidence to review, not proof of compatibility.

  2. Review the version boundary

    The version numbers do not cross a major compatibility boundary. No compatibility verdict has been recorded.

  3. Prepare image-tag changes

    No image-tag change is currently planned.

  4. Follow the documented migration shape

    Change the tag and restart. Release-specific migration steps still come from the release notes and installation guide.

  5. Protect the rollback point

    No version change is currently planned. The recipe includes a backup procedure. Restore has been tested.

  6. Verify the updated recipe

    An exact Fully verified check for this target was recorded on 2026-10-25.

Read the update procedure in the installation guide ↓

Specifications

Security and exposure

Installation levels

The status shows how fully the published recipe meets each level's requirements.

Ready

For home

A minimal setup for a local network or access through a VPN.

  • Single server
  • Local access
  • Minimum components

The recipe covers every requirement at this level.

Ready

For a VPS

A public deployment with protected access and backups.

  • Domain
  • HTTPS via reverse proxy
  • Off-server backup

The recipe covers every requirement at this level.

Not supported

Reliable

A setup designed for predictable operations and observability.

  • Separate database
  • Healthcheck
  • External monitoring
  • CPU and memory limits

You still need to add: separate database, external monitoring, cpu and memory limits.

Tailored to your server

Configuration generator

Answer five questions and download a ready-to-run Audiobookshelf bundle.

Runs locally
01 Do you have a domain?
02 Which reverse proxy?
03 Server architecture
04 Where should data be stored?

Use an absolute path for a separate disk, such as /srv/audiobookshelf.

05 Is VPN access required?

Your bundle is ready

The archive is created in your browser. Your answers are never sent anywhere.

The same files as one shell script, written in plain heredocs so you can read the whole thing before it runs. It checks Docker, the architecture, memory, disk and the ports it needs, and writes nothing until you add --apply.

Screenshots

Quick start

Read the full guide first: it explains external access, backups, and data locations.

Prepare settingscp .env.example .env
Launchdocker compose up -d
Check statusdocker compose ps

Step-by-step guide

Install Audiobookshelf

Requires Docker Engine, Compose >=2.24, 1 CPU, at least 512 MB RAM (1 GB recommended), and enough disk for all media and backups. The image publishes amd64 and arm64; this recipe was tested on amd64.

cp .env.example .env
chmod 600 .env
openssl rand -hex 24

Put the generated password in AUDIOBOOKSHELF_ADMIN_PASSWORD. Then start and initialize locally before enabling a public reverse proxy:

docker compose up -d --wait
docker compose run --rm -T bootstrap
docker compose ps

Open http://127.0.0.1:13378 and sign in as admin with the password from .env. For a remote host use an SSH tunnel: ssh -L 13378:127.0.0.1:13378 user@server. The unauthenticated first-user setup is closed only after bootstrap succeeds. Re-running bootstrap keeps existing credentials; changing .env never resets an account password. Change passwords in the application.

Environment

  • AUDIOBOOKSHELF_VERSION: fixed official image version, initially 2.37.2.
  • AUDIOBOOKSHELF_PORT: loopback HTTP port, initially 13378.
  • AUDIOBOOKSHELF_ADMIN_PASSWORD: unique initial admin password, at least 16 characters, no CHANGE_ME placeholder.
  • AUDIOBOOKSHELF_DATA_VOLUME: named volume holding all persistent data; use a unique name for each installation.
  • TZ: IANA time zone, initially Etc/UTC.
  • AUDIOBOOKSHELF_BACKUP_DIR: optional backup output directory; defaults to ./backups.

Add your media

Create a book library in the administration interface with folder /data/audiobooks, and optionally a podcast library at /data/podcasts. Store each book in its own author/title folder. For example, copy a local folder through the service container (which writes as UID 1000):

docker compose cp './My Book' audiobookshelf:/data/audiobooks/
docker compose run --rm permissions

Scan the library. Use only media you have permission to host. Media outside /data is not backed up by this recipe. Create regular listener accounts and select their accessible libraries; do not share the root account.

HTTPS

After bootstrap succeeds, choose proxy/Caddyfile or proxy/nginx.conf, set your domain, and adjust the upstream port if changed. These examples assume a proxy on the same host. A containerized proxy needs a deliberately configured network route; its 127.0.0.1 is its own container. Keep port 13378 private. OIDC and RSS sharing are optional upstream features and are not enabled here.

Backup and recovery

./backup.sh
./restore.sh backups/audiobookshelf-TIMESTAMP.tar

Backup stops the app, archives the whole volume plus .env and Compose, and restores its prior running/stopped state. Encrypt the archive and copy it off-server. It can be as large as your media collection. Host tools needed: Bash, tar, gzip and Docker; smoke additionally uses Python 3 and OpenSSL.

Restore

Restore accepts only your trusted archives, verifies the database and all media directories before mutation, creates a safety backup, replaces data, and waits for health. Start the recipe once on a fresh destination before restore. Saved .env is never executed automatically: compare it privately and use the matching image version. Restored account passwords and JWT key take precedence over bootstrap values. Check a book plays and listening state is present after recovery.

Updates

Take an off-server backup, review release notes, set a tested explicit version in .env, then run docker compose pull && docker compose up -d --wait. Verify login and playback. To roll back a database migration, restore the pre-upgrade full archive with its matching version; changing only an image tag can be insufficient.

VPS

Keep HTTP on loopback and block it in the firewall. Use an SSH tunnel and bootstrap first, then enable the domain and HTTPS.

LAN / VPN

Use an SSH tunnel or a protected VPN proxy for a home server. Do not expose an uninitialized instance to an untrusted network.

Caddy

After bootstrap, configure proxy/Caddyfile, your domain and DNS. Caddy obtains the TLS certificate.

Nginx

After bootstrap, configure proxy/nginx.conf, your domain and valid TLS certificates. The sample supports WebSocket and long streams.

Traefik

After bootstrap, load proxy/traefik.yaml through a host-based Traefik file provider. It needs websecure and letsencrypt. Configure a separate route for a containerized proxy.

Data / Данные

One named volume holds config, metadata, audiobooks and podcasts. Retain it during ordinary updates. Data must be writable by UID/GID 1000.

Rollback / Откат

Save the current state, then restore the full pre-upgrade archive with its matching image version. Do not run an old version against a migrated database.

Removal / Удаление

docker compose down keeps the volume. After verifying an off-server backup, docker compose down --volumes permanently deletes the media library, accounts and progress.

Report a recipe problem

Tell us how it went on your server

Opens a prefilled GitHub issue. A GitHub account is required; submitting the issue makes it public.

Troubleshooting

Troubleshooting

  • Setup screen or bootstrap failure: keep the service on loopback; set a unique password of at least 16 characters and run docker compose run --rm -T bootstrap. A placeholder is rejected. Existing/restored accounts retain their old password.
  • Permission denied: /data must be writable by UID/GID 1000. The permissions service initializes it; files copied as root may require ownership repair. Never solve this by making private data world-writable.
  • No books: create the library at /data/audiobooks, verify files are present and readable, and run a native scan. This recipe includes no commercial book catalog.
  • Listener sees no library: activate the account and grant the intended library. Verify its upload/update/delete permissions separately.
  • Playback fails through a proxy: check that Range and streaming requests reach the server and the upstream port matches .env. First verify native loopback playback. TLS examples were not end-to-end tested.
  • Archive missing media: restore rejects a database-only archive. Back up the entire volume; separately mounted media needs a separate recovery plan.
  • Restore password differs: .env is bootstrap-only. Use the restored account password or the upstream password recovery procedure.
docker compose ps
docker compose logs --tail=100 audiobookshelf

Logs, environment files, server metadata and backups can contain private library information or credentials. Redact them before sharing. For an isolated destructive smoke on throwaway data run ./smoke-test.sh.

Official sources

Latest release: 2026-10-23 · GitHub Stars: 14,777 · metadata checked Oct 25, 2026, 8:07 AM UTC

Disclaimer

Fossary is an independent informational catalog and is not affiliated with the developers of the listed applications. We collect information from public sources and verify published recipes, but we do not develop, distribute, or control these applications.

A listing or validation status is not a requirement, endorsement, or personal recommendation to use an application. You decide whether it is suitable and use it at your own risk. We do not warrant an application's security, availability, or fitness for purpose and, to the extent permitted by law, are not liable for resulting loss or damage. Review its license, security settings, data processing, and backup procedures before installation.