- C++ 60.3%
- QML 26.2%
- JavaScript 7.2%
- Python 3.2%
- CMake 1.8%
- Other 1.2%
| .vscode | ||
| 3rdparty | ||
| docs | ||
| icons | ||
| legal | ||
| LICENSES | ||
| qml | ||
| rpm | ||
| scripts | ||
| src | ||
| tests | ||
| translations | ||
| .env.template | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| CMakeLists.txt | ||
| flake.lock | ||
| flake.lock.license | ||
| flake.nix | ||
| harbour-sailreader.desktop | ||
| libwebp-COPYING.txt | ||
| LICENSE | ||
| mise.toml | ||
| README.md | ||
| THIRD_PARTY_NOTICES.md | ||
SailReader
Offline-first Miniflux client for Sailfish OS. Browse cached articles, manage read and starred state, and sync offline changes. Images and selected media can be cached; full articles can be fetched from their source.
Screenshots
| Browse and pin for later | Read cached articles | Keep favorites |
|---|---|---|
![]() |
![]() |
![]() |
Browse headlines, tap the left-hand markers to keep articles for later, mark the rest read, then open your picks and star favorites:
All captures use an isolated demo account and a local mock Miniflux server. Article summaries are based on public NASA, CERN and Mozilla articles; no personal Miniflux data is used. See the overview and capture setup, sources and image credits.
Development
Install mise, the Sailfish OS SDK, and an SDK target. Start the SDK build engine and, for emulator tasks, the Sailfish emulator.
git submodule update --init --recursive
cp .env.template .env # adjust SDK path and target
mise install
mise tasks
mise run test:setup # once per SDK target
mise run test
mise run dev:build # RPMs are written to RPMS/
mise run dev:deploy
mise run dev:run
mise run test:one test_models rebuilds and runs one test after the initial test build.
Tests use the real SDK toolchain; build/compile_commands.json supports editor completion.
Override a target with SAILFISH_SDK_TARGET=<target> mise run dev:build.
For the optional Nix MicroVM, install
Nix on the host and run mise run vm, then SSH to dev@127.0.10.9 on port 2200.
Set the SSH public key and Git identity in .env first. The SDK stays on the host
and is mounted read-only in the VM; the same mise tasks work in both environments.
The VM retains the upstream firewall defaults. When using the VM’s base Python,
MISE_DISABLE_TOOLS=python mise run <task> skips installing a second interpreter. Its base tools include Python/uv,
Node/pnpm and common CLI tools; use uv run --with <package> or
nix shell nixpkgs#<tool> for temporary tools. Project tools belong in mise.toml.
Releases und Herausgeberangaben
Vor einem verteilbaren RPM die ignorierte legal/provider.local.json anhand des
neutralen Beispiels anlegen (Dateimodus 0600):
cp -n legal/provider.example.json legal/provider.local.json
chmod 600 legal/provider.local.json
Der gemeinsame Leitfaden beschreibt
externe Profile und Prüfungen. Bei geänderten Datenflüssen
legal/datenschutz.html.in überprüfen. RPMs verlangen vollständige Angaben.
mise run check:legal
mise run check:sources
mise run check:source-privacy
mise run test:release
mise run check:harbour
mise run release:prepare -- patch --dry-run
mise run release:deploy -- v0.10.0 # nach Vorbereitung, nur auf dem sauberen Tag
SailReader folgt dem gemeinsamen Task-Schema
und Release-Verfahren.
release:prepare erstellt Version, Commit und App-Tag v<version>.
release:deploy prüft Herausgeber, öffentliche Quellen und Datenschutz, baut und
prüft die RPMs für alle drei Architekturen einschließlich Rechtstexten und
Lizenzbeilagen im fertigen Paket (check:rpm) und erzeugt unter
dist/harbour-sailreader-<tag>/ RPMs, Quellarchiv und SHA256SUMS.
Das Quellarchiv enthält ausschließlich versionierte App-Dateien und exakt
gepinnte Submodule; lokale Profile und .env sind ausgeschlossen.
Auch mit --skip-checks bleiben die Pflichtprüfungen erhalten.
Es wird nichts automatisch veröffentlicht. Details stehen unter
Versionen und Releases und im
Publikationsaudit.
License
GPL-3.0-or-later; see LICENSE. Asset exceptions and attribution are listed
in THIRD_PARTY_NOTICES.md. The shared
About and legal helper regenerates the
selected original license texts at configure, build and install time. They ship
in share/harbour-sailreader/licenses/ and are accessible from Settings → About SailReader → Legal. App license, third-party licenses, imprint
and privacy documents are available offline.


