Summary: Flutter, React Native, and Kotlin Multiplatform each have momentum; the winning choice is less about hype and more about your team, modules, and store constraints.
“Write once, run everywhere” was never literally true, but shared UI and business logic across iOS and Android is now normal for mid-size apps. The debate shifted from feasibility to where you want platform-specific polish.
What changed recently
Tooling for debugging, profiling, and native interop matured across stacks. Design systems are portable, and CI pipelines routinely ship both stores from one repo. That lowers the tax on small teams maintaining two native codebases.
Decision checklist
- Existing talent: React shops often lean React Native; Dart/Flutter shops double down there.
- Heavy native features: AR, low-latency audio, or custom drivers may still push you toward thin shared cores with native shells.
- Release cadence: Align branching and feature flags with store review realities—cross-platform does not remove policy risk.
The trend is pragmatic: maximize shared product logic, isolate platform edges, and invest in automated UI tests on real devices. That recipe ships faster without pretending iOS and Android are identical.
Senior Mobile Engineer building AI-native React Native products. Available for freelance contracts.
