Skip to content

ADR-0001: Flutter for the mobile app

Status: Accepted
Date: 2026-05-02
Owner: @satya

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

Build the mobile app with Flutter, pinned per-project via fvm using the latest stable channel.

OptionWhy not
React Native + ExpoFine choice. Flutter wins for us on offline UI fidelity (custom maps, list re-orders) and on
a single language for UI + business logic.
Native + KMPMaximum quality, way too much code for a solo / small team to maintain twice.
  • 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.
  • fvm ensures everyone runs the same SDK.
  • 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.
  • Add a .fvmrc at 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.