← How-Tos
raspberry-pi 55 min ago ◯ 3 min read

Self-Hosting Audiobookshelf on a Raspberry Pi: Your Own Audiobook and Podcast Server

audiobookshelfraspberry piself-hostedaudiobookspodcastsdockermedia serverhowto

Jellyfin and Plex get all the attention in self-hosting circles, but neither handles audiobooks or podcasts particularly well; they're built around video and music metadata, and long-form spoken-word audio wants different features entirely: chapter markers, resume-from-position across devices, reading speed control, and podcast feed subscriptions. Audiobookshelf is purpose-built for exactly that, and a Raspberry Pi is more than enough hardware to run it for a household library. This guide covers setting it up with Docker, organizing your media so it actually gets recognized, and the day-to-day workflow with the mobile apps.

Why a Dedicated Audiobook Server

Installing with Docker Compose

Create a project directory on your Pi with a folder structure for your media before you start the container:

mkdir -p ~/audiobookshelf/{config,metadata,audiobooks,podcasts} cd ~/audiobookshelf

Then a docker-compose.yml:

services: audiobookshelf: image: ghcr.io/advplyr/audiobookshelf:latest container_name: audiobookshelf ports: - "13378:80" volumes: - ./audiobooks:/audiobooks - ./podcasts:/podcasts - ./config:/config - ./metadata:/metadata restart: unless-stopped

Bring it up with docker compose up -d, then browse to http://<your-pi-ip>:13378.

Organizing Your Library So It Actually Gets Recognized

Audiobookshelf's automatic matching depends on reasonably consistent folder structure. The pattern that works most reliably:

Content typeExpected layout Audiobooks/audiobooks/Author Name/Book Title/, with the book's audio files (and optionally a cover image) inside that folder Multi-book series/audiobooks/Author Name/Series Name/Book Title/, which Audiobookshelf will group under the series automatically once scanned PodcastsA folder per show under /podcasts/; new episodes download into that same folder once you subscribe to the feed from inside the app

After your first import, create a library from the web UI (Settings > Libraries > Add Library), pick "Book" as the media type, and point it at /audiobooks. A second library pointed at /podcasts with the "Podcast" media type handles the other half.

Initial Setup Checklist

  1. On first browser visit, create the root admin account with a strong password; this is a publicly-reachable-if-you-port-forward service, so don't skip this step or leave a default.
  2. Add your Book and Podcast libraries as described above and let the initial scan run; large libraries can take a while the first time while Audiobookshelf fetches cover art and metadata.
  3. Install the Audiobookshelf mobile app (iOS/Android) and point it at your server's address to start listening with sync support.
  4. If you want remote access away from home, pair this with Tailscale (covered elsewhere on this site) rather than exposing port 13378 directly to the internet.

Metadata Matching Tips

Audiobookshelf pulls metadata from providers like Audible and Google Books automatically based on folder and file naming. If a book shows up unmatched or with the wrong cover, use the "Match" button on that book's page to search manually and pick the correct result; this is far faster than trying to perfectly pre-name every folder before the initial scan.

Where It Fits Next to Your Other Self-Hosted Services

Audiobookshelf runs comfortably alongside Jellyfin, Immich, or any of the other self-hosted services covered on this site on the same Pi, provided you're not also running something CPU-heavy like Frigate's object detection on the same board. If you're centralizing several of these services, consider managing them through Portainer (covered elsewhere on this site) rather than juggling separate Compose files and manual docker commands for each one.