Find a file
Chmouel Boudjnah 36050777f9
feat(release): publish to the Google Play internal track (#36)
Liseur ships as an APK on GitHub releases and through F-Droid. Play is a
third channel, and the point of this change is that it is the least
load-bearing of the three: the tag that publishes a release now also
builds an app bundle and pushes it to internal testing, and every part of
that is arranged so it cannot take the other two down with it.

Nothing about the APK path moves. F-Droid's recipe builds
assembleRelease and never sees fastlane/Fastfile, no Gradle publishing
plugin is applied, and bundleRelease is an additional output rather than
a replacement. The workflow step skips itself when the service account
secret is absent, so forks still cut releases, and is continue-on-error
so a rejected upload is not what fails one.

Only the changelog is pushed from here. The store listing stays in the
console, because Play holds declarations that no file in this repository
describes -- data safety, content rating, target audience -- and an
accidental metadata push is a listing change under review.

Play also requires a privacy policy at a public URL, so docs/PRIVACY.md
says what the app actually does: no collection, no trackers, network only
to the book server you enter and to a dictionary lookup that is off until
you turn it on. GitHub Pages serves it from main /docs, which makes it a
document that changes in a commit rather than in a console text box.

The upload credential is the existing account-level service account,
already in pass; hack/release --sync-secrets carries it into the release
environment alongside the signing key.
2026-08-19 16:37:07 +02:00
.github feat(release): publish to the Google Play internal track (#36) 2026-08-19 16:37:07 +02:00
app feat(reader): show footnotes on the page instead of at the back of the book 2026-08-19 14:38:21 +02:00
docs feat(release): publish to the Google Play internal track (#36) 2026-08-19 16:37:07 +02:00
fastlane feat(release): publish to the Google Play internal track (#36) 2026-08-19 16:37:07 +02:00
gradle feat(reader): show footnotes on the page instead of at the back of the book 2026-08-19 14:38:21 +02:00
hack feat(release): publish to the Google Play internal track (#36) 2026-08-19 16:37:07 +02:00
tmp feat: Combine filter chips and sort controls into a single row 2026-07-31 15:07:03 +02:00
.gitignore feat(release): publish to the Google Play internal track (#36) 2026-08-19 16:37:07 +02:00
.pre-commit-config.yaml chore: Configure pre-commit to run hooks automatically on push 2026-08-18 10:55:52 +02:00
AGENTS.md docs: document PR screenshot workflow 2026-08-19 08:29:41 +02:00
build.gradle.kts feat: add EPUB reading with Readium navigator 2026-07-28 21:38:21 +02:00
CLAUDE.md feat: scaffold Android project with Compose app shell 2026-07-28 21:21:07 +02:00
DEVELOPER.md feat(release): publish to the Google Play internal track (#36) 2026-08-19 16:37:07 +02:00
gradle.properties perf: Accelerate unit test execution across multiple cores 2026-08-17 21:29:25 +02:00
gradlew feat: scaffold Android project with Compose app shell 2026-07-28 21:21:07 +02:00
gradlew.bat feat: scaffold Android project with Compose app shell 2026-07-28 21:21:07 +02:00
LICENSE feat: scaffold Android project with Compose app shell 2026-07-28 21:21:07 +02:00
Makefile feat(release): publish to the Google Play internal track (#36) 2026-08-19 16:37:07 +02:00
README.md feat(release): publish to the Google Play internal track (#36) 2026-08-19 16:37:07 +02:00
settings.gradle.kts feat: scaffold Android project with Compose app shell 2026-07-28 21:21:07 +02:00

Liseur

A woman reading on a couch under a lamp

An open-source ebook reader for Android and a calibre-web / Komga / liseur-sync client: EPUBs on your phone, in sync with your own book server, for people whose idea of a great evening is a warm blanket and a 900-page book.

Library Reading Reading controls Typography
The shelf, sorted by what you are currently reading. Distraction-free page with notes and bookmarks. Reading progress, chapter scrubber, and time remaining. Themes, open typefaces, spacing, and brightness.
Contents Highlights Search Definition card
Full-screen table of contents for easy navigation. A personal notebook of highlights, exportable to Markdown. In-book search with context snippets. Instant word definitions without losing your place.
Series One series Server setup Reading in the dark theme
Series grouped into compact shelf stacks. Reading order, progress, and missing volumes at a glance. Connect to calibre-web, Komga or liseur-sync in moments. Dark reading theme, independent of system settings.

Screenshots use Standard Ebooks editions (public domain).

About Liseur

Liseur is designed to get out of the way and let you read. Pages open cleanly from edge to edge with the Readium engine, set in open typefaces like Literata, Vollkorn, Atkinson Hyperlegible, and Inter, or whatever quirky typography the publisher insisted on. Four dedicated reading themes (Light, Sepia, Dark, and true OLED Black) let you settle into a story at 2 a.m. without being blinded by your phone. Margins, line spacing, brightness, and page turns stay quietly out of your way. Prefer one long scroll to turning pages? Switch it on for the whole library, or for the one book that wants it, and keep scrolling past the end of a chapter to fall into the next one.

A discreet footer shows the time remaining in the chapter (just enough to convince yourself that one more chapter won't hurt), while highlights, margin notes, bookmarks, and instant dictionary lookups remain right under your fingers when you stumble upon a word you pretend to know. Footnotes open as a small card over the page rather than throwing you to the back of the book, so an author's aside costs you nothing more than a tap — and when a note is long enough to deserve the full page, "Go to note" takes you there and leaves a way back.

Your library gathers onto a single shelf, whether your books live in messy folders on your phone or on a self-hosted calibre-web, Komga or liseur-sync server. Books that belong to a series politely group into compact stacks that track your reading order, your progress, and the missing volumes you still need to hunt down. When you reach the final page of a novel, the next volume is already sitting there, gently enabling your binge-reading habits.

When you switch between devices, you have the choice to have your place travel with you across your devices. Two-way synchronization with calibre-web, Komga and liseur-sync keeps your progress aligned — down to the exact sentence on Komga and liseur-sync, so you never have to play the guessing game of where you were. liseur-sync goes one further: standalone EPUB files that never came from a catalog sync their position too, matched by the file itself. Its books come from folders it watches on the server, so anything you drop there shows up on the shelf.

Everything runs privately and without distraction. There are no trackers, no analytics, no ads, and no attempts to sell you a monthly subscription for books you already own. Liseur only talks to the book servers and dictionary sources you choose to add. The privacy policy spells out exactly what that means.

Install

  • liseur-desktop: Desktop version of Liseur
  • liseur-sync: Lightweight self-hosted library and sync server — watched folders, browse, download, positions and reading stats

Development

See DEVELOPER.md for build instructions and architecture notes. What each supported server exposes, what is implemented against it, and why the remaining gaps are or are not fixable is in docs/SERVER_CAPABILITIES.md.

What's in a name?

Liseur ([li.zœʁ], lee-ZUR) is the French word for an avid reader or book lover. It sounds dignified just like the English word leisure, which is exactly what you should be doing when you curl up with a good book.

Here is a painting of Pierre-August Renoir portraying C.Monet as "Le liseur"

image

Author

Sponsor

Chmouel Boudjnah

Licence

MIT. Bundled fonts are under the SIL Open Font License.