Mobile architecture decision records¶
The ten binding decisions for the YazSes mobile programme. They are public on purpose: the Android app is being built by contributors, and you cannot contribute to an architecture you are not allowed to read. Every one of them follows the same shape — Context, Decision, Consequences, Rejected — and the Rejected section is usually the most useful part, because it tells you which arguments have already been had.
| ADR | Title | Status |
|---|---|---|
| MOB-001 | Mobile is a first-class port, Android first, in this repository | Accepted |
| MOB-002 | Native Kotlin + Compose, pure-Kotlin cores, no cross-platform runtime | Accepted |
| MOB-003 | Text delivery: IME first, RecognitionService second, share/clipboard fallback | Accepted |
| MOB-004 | Activation: hold the mic key, with a hold/toggle accessibility switch | Accepted |
| MOB-005 | STT runtime: an engine seam, whisper.cpp default, sherpa-onnx second | Accepted |
| MOB-006 | Models downloaded, verified and user-owned; never bundled | Accepted |
| MOB-007 | Permission budget, one networked module, CI-enforced privacy gate | Accepted |
| MOB-008 | One behaviour, many implementations: a contract with golden vectors | Accepted |
| MOB-009 | F-Droid-shaped by default; GitHub APK first, Play later | Accepted |
| MOB-010 | The Apple wave: iOS/iPadOS is a different product shape | Accepted (deferred execution) |
Reading notes¶
- Links to ADR-011, ADR-v2-129 and similar point into the desktop ADR series, which is public under
design/adr/and published on this site under Engineering (design) → Decision records. Where a desktop ADR is load-bearing for a mobile decision, the mobile ADR restates what it says, so you never need the original. The most important one, ADR-011 (zero telemetry, offline by default, no cloud fallback, no ambient capture), is published in user-facing form as the privacy statement, and it governs the Android app unchanged. - "Accepted" here means the decision is binding, not that the code exists. Some of these decisions are now partly implemented under
android/: the module skeleton and its layering and privacy gates, and the first pure-Kotlin cores that pass the shared contract vectors. The others have no code yet, and there is still no app to install. Where an ADR's own status line says "design only, no code yet", it records the state on the day it was accepted (2026-08-07), not today's. See the programme overview for what exists today and where each milestone stands. - To change a decision, open a PR adding a new ADR that supersedes the old one. Do not edit an accepted ADR to say something different from what was decided; the point of the series is that the reasoning survives the decision.