A feature-rich companion dashboard for Audiobookshelf.
Key Features β’ Quick Start (Local) β’ Docker Deployment β’ Mobile Deployment β’ Security Considerations
ShelfLife is a companion dashboard and mobile app designed for Audiobookshelf, a self-hosted audiobook and podcast server.
ShelfLife delivers real-time listening logs, advanced stats, library audits, ASIN matching tools, and deep active-session tracking. Think of Tautulli for Audiobookshelf.
Note
Disclaimer: ShelfLife is an independent, community-developed companion application. It is not affiliated with, endorsed by, or officially connected to the Audiobookshelf project.
- π Real-Time Listener Dashboard: Monitor system-wide listening statistics, server status, library sizes, and active listener sessions at a glance.
- π Deep Listener Analytics: Visualize patterns with GitHub-style activity heatmaps, daily listening averages, completion rates, top genres, and device usage logs.
- π Interactive Library Audits: Search and inspect your audiobooks across different libraries with responsive cover previews, duration info, and detail modals showing listening history and chapter listings.
- π Audnex Book Matching: Integrated ASIN (Audible) lookups that fetch metadata, descriptions, and chapters automatically to help you clean up and match your library's books.
- π± Native Android Integration: Built with Capacitor.
Note
π€ Fully AI-Generated Project This project was 100 % generated by AI agents (vibe-coded).
- Node.js (v18 or higher recommended)
- An active Audiobookshelf server instance
Clone this repository to your system and install the required packages:
npm installCreate a .env file in the root of the project using the template provided in .env.example:
cp .env.example .envOpen the .env file and configure it with your Audiobookshelf server details:
# Port where the ShelfLife server will run (default is 3000)
PORT=3000
# The URL of your Audiobookshelf instance
ABS_URL="https://audiobookshelf.example.com"
# Your Audiobookshelf API Token (admin dashboard or user token)
ABS_TOKEN="your_private_api_token"
# Optional: Custom headers in JSON format (e.g. for Cloudflare Access bypass)
# ABS_EXTRA_HEADERS='{"CF-Access-Client-Id": "xyz", "CF-Access-Client-Secret": "abc"}'Start both the backend proxy and the Vite development server simultaneously:
npm run devVisit the app in your browser at http://localhost:3000.
ShelfLife is fully containerized and can be easily deployed using Docker or Docker Compose. This is the recommended method for hosting ShelfLife on a home server or NAS.
Caution
Security Notice: The ShelfLife container runs an unauthenticated server proxy with administrative API tokens to your Audiobookshelf instance. Do not expose the ShelfLife container port directly to the internet without a secure authentication layer (like basic auth, Authelia, or Cloudflare Access) or VPN. See the Security Considerations section for best practices.
You can configure your environment variables in one of two ways:
- Via
.envfile (Recommended): Create a.envfile in the same directory asdocker-compose.ymland populate it (see Configure Environment Variables). Docker Compose will automatically read it. - Directly in
docker-compose.yml: Opendocker-compose.ymland replace the${VARIABLE}placeholders with your actual values under theenvironment:block (e.g.,ABS_URL=https://audiobookshelf.example.com).
Once configured, run:
- Start the container in detached mode:
docker compose up -d
- The dashboard will be accessible at
http://localhost:3000(or your configuredPORT).
- Build the production Docker image locally:
docker build -t shelflife . - Start the container, loading your environmental configuration:
docker run -d \ -p 3000:3000 \ --env-file .env \ --name shelflife \ --restart unless-stopped \ shelflife
ShelfLife includes native mobile support via Capacitor.
If you have an Android device or emulator connected via USB and adb installed in your path, run the automated compile-and-install script:
chmod +x build-android.sh
./build-android.shIf you prefer to compile manually, follow these steps:
- Build the static assets:
npm run build
- Sync the code to your native Capacitor Android project:
npx cap sync android
- Compile and launch:
Open the
/androidfolder in Android Studio to run, debug, or build a signed release APK of the app.
Warning
Best Practices for Secure Deployment: The ShelfLife web server does not implement its own user authentication or management. To secure your setup against critical proxy risksβincluding open-proxy SSRF scans, unencrypted HTTP credential exposure, browser local storage leaks, and environmental token escalation:
- Deploy behind an Authentication Layer: Always place the ShelfLife web server behind a secure reverse proxy (e.g., Caddy, Nginx, or a Cloudflare Tunnel) that terminates TLS/HTTPS and enforces access control (such as Basic Auth, Authelia, or Cloudflare Access).
- Limit Network Access: Alternatively, restrict hosting to a private local network (LAN) or access the dashboard remotely via a secure VPN (WireGuard, Tailscale).
ShelfLife is an independent, community-developed companion application. It is not affiliated with, endorsed by, or officially connected to the Audiobookshelf project.
This project is licensed under the MIT License. See the LICENSE file for the full text.
Important
Liability and Warranty Disclaimer: The software is provided "AS IS", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the software or the use or other dealings in the software. Under no circumstances should this companion tool be deployed without appropriate network safety protections in place.





