Skip to content

First run

1. Grab your admin credentials

On its very first start the server creates an admin account and prints the password plus an auth code exactly once - save them. (With --setup, a browser wizard sets the password for you instead.)

# In the server's logs on first start:
admin password: 9f3c... (shown once - save it)
auth code:      ABCD-EFGH (redeem to pair a device)

With Docker, run docker compose logs to see them. Sign in to the admin console at /admin with the username admin and that password.

2. Add a library

Point a library at a folder of audiobooks - the one you mounted at /library in Docker, for example. You can do this in the admin console, or via the API:

# Get a session token by logging in as admin:
TOKEN=...   # from POST /api/v1/auth/login

# Add a library, then browse it immediately:
curl -X POST https://your-server/api/v1/admin/libraries \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"name":"Main","root":"/library"}'

There's nothing else to configure: the scanner auto-detects each folder's shape (single-file m4b, folder-per-book, or multi-file mp3 parts) and indexes titles, authors, chapters and cover art. A folder it misclassifies can be overridden per-folder from the admin console.

3. Pair a device

The connect flow turns an auth code into a durable, device-scoped session:

  • In the admin console, mint an auth code or click Copy invite to get a shareable link (/connect#code=… - the code rides in the URL fragment, so it never hits the server logs).
  • The connect screen shows a QR code with Open in app / Open web player. Scanning opens the native app (when it claims your domain) or the web player.
  • The client exchanges a single-use pairing token for a device-named session token. Username and password login is also supported.

4. Open the web player

The Docker image and native binaries serve the installable web player at /web. Open it in a browser and “Add to Home Screen” for an app-like experience, or wait for the native apps (see the download page). Either way, your progress, bookmarks and notes sync across every device you connect.

Tip: set public_url to your real external URL before minting invites, so the QR and copy-invite links point somewhere your devices can actually reach.