Let's chat

React Native vs Flutter vs Native — the practitioner comparison for 2026

This is not a feature matrix disguised as an article. You can find those anywhere. This is the comparison I wish someone had written for me before I chose a mobile framework for my own product — and the one I give to every founder and CTO who asks.

I ship with React NativeReact Native and ExpoExpo. I chose it deliberately, and I’ll tell you exactly why. I’ll also tell you when FlutterFlutter is the better call, and when you should skip cross-platform entirely and go native. The answer depends on your team, your product, and your timeline — but it’s rarely “it depends.”

The bottom line

Use React Native with Expo. The JavaScript talent pool is 10x larger than Dart, the tooling has matured dramatically, and the performance gap with Flutter is negligible for standard business apps. Choose Flutter only for animation-heavy custom UIs. Go native only for games or deep hardware integration.

React Native in 2026 — not the framework you remember

If your impression of React Native was formed before 2024, throw it out. The framework has gone through the most significant transformation in its history. The old “bridge” architecture — the thing that made React Native sluggish in complex interactions — is gone. Completely removed from the runtime as of version 0.82 in October 2025. What replaced it is a fundamentally different system.

React Native’s New Architecture replaced the serialized message bridge with JSI — a JavaScript Interface that lets JavaScript and native code communicate directly and synchronously. No more serialization overhead. The VisionCamera library, for context, processes roughly 2 GB per second through this interface. That is not “good enough.” That is fast.

On top of JSI, the new Fabric renderer enables synchronous layout in a single commit cycle. In practice, this means the visual jumps and flashing that plagued complex React Native UIs are gone. useLayoutEffect works properly for the first time. Concurrent rendering from React 18+ is fully supported — Suspense, Transitions, automatic batching. These are not theoretical features. They ship in production apps today.

The adoption numbers back this up. The State of React Native 2025 survey found 80% of developers surveyed are already on the New Architecture. Meta battle-tested it at scale in Facebook and Instagram before rolling it out to the ecosystem.

Under the hood: Hermes V1 and the React Compiler

HHermes V1 became the default JavaScript engine in React Native 0.84 (February 2026). On a low-end Android device running the Expensify app, it delivered a 7.6% reduction in total time-to-interactive. On iOS, bundle loads are 9% faster with content time-to-interactive improving by 7.5%. No migration required — if you’re already using Hermes, you get these gains for free.

The React Compiler hit v1.0 stable in 2026. It automatically memoizes components and hooks, eliminating manual useMemo, useCallback, and React.memo calls. Meta’s production results at the Quest Store showed 12% faster initial loads and 2.5× faster interactions with neutral memory usage. It ships as the default in Expo SDK 54+.

Who ships with React Native

The “React Native can’t handle production scale” argument died years ago. Here’s what’s running on it today:

Company Scale Notable detail
Shopify 300 screens, millions of merchants Sub-500ms P75 screen loads. 86% code unification. Migrated to New Architecture while maintaining weekly releases.
Discord Millions of daily users 98% code sharing between iOS and Android. 99.9% crash-free rate.
Instagram 2 billion users Meta’s own flagship. React Native for core features.
Tesla Vehicle control app Real-time battery, charging, lock/unlock — with native Swift/Kotlin for platform-specific needs.
Walmart Global retail 95% code sharing across platforms.
Coinbase, Bloomberg, Uber Eats, Pinterest All shipping production React Native apps.

Shopify

Scale 300 screens, millions of merchants
Detail Sub-500ms P75 screen loads. 86% code unification. Migrated to New Architecture while maintaining weekly releases.

Discord

Scale Millions of daily users
Detail 98% code sharing between iOS and Android. 99.9% crash-free rate.

Instagram

Scale 2 billion users
Detail Meta’s own flagship. React Native for core features.

Tesla

Scale Vehicle control app
Detail Real-time battery, charging, lock/unlock — with native Swift/Kotlin for platform-specific needs.

Walmart

Scale Global retail
Detail 95% code sharing across platforms.

Coinbase, Bloomberg, Uber Eats, Pinterest

Detail All shipping production React Native apps.
Builder’s note

The React Native ecosystem has doubled to 4 million weekly npm downloads. In 2025, Meta donated React Native to the React Foundation under the Linux Foundation — a signal that the framework’s future is not dependent on a single company’s priorities. That matters more than any benchmark.

Warning

Skip React Native upgrades for 18+ months and you’ll face a 2-month migration debt. Apple can reject your app for outdated dependencies. Budget for monthly or quarterly upgrade cycles and dependency hygiene from day one.

Flutter in 2026 — the rendering engine you can’t ignore

Flutter’s core advantage is not DartDart. It’s not Google’s backing. It’s the rendering engine. FlutterFlutter draws every pixel itself using ImImpeller — a custom renderer built from the ground up for Flutter, using Metal on iOS and Vulkan on Android. This means pixel-perfect consistency across platforms and, crucially, a solution to the “first-run stutter” problem that plagued earlier versions.

Impeller precompiles all shaders ahead of time, before the user opens the app. This eliminates the runtime shader compilation jank that was Flutter’s most valid criticism. The results are measurable: average frame rasterization time is down roughly 50% in complex scenes, worst-case frame times stay consistently under 8ms (the threshold for 120Hz displays), and dropped frames are reduced by 90%.

Flutter targets 60 and 120 FPS consistently. Under heavy rendering loads — complex animations, custom transitions, particle effects — Flutter maintains frame rates where React Native’s JavaScript thread contention can cause drops to 45–50 FPS. This is the real gap: for standard business apps, you will not notice it. For animation-heavy products, it matters.

Flutter compiles to ARM native code via AOT (Ahead-of-Time) compilation. There is no runtime interpretation. The app loads faster because of it. The trade-off is app size — roughly 4–7 MB larger than a React Native equivalent due to the bundled rendering engine.

Who ships with Flutter

Company Scale Notable detail
Google Pay 50–100M+ users Google’s own payments flagship.
Nubank 50–100M+ users Largest digital bank in Latin America.
BMW “My BMW” app, 47 countries In-vehicle experience across global markets.
Toyota In-vehicle UX Chose Flutter for performance in constrained environments and fast iteration.
eBay Motors Beta shipped in 3 months.
Betterment, GEICO, SoFi Financial services is Flutter’s strongest vertical.

Google Pay

Scale 50–100M+ users
Detail Google’s own payments flagship.

Nubank

Scale 50–100M+ users
Detail Largest digital bank in Latin America.

BMW

Scale “My BMW” app, 47 countries
Detail In-vehicle experience across global markets.

Toyota

Scale In-vehicle UX
Detail Chose Flutter for performance in constrained environments and fast iteration.

eBay Motors

Detail Beta shipped in 3 months.

Betterment, GEICO, SoFi

Detail Financial services is Flutter’s strongest vertical.
The fine print: the Google Graveyard question

You have to address it because every CTO thinks about it. Google has a documented history of killing products. Is Flutter next?

The mitigating factors are substantial. Flutter Enterprise subscriptions generate direct revenue. DartDart powers Google Ads, which represents 80% of Google’s revenue. Major enterprises (BMW, Toyota, Nubank) have bet production infrastructure on it. And the organizational shift — Flutter moved under Google Cloud — signals positioning as an enterprise platform, not a side project.

The realistic assessment: for projects with a 3–5 year lifespan, Flutter is a safe bet. For significantly longer horizons, architect your business logic so it’s separable from the UI layer — which is good practice regardless of framework choice. Keep your Dart-specific code in the rendering layer, not in your domain logic.

Warning

If your key Dart developer leaves, you’re looking at a 3-month hiring delay and plugin breakage risk. Hire at least one developer with native iOS or Android experience early, and audit third-party plugins before depending on them in production.

Native development — when cross-platform is not the answer

SuSwiftUI on iOS and JCJetpack Compose on Android are both mature, declarative, and a pleasure to work with in 2026. If the question were only about developer experience, going native would be a strong contender. But the question is never only about developer experience. It’s about cost, time, and maintenance — and native means two codebases, two teams, and every feature implemented twice.

The advantages of native are real but specific. Direct hardware access gives you the best possible performance, battery life, and responsiveness. You get day-zero access to platform features the moment Apple or Google ships an OS update — cross-platform frameworks always lag by weeks or months. And native apps feel native because they are: design guidelines are followed by default, not approximated.

The security story is also stronger. Direct access to platform-specific biometric authentication, secure enclaves, and Keychain/Keystore APIs matters for healthcare and financial applications where security is a regulatory requirement, not a feature.

But the cost equation is unforgiving. Maintaining two codebases typically runs 15–20% of initial development cost per year, on top of staffing two distinct skill sets. Cross-platform alternatives save 25–50% on development and ship roughly 1.5× faster. For most startups, that difference is the difference between launching and running out of runway.

Go native when: gaming, real-time video, AR/VR, deep hardware integration, or single-platform only.

The third path: Kotlin Multiplatform

KMKotlin Multiplatform is the newest serious contender. Stable since November 2023, officially recommended by Google for sharing business logic between Android and iOS. The idea: write your domain logic once in KotlinKotlin, keep the UI native per platform (or share it via Compose Multiplatform, which reached stable in May 2025).

Market share jumped from 12% to 23% in 18 months. Netflix, McDonald’s, and Cash App (7+ years of KMP in production) are notable adopters. The ecosystem has 2,500+ KMP-specific libraries plus access to the entire Android/Java ecosystem.

For this page’s audience: KMP is worth watching if your team already has deep Kotlin expertise. For most startups choosing a framework today, React Native or Flutter remain the pragmatic choices — KMP’s ecosystem and talent pool are still significantly smaller.

The comparison that matters

Feature matrices are easy to build and hard to act on. Instead of listing every difference, I’ll focus on the dimensions that actually drive the decision: performance, developer hiring, code sharing, and the day-to-day of shipping an app.

Performance benchmarks

A 2025 controlled benchmark by SynergyBoat tested Flutter, React Native (Expo), and native iOS/Android on identical hardware with identical test scenarios. Here’s what the data showed:

Metric React Native Flutter Native
First frame Most consistent across runs Quickest (<50ms) iOS has occasional slow outliers
Steady-state 60Hz Smooth — room for improvement on iOS Most spare rendering time at target Android native is a close second
Memory growth (scroll test, iOS) +33 MB (higher variance) +14 MB (very consistent) Least growth
App size (simple app) Largest with Expo; trimmable without ~18.3 MB (mid-range) Smallest
iOS rebuild speed Middle Slowest (~40s) but predictable Fastest

First frame

React Native Most consistent across runs
Flutter Quickest (<50ms)
Native iOS has occasional slow outliers

Steady-state 60Hz

React Native Smooth — room for improvement on iOS
Flutter Most spare rendering time at target
Native Android native is a close second

Memory growth (scroll test, iOS)

React Native +33 MB (higher variance)
Flutter +14 MB (very consistent)
Native Least growth

App size (simple app)

React Native Largest with Expo; trimmable without
Flutter ~18.3 MB (mid-range)
Native Smallest

iOS rebuild speed

React Native Middle
Flutter Slowest (~40s) but predictable
Native Fastest
Builder’s note

These benchmarks measure framework overhead — not real-world app performance. In practice, your bottleneck is almost always your API response time or bad state management, not the framework. Shopify serves millions of merchants on React Native with sub-500ms screen loads. The “React Native is slow” argument is five years out of date.

The hiring reality

This is where the comparison gets practical. React Native uses JavaScript and TypeScript — the most widely known programming languages in the world. Any React web developer can transition to React Native with minimal ramp-up. The talent pool is substantially larger: React Native job postings consistently outnumber Flutter positions by a wide margin. Senior developers are easier to find, and salary expectations tend to be slightly lower than for Flutter specialists (who need Dart experience that fewer developers have).

Flutter requires DartDart — a language that barely exists outside the Flutter ecosystem. It’s well-designed, but it’s niche. Finding senior Flutter developers takes 2–3× longer. If your key Dart developer leaves, you’re looking at a 3-month hiring delay plus the risk of plugin breakage while the role is unfilled.

For a startup: the framework you can hire for is the framework you can maintain. Technical elegance means nothing if your bus factor is one.

OTA updates — the sleeper advantage

Over-the-air updates are a React Native advantage that most comparisons underplay. With ExpoExpo’s EUEAS Update, you can push JavaScript and asset changes directly to users’ devices — no App Store review, no 3–7 day wait. SDK 55 introduces bytecode diffing, shrinking update sizes by an estimated 75%.

This matters more than it sounds. A production bug on Friday afternoon? Push a fix in 10 minutes, not 5 business days. A client demo on Monday that needs a copy change? Done before lunch. For startups iterating fast, OTA is not a nice-to-have. It’s a competitive advantage.

Flutter has an equivalent in ShShorebird (founded by Eric Seidel, Flutter’s co-founder), but it’s newer and less battle-tested than React Native’s OTA ecosystem. Native apps have no OTA equivalent — every change requires a full binary submission through the store.

Decision framework — matching your situation to a framework

The right framework depends on three things: what your team knows, what your app does, and how fast you need to move. Here’s the decision sequence I walk through with every client.

What kind of mobile app are you building?
Builder’s note

Notice that “which framework has more GitHub stars” and “which framework has a nicer logo” are not on this list. The factors that actually determine success are team skills, hiring plans, and UX requirements. Not benchmark scores and not Reddit opinions.

98%
CODE SHARING
Discord — iOS and Android from a single React Native codebase
<500ms
P75 SCREEN LOADS
Shopify — serving millions of merchants on React Native
80%
NEW ARCH ADOPTION
State of React Native 2025 survey
4M
WEEKLY NPM DOWNLOADS
React Native ecosystem — doubled from 2024

Why I chose React Native + Expo — and when I wouldn’t

I build with React NativeReact Native and ExpoExpo. I chose it for Tortie — a couple expense tracker — and I used Expo to build a proof-of-concept native app at Iris Galerie so the API team could test end-to-end the full chain from API to Adyen payments to mobile before handing off operational endpoints to the dedicated mobile dev team. These are real products, not tutorial apps.

Here’s my reasoning, and it’s not complicated:

JavaScript leverage is a business decision, not a technology decision.

A startup founder either has web developers or can hire them easily. React Native lets those developers build mobile apps without learning a new language. You don’t need to find a “mobile developer.” You need to find a good JavaScript developer — and there are millions of them.

Expo eliminates mobile-specific overhead.

Most of the pain of mobile development — build configurations, code signing, app store submissions, push notification setup, even native module compilation — is abstracted away by Expo’s managed workflow. For a startup, this is not weeks saved. It’s months saved. And with Expo SDK 55, the managed workflow runs entirely on the New Architecture. The escape hatch to bare workflow exists but is increasingly unnecessary.

OTA updates are a genuine competitive advantage.

Being able to push bug fixes and improvements without waiting for App Store review (3–7 days) means you iterate faster than competitors stuck in the binary submission cycle. For a startup in product-market fit search, this speed compounds.

The performance argument is over.

With the New Architecture, HHermes V1, and the React Compiler, the “React Native is slow” criticism is outdated. Shopify serves millions of merchants at sub-500ms screen loads. Discord runs at 99.9% crash-free with 98% code sharing. If React Native’s performance is good enough for Instagram’s 2 billion users, it’s good enough for your startup.

When I’d recommend something else

I’d recommend Flutter if the app’s primary value proposition is visual — if animations, custom transitions, and a highly branded UI are what makes the product special. Flutter’s Impeller engine is objectively better at complex rendering, and if that’s your core, the Dart hiring cost is justified by the result.

I’d recommend native if the app needs to do something the platform does at the hardware level — real-time video processing, advanced AR, game-engine-level rendering, or specialized sensor integration. These are legitimate use cases where the abstraction of a cross-platform framework gets in the way.

What I would not do is choose Flutter because “it has more GitHub stars” or native because “it’s more professional.” Those are emotional arguments, not engineering decisions.

Building a mobile app?

I build and ship React Native apps with Expo. If you are weighing your options or ready to start, let’s talk through it.

Frequently asked questions

Is React Native fast enough for production apps in 2026?

Yes. React Native with the New Architecture (Fabric renderer, TurboModules) closes the performance gap with Flutter for standard apps — forms, lists, maps, payments, push notifications. The remaining difference is measurable in benchmarks but imperceptible to users in typical business applications.

Should I learn Dart for Flutter or stick with JavaScript?

Stick with JavaScript unless your team is starting fresh with no existing web codebase. The JavaScript ecosystem is vastly larger, hiring is easier, and you can share code between your web app and mobile app. Dart is a fine language, but the talent pool constraint is real for startups hiring in Europe.

Can I share code between a React web app and a React Native mobile app?

Yes — business logic, API clients, state management, and validation can be shared directly. UI components cannot be shared as-is since React Native uses native primitives, not DOM elements. Expect 70–80% code reuse for well-structured apps, mostly in the non-UI layers.

Is Expo ready for production apps?

Yes. Expo has matured significantly — EAS Build handles native compilation, Expo Router provides file-based navigation, and most native modules are now available through expo-modules. The days of ejecting from Expo for basic native functionality are largely over.

When should I choose native iOS/Android over cross-platform?

Go native when your app requires deep hardware integration (AR, real-time camera processing, Bluetooth LE), when you are building a game with a custom rendering engine, or when your team already has dedicated iOS and Android developers. For everything else, cross-platform saves 40–60% of development time.

How long does it take to build a mobile app with React Native?

A functional MVP with authentication, core screens, push notifications, and App Store submission typically takes 8–12 weeks for a senior developer. Factor in 2–4 additional weeks for App Store review iterations and platform-specific polish. This is roughly half the timeline of building native apps for both platforms separately.

Sources and tools

Research cited

Tools mentioned

  • React NativeReact Native — build native mobile apps using React
  • FlutterFlutter — Google’s UI toolkit for cross-platform apps
  • ExpoExpo — platform for building React Native apps
  • SwiftSwift — Apple’s language for iOS development
  • SuSwiftUI — Apple’s declarative UI framework
  • KotlinKotlin — modern JVM language for Android
  • JCJetpack Compose — Android’s modern UI toolkit
  • HHermes — JavaScript engine optimized for React Native
  • ImImpeller — Flutter’s rendering engine
  • DartDart — programming language that powers Flutter
  • ShShorebird — code push for Flutter
  • EUEAS Update — over-the-air updates for Expo apps
  • KMKotlin Multiplatform — share Kotlin code across platforms

Let's talk about what you're building.

30-minute call. No pitch deck. Just tell me what you're trying to build. I'll tell you how I'd approach it.

High StickersPAJ by ImparatoIris GaleriePlancton by PimpantKoudetatCHU NantesGuest SuiteAsmodeeRobin des Fermes #1Meme pas CapDrakkarHigh StickersPAJ by ImparatoIris GaleriePlancton by PimpantKoudetatCHU NantesGuest SuiteAsmodeeRobin des Fermes #1Meme pas CapDrakkar