React Native vs Flutter
Both build good apps. Pick the one that fits the rest of your stack.
Choose React Native when you also have a React or Next.js web app, because one TypeScript team can then build both. Choose Flutter when the app is the whole product, you want pixel-identical UI on every platform, and your team is happy to learn Dart. We ship React Native with Expo in GymFast, NoteTube, and Kraftr. We have not shipped Flutter.
Updated · Acasa Labs
At a glance
React Native and Flutter, side by side.
| Dimension | React Native | Flutter |
|---|---|---|
| Made by | React NativeMeta, with a large open-source community | FlutterGoogle |
| Language | React NativeJavaScript or TypeScript | FlutterDart |
| How it draws the UI | React NativeReal platform views, driven from JavaScript | FlutterIts own rendering engine draws every pixel |
| Look and feel | React NativeNative controls by default; matches each platform | FlutterIdentical on every platform; platform styles are recreated |
| Code sharing with web | React NativeTypes, API clients, and logic shared with a React web app | FlutterFlutter web exists; sharing with a React site is limited |
| Tooling | React NativeExpo for builds, signing, and over-the-air updates | FlutterFlutter CLI and DevTools, an integrated, single toolchain |
| Native code | React NativeSwift, Kotlin, or Expo Modules when you need them | FlutterPlatform channels and plugins in Swift and Kotlin |
| Over-the-air updates | React NativeEAS Update or a self-hosted equivalent | FlutterNot built in; third-party services such as Shorebird |
| Hiring | React NativeAny strong React developer can learn it quickly | FlutterDart is mostly used for Flutter, so the pool is Flutter specialists |
| Licence | React NativeMIT | FlutterBSD-3-Clause |
01
The honest summary
React Native and Flutter are both mature, both power apps with millions of users, and both will build your app well if the team using them knows what it is doing. Most comparison pages pick a winner. The more useful question is which one fits the rest of your company: your web stack, your hiring, and the kind of interface you want.
We use React Native, so weigh our view accordingly. We chose it because almost every client we work with also has a web app in React or Next.js, and one TypeScript team across web and mobile is worth more to them than any difference between the frameworks. If that is not true for you, Flutter deserves a serious look.
02
How they differ underneath
React Native renders real platform views. A button in a React Native app is an iOS button on an iPhone and an Android button on a Pixel, arranged by your JavaScript code. Since the New Architecture became the default, JavaScript talks to native code directly through JSI rather than through a serialised bridge, which removed the main performance complaint of older versions.
Flutter does not use platform views for its interface. It ships its own rendering engine and draws every pixel itself, using widgets written in Dart that imitate Material and Cupertino styles or follow your own design. That gives you identical rendering on every device and fine control over animation, at the cost of not getting platform controls for free.
Neither approach is better in general. If your brand wants a custom, consistent interface everywhere, Flutter's model is a natural fit. If you want the app to feel like the platform it runs on, React Native's model gives you that by default.
03
When React Native is the better choice
Pick React Native when you have, or will have, a React or Next.js web app. Types, API clients, validation schemas, and business logic can be shared, and the same developers can work on both. For a small company that is often the difference between one team and two.
Pick it when you want over-the-air updates for JavaScript fixes. With Expo, a bug fix that does not touch native code can reach users without a full store release, within the app store rules.
And pick it when hiring matters. TypeScript and React are among the most widely known skills in software, and a good React developer becomes productive in React Native quickly.
04
When Flutter is the better choice
Pick Flutter when the app is the product and there is no React web app to share with. A mobile-first company with a small marketing site gains little from React Native's web overlap.
Pick it when the interface is highly custom: heavy animation, a strong brand look that must match exactly on iOS and Android, or a design system that does not want platform controls at all. Flutter's rendering model is built for that.
And pick it when your team already knows Dart and Flutter. A team's existing skill beats any framework advantage, and Flutter's integrated toolchain and widget catalogue are well liked by the people who use them.
05
Performance, briefly
For normal app work, such as lists, forms, navigation, maps, and media, both are fast enough that users will not tell the difference. Slow apps in either framework are usually slow because of how they were built: too many re-renders, huge images, or work on the main thread.
Where you need native performance for one feature, such as on-device processing or a custom camera pipeline, both let you write that part in Swift or Kotlin. If most of the app is that kind of work, the better comparison is native against cross-platform, not React Native against Flutter.
From production
What React Native has done for us. We have no Flutter apps to show.
Three apps, one API, one team
GymFastGymFast's staff, member, and trainer apps are Expo and React Native in a Turborepo monorepo, sharing a token-authenticated mobile API with the Next.js web dashboard. Each gym's brand colors theme the web dashboard and the apps from one setting.
A mobile app beside four other surfaces
NoteTubeNoteTube's Expo app sits next to a Next.js web app, a Chrome extension, and an MCP server on one backend. Stripe on the web, RevenueCat in the apps, and a scheduled job reconciles subscriptions between them.
A companion app for a web studio
KraftrKraftr's studio runs on the web and in a companion Expo app for iOS and Android, on the same Next.js and Postgres backend.
How we choose
The five questions we ask before choosing
A React web app, a TypeScript team, or a need for frequent updates points to React Native. A mobile-only product with a custom interface and a Dart team points to Flutter.
- 01Is there a React or Next.js web app, now or on the roadmap?
- 02Should the app look like iOS and Android, or like your brand everywhere?
- 03What does the team that will maintain it already know?
- 04How much of the app needs native code for device features?
- 05How often will you ship fixes, and do over-the-air updates matter?
Questions
React Native vs Flutter, asked often.
Which is faster, React Native or Flutter?
For typical apps, both are fast enough that users cannot tell. Performance problems in either usually come from how the app was built, not from the framework.
Do you build Flutter apps?
No. We build React Native with Expo, and native SwiftUI when a project calls for it. If Flutter is the right fit for you, we will say so and you should hire a Flutter team.
Can React Native share code with our website?
Yes, with a React or Next.js website. Types, API clients, validation, and business logic are shared directly. Screens are usually written separately for web and mobile.
Is React Native still a good bet?
Yes. It is actively developed by Meta and the community, the New Architecture is the default, and Expo covers builds, updates, and most native APIs.
Can we move a Flutter app to React Native?
It is a rewrite, since the languages differ. It makes sense only if you are consolidating onto a React web stack or cannot hire for Dart.
React Native vs Flutter
Not sure which one? Tell us about the app.
Who uses it, what they do in it, and what else you run. We will tell you whether React Native fits, and say so if it does not.