New app: Liseur
Required
- The app complies with the inclusion criteria
- The original app author has been notified (and does not oppose the inclusion) — I am the author.
- All related fdroiddata and RFP issues have been referenced in this merge request — there are none; I searched both trackers before opening this.
- Builds with
fdroid buildand all pipelines pass - There is an issue tracker and contact info of the author so that we can report bugs and contact the author.
Strongly Recommended
- The upstream app source code repo contains the app metadata (summary/description/images/changelog/etc) in a Fastlane or Triple-T folder structure
- Releases are tagged and auto update is enabled
Suggested
- External repos are added as git submodules instead of srclibs — the app uses neither; every dependency comes from Maven Central or Google's Maven.
- Enable Reproducible Builds — No, I don't want this.
- Multiple apks for native code — not applicable, the app has no native code.
About the app
Liseur is an EPUB reader for Android and a client for calibre-web or komga: it reads the files on your phone, and it can browse, download from and sync reading positions with a calibre-web server you run yourself. Rendering is Readium. MIT licensed.
I have run fdroid readmeta, rewritemeta, lint, checkupdates and build in the buildserver container locally as well; rewritemeta produced no changes and the build produced com.chmouel.liseur_3.apk. I installed that APK on an emulator and it starts and reads books.
Permissions
The manifest declares two: INTERNET and ACCESS_NETWORK_STATE.
The built APK also carries WAKE_LOCK, RECEIVE_BOOT_COMPLETED and FOREGROUND_SERVICE, merged in from androidx.work and androidx.media3. WorkManager runs the downloads and the position sync; media3 is used for the media-button handling in the reader. Nothing requests them at runtime beyond that.
Network connections
The app declares INTERNET, so it is worth saying exactly where it connects. There are two places, both optional, and neither is a service I run:
- a calibre-web server, whose address the user types in themselves — GPLv3, self-hosted. Nothing is contacted until an account is configured, and the app is fully usable without one.
- Wiktionary, through Wikimedia's MediaWiki API, when the user taps Define on a selected word. This can be turned off in settings, or pointed at an installed offline dictionary app instead.
There is no first-party server, no account, no telemetry, no crash reporting and no ads. No Google Play services, no Firebase, no analytics library. I mention this because Myne, the other ebook reader in the repo, carries NonFreeNet, and I do not think it applies here — but say so if you disagree and I will add it.
Bundled assets
Seven fonts ship with the app, all under the SIL Open Font License 1.1: Literata, Vollkorn, Inter, iA Writer Duospace, Atkinson Hyperlegible, OpenDyslexic and Accessible-DFA. The full licence text for each, with its copyright line and upstream URL, is in app/src/main/assets/licences/. The only other binary in the repo is gradle/wrapper/gradle-wrapper.jar, which fdroidserver replaces with its own wrapper.
Review checklist
Filled in from testing on an emulator (Android 16, API 37) and on a OnePlus CPH2653:
- Basic function — opens EPUBs from a folder chosen through SAF and from a single file; paginates, remembers the position, highlights, notes, bookmarks, in-book search, Wiktionary lookup, calibre-web browse/download and position sync. The screenshots are captured by a script that drives each of these through the real UI.
- Policy compliance — MIT, no proprietary dependencies, no tracking. Notably it does not include
readium-lcp, which pulls in a proprietary binary. - Permissions — as above.
- Network connections — as above.
- Language support — English only for now; the app has no hardcoded strings outside
strings.xml, so translations can be added without code changes. - Security — no exported components beyond the launcher activity, no
WRITE_EXTERNAL_STORAGE, file access goes through the Storage Access Framework. Network access is HTTPS by default;usesCleartextTrafficis not enabled.