Skip to content
Writing
Founders · part 3 of 55 min read

React Native, Flutter or native?

The answer I give founders: which to pick for your app, where each one is strong, and the question that matters more than the framework.

Meer Habib

Senior Mobile Engineer · Chittagong

Founders ask me which technology to build their app in more than almost anything else. I build mostly in React Native and Expo, with Swift when a feature needs it, and I take Flutter work too, so here's the answer I give, including where my own preference doesn't fit.

The short version

  • React Native with Expo if you want one codebase for iOS and Android, a team that already knows TypeScript or React, and a web app that shares logic with the mobile one.
  • Flutter if you want one codebase and pixel-identical UI on both platforms, and your team is happy in Dart.
  • Native (Swift and Kotlin) if the app is a platform feature: deep camera work, audio, calling, widgets everywhere, or anything that lives close to the operating system.

Most products are fine on either cross-platform option. The choice that hurts is the one your team can't hire for or maintain.

one codebase → two codebasescloser to the platform →React Native + ExpoTypeScript · shares with webFlutterDart · draws its own UINativeSwift + Kotlinnative modules when a feature needs themRingo: CallKit · Lock Card: Skiawhen the app is a platform feature
Fig. 1The three options by shared code and closeness to the platform. React Native reaches up with native modules when a feature needs it.

React Native and Expo

React Native renders real native components, written in TypeScript with React. Expo is the toolkit around it: routing, over-the-air updates, cloud builds and store submission. Together they remove most of what used to make React Native painful.

It's strong when:

  • your team or your hiring pool already knows React and TypeScript;
  • you have a web app, and want to share types, validation and API code with it;
  • you want to ship fixes without waiting for app review (over-the-air updates, within Apple's and Google's rules).

Native features are still available. Ringo, the AI business phone I built, runs on Expo with native calling through CallKit and PushKit. Lock Card draws with Skia at the device's exact pixel size. When you need Swift or Kotlin, you write a native module and keep everything else shared.

Flutter

Flutter draws its own UI instead of using the platform's components, so the app looks identical on iOS and Android and animations are very smooth. It's written in Dart, which is easy to learn but a smaller hiring pool than TypeScript.

It's strong when:

  • brand-perfect, identical UI on both platforms matters more than feeling "native" on each;
  • your team already works in Flutter;
  • you're targeting more than phones (desktop or embedded screens) from one codebase.

The trade-off is that it doesn't share code with a React web app, and anything that should feel exactly like the platform has to be made to.

Native

Swift for iOS, Kotlin for Android: two codebases, two teams or one very broad person, and the best possible access to each platform.

It's worth it when the core of the product is something the operating system does: advanced camera and image processing, audio, real-time calling, health data, or widgets and Live Activities as the main surface. For most products it's the most expensive way to get the same result.

How I'd decide

  1. 1

    Who will maintain it?

    Pick what your future team can hire for

  2. 2

    Is there a web app?

    Yes: React Native shares the most with it

  3. 3

    What's the hardest feature?

    Deep platform work: native modules, or native

  4. 4

    What's done in three months?

    Both stores sooner: cross-platform

Fig. 2Four questions, in the order that matters. The first one outweighs the rest.
  1. Who will maintain it? Pick what your future team can hire for. This matters more than anything below.
  2. Is there a web app? If yes, React Native shares the most with it.
  3. What's the hardest feature? If it's deep platform work, plan for native modules, or go native.
  4. What does "done" look like in three months? Cross-platform gets you to both stores faster for the same budget.

There's no wrong answer between React Native and Flutter for a typical product. There is a wrong answer in picking one your team can't support after launch.


I've shipped 27 apps, most in React Native and Expo, some with native Swift features. If you're deciding how to build yours, tell me what it needs to do and I'll give you a straight recommendation, even if it isn't me.

Building something like this?

Booking new projects for Q4. Replies within 24h.