React Native or Flutter: which should your company choose?
Both work well for most business apps: one codebase ships to iOS and Android, and performance is good enough for nearly everything. Choose React Native if you have or plan a web product in TypeScript and React, or want to ship fixes without waiting for App Store review. Flutter fits best when the app has its own custom design that must look identical everywhere, or when your team already writes Dart.
Håkon Kjelseth, CTO at Brink Studio
Updated · 6 min read
What React Native and Flutter have in common
Both frameworks let you write the app once and publish it on the App Store and Google Play. React Native comes from Meta and is written in JavaScript or TypeScript. Flutter comes from Google and is written in Dart. Both are open source.
Much of the machinery under both has been replaced in recent years. React Native 0.82, released in October 2025, was the first version to run entirely on the New Architecture, where JavaScript talks to native code directly. Flutter uses its own rendering engine, Impeller, which is the only renderer on iOS and the default on Android since version 3.27. Impeller ships with its shaders precompiled, so they aren't compiled while the app runs, which used to cause stutter the first time an animation played. For sign-in, lists, forms and payments, both are fast enough.
Camera, push notifications, Face ID and in-app purchases are available as ready-made packages for both. When something is missing, it gets written in Swift for iOS and Kotlin for Android, using the Expo Modules API in React Native or platform channels in Flutter. Some parts of iOS have to be Swift whatever you pick: home screen widgets, for instance, are built with Apple's WidgetKit. So ask an agency whether someone on the team writes native code themselves.
Native components or custom rendering
The biggest technical difference is how screens are drawn. In React Native, a button or text field becomes a real iOS or Android view at runtime. Flutter paints the whole screen itself and ships its own versions of the controls, built to imitate Google's Material Design and Apple's iOS style.
Users notice this mostly in the details. Text fields, scrolling and system menus in a React Native app behave like those in every other app on the phone, because they are the same components. When Apple or Google changes how the system controls look, as Apple did with Liquid Glass in iOS 26, a React Native app picks up the new style once it is rebuilt with the new tools. In Flutter, the framework's own versions of the controls have to be updated first.
Flutter's approach has advantages too. The app looks the same on every phone and OS version, and designers can create controls that don't exist on iOS or Android without fighting the platform.
TypeScript or Dart, and who can work on the code
React Native is written in JavaScript, and most teams use TypeScript, which adds types to JavaScript. Flutter uses Dart, a language made by Google. In the 2025 Stack Overflow Developer Survey, 66% of respondents said they use JavaScript and 43.6% TypeScript. The figure for Dart was 5.9%.
For a business, that means more developers can work on a React Native app. A web developer who knows React will recognise most of it, since screens are built the same way.
If you have or plan a website or web app in React or Next.js, the app and the web product can share code such as types, validation and API calls. Expo can also build the app for the browser. Flutter runs in the browser as well, though its own documentation says text-heavy content like articles is better served by ordinary web pages. If you're not sure you need an app at all, read our guide on choosing between a web app and a mobile app.
Updates without a new App Store release
A new version of an app normally has to pass Apple's and Google's review before users get it. With Expo, changes to JavaScript code, copy, layout and images can go straight to users through EAS Update. Changes to native code, new permissions such as camera or location, and Expo SDK upgrades still need a new build submitted to the stores.
Flutter has nothing comparable built in. The usual option is Shorebird, a separate cloud service that can patch the Dart code of an app that is already live, on both iOS and Android. Images, fonts and native code can't be updated that way.
When Flutter is the better pick
Flutter is a good fit when the app has a visual style that looks nothing like iOS or Android, such as a game-like interface or a brand where every screen is drawn from scratch. Then it helps that Flutter paints everything itself and the result is identical everywhere.
It's also a sensible choice if the team that will own the app afterwards already writes Dart, or if the same code needs to run on Windows, macOS and Linux. An agency with a track record of good Flutter apps is a safe hire, even though we use React Native ourselves. Ask to see the apps they have live today and who looks after them.
Why we use Expo and React Native
We build apps and websites, and our websites are written in Next.js with TypeScript. With React Native we use the same language on both, so one developer can work across the whole product. In Unveil, hosts create events and pay on the website while guests use the app.
Expo is what the React Native team itself recommends for new apps. It handles builds, store submission and updates, which leaves more time for the app itself.
When React Native isn't enough, we write Swift. The home and lock screen widget in QuitNic is written in Swift. So is the App Clip in Unveil, which lets guests join from a QR code without downloading the app, and which we keep under Apple's 15 MB limit.
QuitNic's paywalls are managed in Superwall, so we can change them without submitting a new version to the App Store and Google Play.
What the choice means for cost and for handing over the code
The price of a first version depends mostly on how much the app has to do. With us, an app starts at NOK 150,000 excluding VAT, and a first version usually lands between NOK 150,000 and NOK 500,000. See our pricing for what's included.
The framework has more effect on the cost of keeping the app running. With Expo, small fixes can reach users the same day without a new submission, and code shared with the web product only has to be written once. Operations and further development with us start at NOK 5,000 a month.
The code lives in a repository you own. If you change supplier or hire your own developers, people who know TypeScript are easier to find than people who know Dart. Expo is free and open source, and the EAS build services are optional, so you aren't tied to us or to Expo. Read more about how we approach app development.