Decisions5 min read
Flutter vs React Native: how to choose for a business app
By Sannan MalikPublished
Short answerChoose by the team that will maintain the app, then by the interface. Flutter draws every pixel itself with its Impeller engine, so one design looks the same on Android and iOS. React Native creates the platform's own Android and iOS views from React components, so a team that already writes React and JavaScript can reuse those skills. I build in Flutter, but if React developers will own the app, React Native is usually the better pick.
Two ways of putting a screen on the phone
Both frameworks give you one codebase for Android and iOS. That part is a tie. The difference is what happens between your code and the pixels.
Flutter brings its own widgets. Its architecture guide says it has its own implementation of each UI control rather than using the ones the system provides, and that the Dart code is compiled to native code and rendered with Impeller. Impeller ships inside your app and precompiles its shaders when the engine is built, so they do not compile while the user is scrolling. It is the only rendering engine on iOS and the default on Android API 29 and above, falling back to OpenGL on older devices. For release, Dart is compiled straight to machine code.
React Native takes the opposite route. You write React components in JavaScript, and at runtime React Native creates the matching Android and iOS views. Its New Architecture, on by default since version 0.76, replaced the old asynchronous bridge with JSI, which lets JavaScript hold a direct reference to native C++ objects. It also brought React 18 features such as automatic batching and synchronous layout reads.
So Flutter gives you the same screen everywhere. React Native gives you the platform's own controls, driven by React. I covered Flutter against fully native Swift and Kotlin apps in a separate post; this one is about choosing between the two cross-platform options.
The decision table I would use
Read down the left column and stop at the first row that is clearly true for you. Earlier rows outweigh later ones.
| If this is true for you | I would pick | Why |
|---|---|---|
| Your in-house developers already write React and will maintain the app | React Native | The people who own the code after launch matter more than any framework feature |
| You have a React web app and want to share logic, validation or API code with it | React Native | Same language and the same React patterns on web and mobile |
| You want each platform's own controls to be the default | React Native | It renders real Android and iOS views |
| Your brand design must look identical on every phone | Flutter | It draws its own widgets, so one tested screen is the same on both platforms |
| Heavy custom UI: charts, animated dashboards, custom booking calendars | Flutter | Everything is drawn by Impeller, with shaders compiled ahead of time |
| No existing team; one developer or a small outside team will build and maintain it | Either; I use Flutter | Pick the one your developer knows best and can support for years |
| You want to push small JavaScript and image fixes between store releases | React Native with Expo | Expo's update service can ship JavaScript, styling and images over the air, within store rules |
When React Native is the better pick
I would not talk a React team into Flutter. Retraining a team in Dart to save nothing on a standard business app is a poor trade, and the app will be maintained by the people who are least comfortable with it.
React Native also makes sense when the mobile app is a companion to a large React web product, when you want platform-native controls without extra work, or when you value Expo's over-the-air updates. Expo's own docs are clear about the limits: native code, new permissions and an SDK upgrade still need a new store build, and updates must follow Apple's and Google's rules. The React Native docs now recommend starting new apps with a framework, and they name Expo. I would follow that advice.
When I would choose Flutter
Most of the apps I am asked about are booking, ordering, membership and service apps with a strong brand look. For those, Flutter is my default.
The reason is testing. Because Flutter draws its own interface, a screen that looks right on a test Android phone looks the same on an iPhone. With each platform's own controls, the same layout can look slightly different on each side, and someone has to check both. For a small team that check is real time.
When an app needs something only the platform offers, Flutter calls Kotlin or Swift through platform channels, or C APIs through dart:ffi. It can also embed native views such as a map inside a Flutter screen. React Native has the same escape hatch through native modules. Neither framework locks you out of the phone.
What to check before you commit either way
The framework is rarely what goes wrong. These are.
- Every third-party package you depend on: is it maintained, and does it support the current release? For React Native, check it works with the New Architecture; for Flutter, check its Android and iOS support.
- Who maintains the app in two years, and which language they will be hired for.
- The oldest Android and iOS versions you must support, checked against each framework's current minimums.
- Any feature that needs native code (payments SDKs, hardware, background location) and whether a package exists for it on your chosen framework.
- How fixes reach users: through a store release every time, or partly over the air with Expo on React Native.
What I build, and when I will say React Native
I build in Flutter, one codebase for Android and iOS. Launch at $999 covers up to 10 screens with sign-up and login, API connections and hands-on help publishing to the stores. Growth at $1,699 adds custom UI/UX for your brand and your own Node.js backend and PostgreSQL database, up to 25 screens. Scale at $2,500 adds an admin dashboard, integrations and push notifications where supported, up to 50 screens. Complex payment gateways, hardware integrations and custom AI systems are quoted separately, and store approval is Apple's and Google's decision.
If you already have a React team, tell me. I would rather spend a CTO consulting session helping you plan a React Native build than sell you an app your developers do not want to maintain.
Questions
- Is React Native slower than Flutter?
- Not in a way most business apps would notice. React Native's New Architecture removed the old asynchronous bridge, and Flutter compiles to machine code and precompiles its shaders. Choose on team skills and design needs, not on benchmarks.
- Can I switch from React Native to Flutter later?
- Only by rewriting the app. The two use different languages and different UI models, so very little code carries over. Your backend, API and database can stay the same, which is why I keep business logic on the server where possible.
Sources
Platform rules and fees in this article were checked against these official pages on 10 November 2026. They change, so confirm before you rely on them.
Sannan Malik is a software architect and product builder with 8+ years in software, CEO of Alpha Notic FZC and a Certified Scrum Product Owner. He builds mobile apps and business software for companies in the UAE, UK and US.