ADR-0001: Flutter for the mobile app
Status: AcceptedDate: 2026-05-02Owner: @satyaContext
Section titled “Context”Treeper ships on phones. We need iOS and Android from day one and we are a small / solo team. We do not (yet) need a web or desktop client.
Realistic options:
- React Native + Expo
- Flutter (managed Dart)
- Native iOS (Swift) + native Android (Kotlin), shared via KMP
Decision
Section titled “Decision”Build the mobile app with Flutter, pinned per-project via
fvm using the latest stable channel.
Alternatives considered
Section titled “Alternatives considered”| Option | Why not |
|---|---|
| React Native + Expo | Fine choice. Flutter wins for us on offline UI fidelity (custom maps, list re-orders) and on |
| a single language for UI + business logic. | |
| Native + KMP | Maximum quality, way too much code for a solo / small team to maintain twice. |
Consequences
Section titled “Consequences”Positive
Section titled “Positive”- One codebase for iOS and Android.
- Strong widget catalogue for the kinds of UIs Treeper needs (lists, drag, maps, image grids).
- Dart’s static typing keeps the codebase legible at scale.
fvmensures everyone runs the same SDK.
Negative / risks
Section titled “Negative / risks”- Flutter’s iOS share-extension story is rougher than RN; expect to drop to native code for the “forward-to-Treeper” extension when we ship F3.1.
- Dart talent pool is smaller than JS/TS — relevant if we hire later.
Follow-ups
Section titled “Follow-ups”- Add a
.fvmrcat the repo root pinning the Flutter channel. - Lint / format / test setup lives in
apps/mobile. - An ADR for state management (likely Riverpod) when we have evidence to decide.