- Rust 63.9%
- QML 17.1%
- Shell 11%
- Python 5.1%
- C++ 2.3%
- Other 0.6%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| .claude | ||
| .forgejo/workflows | ||
| .githooks | ||
| assets | ||
| core | ||
| docs | ||
| po | ||
| presets | ||
| qml | ||
| qt | ||
| spikes | ||
| sword | ||
| tools | ||
| .clang-format | ||
| .clang-tidy | ||
| .gitattributes | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CLAUDE.md | ||
| clickable.yaml | ||
| clippy.toml | ||
| CMakeLists.txt | ||
| deny.toml | ||
| lectern.apparmor | ||
| lectern.desktop | ||
| LICENSE | ||
| Makefile.toml | ||
| manifest.json | ||
| NOTICES.md | ||
| README.md | ||
| rustfmt.toml | ||
Lectern
Lectern is offline Bible study: a native app for Ubuntu Touch, and later other Linux phones, with the study features of AndBible in a design of its own. It's for people whose phones can't run Waydroid, and it is meant to run well on old, low-memory phones. It reads the same SWORD modules as AndBible.
Core features (docs/04-features.md):
- Starter sets: a ready-made download of recommended Bibles, lexicons and cross-references on first run
- Strong's / Greek and Hebrew references, toggled with one tap; tap a word for its lexicon entry and parsing
- Words of Jesus in red (where the module marks them)
- Verse per line or running text, with adjustable spacing
- Concordance: Strong's (grouped by translation), word, and topical (Nave's, Torrey's)
- Cross-references you can follow: popup with the verse text, jump, back to where you were; Treasury of Scripture Knowledge for every verse
Status: phase 0 done (spikes under spikes/; the SWORD reader lives
in sword/). The app skeleton opens the first installed Bible and pages
through chapters; phase 1 (a real reader) is next.
The decision in short
| Layer | Choice |
|---|---|
| Core logic | Rust workspace with no Qt dependency (sword, core) |
| SWORD modules | Our own pure-Rust reader (sword/), written from the file formats and pinned to SWORD's output by golden tests; versification tables and book names from JSword (LGPL-2.1-or-later). Not libsword: it is GPL-2.0-only |
| Text rendering | Native: Rust builds a render model, and QML shows it in a ListView of rich-text blocks. No web view anywhere |
| UI | QML with QtQuick.Controls 2 (Suru style on UT). Lomiri only in a thin platform layer |
| Rust ↔ Qt | cxx-qt: QObjects and list models declared in Rust over the Qt-free crates (spike S3) |
| Storage | One SQLite file (rusqlite), our own schema. State saved within about 1 s of a change |
| Search, concordance | Scans the compressed text directly, no index for Bibles. Optional tantivy index for big modules |
| Sync | Our own format over Nextcloud/WebDAV (v0.4). Foreground only, atomic uploads. Optional one-way AndBible import |
| Targets | UT 24.04: Volla phones perfect (tier 1), community ports good-faith (tier 2). Later UT 26.04 / Qt 6, and Flatpak for other Linux phones. No UT 20.04 |
| Licence | GPL-3.0-or-later |
Resource budgets (targets): ≤ 80 MB peak PSS with one window, ≤ 2 s cold start, ≤ 15 MB click, on a 3–4 GB phone from about 2019–2020 (the original Volla Phone sets the speed budgets).
Documents
- docs/01-pathway.md: phased roadmap, starting with four spikes
- docs/02-tech-stack.md and docs/02-tech-stack-app.md: decisions D1–D4 and D5–D11, with the options that were rejected
- docs/03-architecture.md: crates, render model, data flow, threading, testing
- docs/04-features.md: the core features F1–F6, other features → releases and effort, design direction
- docs/05-risks.md
- docs/06-sources.md: what was checked, and what still needs checking
- docs/07-platform-constraints.md: Ubuntu Touch's suspension, confinement and other limits, how we handle them, and the resource budgets
- docs/08-module-presets.md: proposed starter sets, candidate modules with features and licences, data gaps
- docs/09-quality-gates.md: the Rust, C++ and QML gates, where each runs, and what comes next
Relationship to AndBible
This is an independent community project, not affiliated with or endorsed by the AndBible team. AndBible's feature set is the inspiration; the UI, database and sync format are our own. It ports module-reading logic from JSword (LGPL-2.1-or-later). The name is a placeholder that avoids existing Bible-software trademarks.