9/18/2023
React Native vs Flutter in 2023 — which to choose for your mobile app
TL;DR: React Native wins if you have a web team (TypeScript/React). Flutter wins if animation performance and a consistent UI matter. Both are production-ready and mature in 2023.
Choosing a mobile framework is a decision that’s hard to reverse after a few months of work. React Native and Flutter are today the two dominant options for cross-platform mobile — both actively supported by large companies, both used in production by hundreds of thousands of apps. The question isn’t “which is better,” but “which fits your project.”
Architecture
React Native from version 0.70 uses a new architecture based on JSI (JavaScript Interface) and the Fabric renderer. JSI replaces the old asynchronous bridge with a synchronous interface between JavaScript and native C++ code. Fabric is a new renderer that manages the view tree synchronously. The result: noticeably lower interaction latency and better performance on lower-end devices.
Flutter works in a fundamentally different way. Rather than using native iOS and Android widgets, Flutter has its own rendering engine based on Skia (older versions) and Impeller (newer, default since Flutter 3.10). The entire UI is drawn by Flutter — meaning an app looks identical on iOS and Android, but doesn’t “look native” (though Material Design and Cupertino widgets change that somewhat).
Performance
Flutter wins in scenarios with intensive animations. Its own renderer guarantees 60fps (or 120fps on ProMotion devices) without dependence on native widgets. Complex layered animations, screen transitions, particle effects — Flutter handles all of these more smoothly than React Native in a typical configuration.
React Native with the new architecture (Fabric + JSI) matches Flutter for most typical applications: forms, lists, simple animations, navigation. The difference is noticeable mainly in mobile games and apps with very rich UIs. For CRUD apps — dashboards, e-commerce, social — the performance of both frameworks is indistinguishable in practice.
Ecosystem
React Native taps into the npm ecosystem — the largest in the world. Many web libraries work directly or with minimal adaptation. The community is huge, Stack Overflow questions have answers, problems have been encountered by someone else before. Downsides: dependencies sometimes require pod install and manual native configuration.
Flutter uses pub.dev — a smaller ecosystem, but growing quickly thanks to Google’s support. The quality of official packages (dio, bloc, go_router) is high. Dart as a language is less popular than TypeScript, which can make recruitment harder, but the language itself is clean and easy to learn for someone familiar with Java or Kotlin.
Our practice
In our projects we choose React Native when the team already knows React and TypeScript — the knowledge transfer is minimal, the same patterns (hooks, components, state management via Zustand or Redux), similar tooling. For hybrid projects where some functionality is web pages (WebView or React Native Web), React Native is the natural choice.
We choose Flutter for purely mobile projects where the client expects a consistent, polished UI on both iOS and Android, and where there’s a budget for the team to learn Dart. It works particularly well for product apps where brand and visual design are critical.
What about Expo
Expo is an abstraction layer on top of React Native worth considering for new projects. Expo’s Managed Workflow eliminates the need to configure Xcode and Android Studio — you build the app through EAS Build in the cloud. OTA updates allow you to update the JavaScript bundle without going through App Store review.
For most projects, Expo is sufficient. You eject to the “bare workflow” only when you need native modules that Expo doesn’t support — which rarely happens, since the Expo SDK in 2023 covers most typical needs (camera, biometrics, push notifications, payments).
Summary
In 2023, both frameworks are mature, production-ready, and supported by large companies (Meta for React Native, Google for Flutter). The decision is primarily about team composition and project requirements. Do you have web developers? React Native. Do you care about animations and a consistent UI across both platforms? Flutter. Neither choice is wrong — both lead to the app store.