A home foryour audiobooks

Bookmark is a self-hosted server for your audiobooks, with room on the same shelf for ebooks and comics. It streams to the browser and native mobile apps, keeps your progress in sync across devices, and never modifies your files.

docker compose up -d · MIT licensed · open source

The library

Covers, chapters, and metadata

Point Bookmark at the folders you already have. It scans covers, chapters, and embedded tags from your files; descriptions, ratings, and series info can be matched from Goodreads, Hardcover, Audible, and Comic Vine. Libraries are mounted read-only and never modified.

  • Audible and iTunes search. Look up a book from the edit dialog to fill in the description, narrators, genres, and series order.
  • Goodreads and Hardcover ratings. Community ratings show on each book. Sort the library by rating, or browse the top list.
  • Metadata priority. When sources disagree, a configurable order decides which wins: manual edits, embedded tags, or matched data.
The Last LighthouseJune Okafor
The Last Lighthouse
June Okafor
Paper PlanetsH. Lindqvist
Paper Planets
H. Lindqvist
A Theory of RainImre Tóth
A Theory of Rain
Imre Tóth
The Midnight CartographerR. Ellery
The Midnight Cartographer
R. Ellery
Small Gods of the CityPriya Anand
Small Gods of the City
Priya Anand
Winter HarbourE. Sandell
Winter Harbour
E. Sandell
The Orchard at NightC. Weaver
The Orchard at Night
C. Weaver
Neon HarborVega & Ruiz12
Neon Harbor
Issue 12

The player

A player built for audiobooks

  • Playback speed. Anywhere from 0.5× to 2× on the web. The apps adjust in 0.05× steps.
  • Sleep timer. Set it in minutes, or have it stop at the end of the chapter.
  • Skip controls. Jump back 15 seconds or ahead 30 with one tap. The apps let you set your own intervals.

Sync

Progress syncs across devices

Your position saves to your server every few seconds while you listen. Pause on your phone, press play at your desk, and continue from the same sentence. Live updates arrive over WebSocket; no refresh required.

Mobile apps

Native apps for iPhone and Android

Real native apps, not a wrapped website, with the whole library available offline.

Public beta coming soon

  • Offline downloads. Download books to the phone and listen in airplane mode. Progress reconciles once you are back online.
  • Pairing. Scan a QR code from the web app to sign in, or enter your server address and use your account, including single sign-on.
  • iPad support. A sidebar layout that uses the full screen.

Formats

Audiobooks, ebooks, and comics

Letters to a CometY. NakamuraOPDS feed

Ebooks

EPUBs are scanned and readable right in the browser. They are also served over OPDS, so you can keep using the reader app you already prefer.

EPUB
Neon HarborVega & Ruiz12Static AgeT. Brand3Moth & FlameK. Ilves7

Comics

Series and issues, including TPBs, omnibuses, and one-shots. Browse, organize, and download your archives, or read them in a comic app over OPDS.

CBZCBRPDFOPDS

AI narration

Bookmark can narrate an ebook into an M4B audiobook, chapters included, using any OpenAI-compatible text-to-speech server. A ready-to-run engine ships in the compose file.

EPUB inM4B out

Accounts

Multiple users and permissions

  • Per-user progress. Every account has its own progress, lists, stats, and preferences.
  • Permissions and tag filters. Control who can edit metadata or upload, and use tag filters to hide certain content from certain accounts.
  • OIDC, API keys, and a REST API. Optional OpenID Connect single sign-on, per-user API keys, and a REST API documented with Swagger.
  • Themes. Sixteen accent colors and thirteen themes, from pure-black Pitch to light Silver, in English and Swedish.

Self-hosting

Install with Docker Compose

One image, database included. Copy the config template, point it at your media folders, and start it with a single command. The first account you create becomes the admin.

~ on your-server
$ git clone https://github.com/RobinEdquist/bookmark.git
$ cd bookmark
$ cp example.env .env
# point .env at your media folders, then:
$ docker compose up -d
➜ Bookmark is listening at http://localhost:3001