Audiobookshelf: My DIY Audiobook & Podcast Library
Installing Audiobookshelf
In Part 3, I get Jellyfin running for video. Now I add Audiobookshelf so I can stream audiobooks (and podcasts) from the same little server. This post is just the install + first boot. I keep it simple and LAN-only.
1. Create the folders under /srv/media/
I keep everything in /srv/media/, so I make a clean spot for audiobooks + Audiobookshelf’s data.
sudo mkdir -p /srv/media/audiobooks
sudo mkdir -p /srv/media/podcasts
sudo mkdir -p /srv/media/audiobookshelf/config
sudo mkdir -p /srv/media/audiobookshelf/metadata
Then I make sure my user can manage the files:
sudo chown -R $USER:$USER /srv/media/audiobooks /srv/media/podcasts /srv/media/audiobookshelf
2. Install audiobookshelf with apt
I ssh into the server and activate the repository:
sudo apt install gnupg curl
wget -O- https://advplyr.github.io/audiobookshelf-ppa/KEY.gpg | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/adb-archive-keyring.gpg
sudo curl -s -o /etc/apt/sources.list.d/audiobookshelf.list https://advplyr.github.io/audiobookshelf-ppa/audiobookshelf.list
then install audiobookshelf:
sudo apt update
sudo apt install audiobookshelf
3. Enable and start the service
sudo systemctl enable --now audiobookshelf
Since audiobookshelf listens on port 13378, I open that port on UFW:
sudo ufw allow 13378/tcp
4. First login and library setup
From my main setup, I open:
http://<server-ip>:13378
Then, I do the minimum setup of:
- Create the admin user
- Add libraries
- audiobooks → I point it at my audiobooks folder under /srv/media/
5. Set up podcasts via RSS (auto-download)
Create a podcasts library
In the web UI:
- Settings / Libraries → Add Library
- Add Podcasts
- Folder path: /srv/media/podcasts
Add a podcast using an RSS feed
In the podcasts section
- Add podcast
- Paste the show’s RSS feed URL
- Save
Audiobookshelf will then fetch episodes and download them into the podcasts folder.
Make the podcasts auto-download
In the podcast settings, I enable settings like:
- Auto-download new episodes
- Keep only most recent N episodes
- Delete files when episodes are removed from library
Once the RSS feed is in, the server keeps episodes coming in.
6. Quick Tests
Things I verify:
- Audiobooks show up and play
- Download a podcast and see that it plays
- New episodes will land in /srv/media/podcasts/PODCAST_NAME/
- Progress saves when I stop/resume
There are several third-party phone clients that allow you to connect to an audiobookshelf instance, but none of them supported both audiobooks and podcasts while supporting downloads/local playback and being FOSS. I decided to:
7. Get the official iPhone app
Audiobookshelf has an official iOS app, but the TestFlight often fills up (Apple caps betas at 10,000 testers). When I tried to join, it was full — so I cloned the app repo and built it locally with Xcode instead.
Clone and prepare the repo
On my laptop:
git clone https://github.com/advplyr/audiobookshelf-app.git
cd audiobookshelf-app
npm install
Then, I generate the web assets and sync them into the native iOS project:
npm run generate
npx cap sync
npx cap open ios
The last command opens the iOS project in XCode.
Create an identifier (Bundle ID/App ID)
In XCode:
- Click the app target >
Signing & Capabilities - Set Team to my apple developer account
- Change the
Bundle Identifierto something unique
- com.seanwong.audiobookshelf
Build and install on my iPhone
- Connect iPhone via USB cable
- In XCode, select your iPhone as the run target
- On the Xcode menu bar, click
Product > Archive - In Organizer, click
Distribute App > Debugging, then export an .ipa - In
Window > Devices and Simulatorsdrop the generated .ipa into Installed Apps
8. Log into my server on the app
Once the app is installed, I enter my server URL and the username + password I created earlier. Since the instance is LAN-only, the iOS app only works on home Wi-Fi. Fortunately, I can download audiobooks and podcasts onto my device for offline playback.