At Vextrosys we've shipped 52 production mobile apps since 2022: 31 on Flutter, 21 on React Native (including 6 brownfield migrations). Marketing comparisons rarely survive contact with store review policies, offline-first requirements, or a client mandate to reuse an existing React design system. This article is our internal decision framework, published.
What changed by 2026
- React Native's New Architecture (Fabric + TurboModules) is default in RN 0.76+
- Flutter 3.24+ Impeller is default on iOS; Android GPU backlog largely cleared
- Expo SDK 52 is enterprise-viable: prebuilds, config plugins, EAS for regulated clients
- Kotlin Multiplatform is rising for shared logic - but UI still converges on Flutter or RN
Performance: frames, not benchmarks
Lab benchmarks mislead. We profile with Systrace (Android), Instruments (iOS), and React Native's Performance Monitor on real devices: mid-tier Samsung A-series, iPhone 12, and a 2019 iPad still common in logistics handheld deployments.
Animation and scroll
Flutter still wins for custom-painted UI, complex charts, and 120Hz scroll on lists with heterogeneous cells - the compositor model avoids the JS bridge for layout. React Native with Reanimated 3 + FlashList closes the gap for standard feed UIs; we hit jank when bridging heavy JSON parsing on the JS thread during fast scroll.
// RN pattern we use for heavy lists
<FlashList
data={items}
estimatedItemSize={88}
renderItem={memoizedRow}
onEndReached={fetchNext}
/>When RN surprised us
A B2B field-sales app with 90% standard Material components shipped faster on RN because the team was ex-web and shared 40% code with an admin portal. Time-to-first-PR was 3 days vs. 9 on a comparable Flutter greenfield.
Developer experience and hiring
- Flutter: stricter structure, excellent tooling, Dart is a hiring filter in some markets
- RN: larger talent pool, easier onboarding for React devs, more copy-paste Stack Overflow risk
- Hot reload: both are good; Flutter's stateful hot reload is more reliable for UI iteration
- Debugging: RN benefits from Chrome/Hermes; Flutter DevTools wins for layout inspection
Pick the stack your team can maintain in year three, not the stack that wins a hackathon demo.
Native modules and platform risk
Bluetooth LE medical devices, background geofencing, and PCI-adjacent SDK integrations force native code. Flutter's platform channels are stable; RN TurboModules reduce async overhead but increase codegen complexity. We maintain an internal matrix of vetted plugins - 23% of pub.dev packages we evaluated were abandoned or incompatible with current AGP.
- Prefer first-party or widely adopted plugins (camera, maps, secure storage)
- Budget 2-4 weeks per custom native module with full test coverage on both OS versions
- For RN: pin Expo SDK and run prebuild diffs in CI when upgrading
- For Flutter: verify Impeller compatibility for custom shaders and Rive animations
App size, startup, and store compliance
Flutter release APKs average 18-22MB larger than equivalent RN for our templates (fonts + engine). RN with Hermes + Proguard can ship sub-40MB for content apps. Startup: Flutter cold start ~320ms median on Pixel 6; RN ~380ms unless we defer native module init. Both pass Apple and Google review when privacy manifests and data safety forms are done correctly - RN's web heritage helps teams already familiar with cookie/consent patterns.
Brownfield and code sharing
If you have a React web app and want one team, RN + Expo is the rational default. If you need pixel-perfect brand systems across mobile and no web team, Flutter's widget consistency wins. KMM for shared business logic works with either UI layer - we've done it twice for fintech calculation engines.
Decision matrix (simplified)
Choose Flutter for: heavy custom UI, embedded devices, multiple platforms including web/desktop from one codebase. Choose RN for: existing React org, rapid MVP with Expo, heavy OTA via CodePush alternatives (EAS Update). Choose native for: AR/VR, ultra-low latency audio, or OS-beta features.
Maintenance and upgrades
Flutter major upgrades are predictable twice a year; breaking changes are documented. RN upgrades are project-dependent: New Architecture migration cost us 3-6 engineer-weeks per medium app in 2025. We now schedule RN upgrades quarterly with Detox E2E gates and screenshot diff on 8 devices in BrowserStack.
- Document plugin ownership and fallback native implementations
- Keep business logic in pure Dart/TS packages testable without simulators
- Instrument startup, ANR, and crash-free sessions in Datadog or Sentry from week 1
- Run device farms on minimum supported OS, not just latest iPhones
There is no universal winner. In 2026 both stacks deliver production-quality consumer and B2B apps. Vextrosys picks based on team DNA, integration surface, and five-year maintenance cost - then commits without half-measures. Hybrid Flutter+RN in one app is a last resort we've regretted twice.