Choose Mobile Stack

Mobile choices are permission and distribution choices first. UI framework preference comes second.

Decision Table

NeedPickWhyAvoid when
Android-first, Android APIs, Play policy, SMS, budget devicesKotlin + Jetpack ComposeOfficial native UI path, direct platform APIs, Material 3, Android Studio toolingiOS parity is mandatory at launch
iOS-only, Apple-native experienceSwiftUIBest Apple API and App Store fitAndroid is the actual first market
Android+iOS with standard native APIs and React skillsExpo/React NativeEAS Build/Submit/Update, dev builds, curated native modulesNative modules dominate immediately
Highly branded identical UI across platformsFlutterOne rendering model across mobile, desktop, and webNative platform feel is the selling point
Android-first with future shared logicKotlin MultiplatformShare business logic without forcing shared UI too earlyYou need fastest simple v1 and no shared logic yet
Forms/content with broad reachPWALowest install friction, one web codebaseRestricted permissions or reliable background work are core

Android Native Wins When

  • SMS, telephony, background work, local files, biometrics, widgets, or deep permissions are core.
  • Play policy and permission declarations are part of the product risk.
  • Budget Android devices are the real test environment.
  • Native Android UX and Material 3 polish build trust.

Expo/React Native Wins When

  • Android and iOS must ship together.
  • The team is strongest in React/TypeScript.
  • Native needs are standard enough for Expo SDK or development builds.
  • EAS Build, Submit, and Update reduce release friction.

Flutter Wins When

  • The UI should look consistent across platforms.
  • You value one rendering model more than platform-native feel.
  • Dart and Flutter-specific architecture are acceptable product costs.

Gotcha: Cross-platform mobile does not remove store policy, permission review, device testing, or native escape hatches. It just changes where you pay for them.