harbour-calibreweb
OPDS client for Sailfish OS: browse and download books from your Calibre Web instance (or Calibre's Content Server).
Works with any OPDS server, but is designed for Calibre Web: navigation feeds, search, covers, downloads with progress.
Why OPDS instead of the REST API
Recent calibre-web releases (upstream) no longer ship the REST API:
/api/* was removed and does not exist in any 0.6.9+ release nor in master.
The stable, documented interface is OPDS (/opds, /opds/new,
/opds/search?query=...), which uses HTTP Basic Auth and exposes
per-format download links. OPDS is also supported by Calibre's Content
Server, so this app covers both backends.
Features
- Catalog sections (new arrivals, authors, categories, shelves, ...) from the
/opdsindex - Automatic pagination (
rel="next"links) - Text search (
/opds/search) - Covers with local cache
- Book detail: author, description, formats with size
- Download with progress bar to
~/Downloads - HTTP Basic Auth (empty user = anonymous browsing)
- "Ignore SSL errors" option for self-signed certificates
Build
You need the Sailfish SDK
(on Linux: flatpak install flathub org.sailfishos.sdk or the tarball).
git clone <this repo> harbour-calibreweb
cd harbour-calibreweb
# pick a target, e.g.:
sfdk target install SailfishOS-4.6.0.11-armv7hl
sfdk target use SailfishOS-4.6.0.11-armv7hl
sfdk build # produces the RPM in RPMS/
sfdk deploy # installs on the connected device
Alternatively, install the RPM manually:
pkcon install-local harbour-calibreweb-0.1.0-1.armv7hl.rpm
Recommended targets by device: armv7hl (Xperia X, Jolla C...),
aarch64 (Xperia 10 II/III, Jolla C2), x86_64 (emulator).
For the Jolla Phone 2026 (MediaTek Dimensity, jp2601): aarch64 with
Sailfish OS 5.0, e.g. SailfishOS-5.0.0.62-aarch64 (or the latest 5.0.x
available in your SDK version).
Configuration
Open the app → menu → Settings:
| Field | Value |
|---|---|
| Calibre Web address | e.g. https://calibre.example.com (subpath supported) |
| User | leave empty if anonymous browsing is enabled on calibre-web |
| Password | your account password (Basic Auth) |
| Ignore SSL | enable only if the server uses a self-signed certificate |
Then hit Test connection and browse.
Structure
src/ C++: settings (QSettings), apiclient (feeds+covers),
downloader (progress), opdsparser (Atom/OPDS), main
qml/pages/ MainPage (index), FeedPage (lists+pagination),
BookDetailPage (detail+download), SearchPage, SettingsPage
qml/cover/ app cover
icons/ 86/108 px icons + generation script
rpm/ spec and desktop file
Known limitations
- The password is stored in plain text in the app settings
(
/home/nemo/.config/harbour/calibreweb.conf) — acceptable for personal use. The file is fixed and shared between the launcher (nemo) and SSH debug (defaultuser): the config does not depend on which user launches the app. - Search uses the server's engine; results are identical to the web UI.
- The C++ core (parsing, auth, download) is tested with Qt 5.15 against real OPDS feeds and a Basic Auth mock; the Silica UI requires the SDK for on-device verification.
Core tests
# mock OPDS server + end-to-end test (see local /tmp repo):
python3 /tmp/mock_opds.py
# compile and run /tmp/opds_test (Qt 5.15+)
License
MIT