← All posts

6 min read

Flutter vs React Native: How I Advise Clients to Choose

A balanced Flutter vs React Native guide for founders: team skills, web code sharing, UI, performance, native integrations, hiring and maintenance, and when to go native.

  • Flutter
  • React Native
  • Cross-Platform
Cover illustration for Flutter vs React Native: How I Advise Clients to Choose

I’m a Flutter developer, so you might expect this post to end with “use Flutter.” Sometimes it does. But when a founder asks me which framework to pick, I don’t start with my own preference. I start with their team, their product and their existing code.

Flutter and React Native are both mature, both used in serious production apps, and both good choices for most cross-platform projects. The differences that matter are rarely about which one is “faster” in a benchmark. They’re about people, code you already have, and what your app needs from the phone.

Here’s how I walk clients through the decision.

Question 1: What does your team already know?

This is usually the deciding factor, and it’s often answered before we talk about technology at all.

  • If your team writes JavaScript or TypeScript, especially React, React Native lets them be productive quickly. The language, tooling and much of the mental model carry over.
  • If you have no mobile team yet, or your developers come from Java, Kotlin, C# or Swift, Dart tends to feel familiar fast. It’s a typed, class-based language without many surprises.
  • If you’re hiring a freelancer or agency, the question becomes who will maintain the app in two years. Pick the framework your future team is most likely to know.

A framework your team is comfortable in will beat a “better” framework they’re fighting.

Question 2: Do you have a web app to share code with?

If you already have a React web app, React Native has a real advantage. Business logic, validation, API clients and types written in TypeScript can often be shared across web and mobile in a monorepo. With React Native for Web, some teams share UI components too.

Flutter can target the web as well, and it works well for app-like experiences such as dashboards and internal tools. It’s less suited to content-heavy, SEO-driven websites. So if your web presence is a marketing site plus a React app, React Native’s code-sharing story is usually stronger.

If you don’t have a web codebase, this question doesn’t matter much.

Question 3: How custom is your UI?

Flutter draws every pixel itself with its own rendering engine. That means your app looks the same on every device and OS version, and heavily custom, branded or animated designs are very natural to build. You’re not at the mercy of how a particular Android vendor styles a native control.

React Native renders real platform components. Your app automatically picks up the native look and feel, and things like text inputs and accessibility behave exactly like other apps on that platform. For apps that should feel like a standard iOS or Android app, that’s an advantage.

Neither is wrong. “Pixel-identical brand everywhere” points slightly toward Flutter; “feels like a stock platform app” points slightly toward React Native.

Question 4: What about performance?

For the vast majority of business apps (forms, lists, maps, payments, chat) both frameworks are fast enough. Performance problems I see in practice come from heavy rebuilds, oversized images and blocking work on the main thread, not from the framework choice. (I cover the Flutter side in fixing jank in Flutter apps.)

React Native’s New Architecture, now the default, removed the old asynchronous bridge and brought faster, more direct communication with native code. That closed much of the gap people used to talk about. Flutter compiles Dart ahead of time to native code and has a reputation for smooth animations out of the box.

If your app is built around intense graphics, complex custom animations or games, Flutter has an edge. Otherwise, I’d decide on the other questions.

Question 5: How much native integration do you need?

Every cross-platform app eventually talks to the platform: Bluetooth, background location, payments, health data, in-car systems. Both frameworks have large package ecosystems and both let you write native code when a package doesn’t exist.

The real questions are: does a well-maintained package exist for your key integration, and does your team (or developer) know Swift and Kotlin well enough to fill the gaps? I’ve built Apple CarPlay and Android Auto support into a Flutter app (Nightingale), and that kind of work needs native knowledge regardless of the framework. (More in Apple CarPlay and Android Auto with Flutter.)

Before committing, I list the three most important native features and check the package support for each in both ecosystems. It takes an hour and avoids nasty surprises.

Question 6: Hiring and long-term maintenance

The JavaScript and TypeScript talent pool is enormous, and many web developers can move into React Native with some mobile-specific learning. That’s a real advantage for React Native when you plan to grow a team.

Flutter’s pool is smaller but has grown steadily, and Flutter developers are usually mobile-focused already.

On maintenance, both need ongoing care. React Native projects often lean on Expo, which has made setup, upgrades and over-the-air updates much smoother than they used to be. Flutter’s single SDK means fewer moving pieces to keep in sync, and upgrades are usually manageable if you do them regularly. Neglect either one for two years and you’ll have upgrade pain.

The short version

Factor Leans Flutter Leans React Native
Team skills New mobile team, or Java/Kotlin/C# background Existing JavaScript/TypeScript or React team
Existing web code No web app, or app-like web tools React web app to share logic with
UI style Highly custom, consistent across devices Standard platform look and feel
Performance needs Heavy animation and custom graphics Typical business app (both are fine)
Hiring Mobile-focused specialists Large JS/TS talent pool
Tooling Single SDK, fewer moving parts Expo for setup, builds and OTA updates

When I recommend each

I recommend Flutter when a client has no strong existing stack, wants a custom design that looks identical on iOS and Android, or is building something animation-heavy. It’s also what I’d pick when I’m the one building and maintaining the app, simply because that’s where I can deliver the most. I’m upfront about that bias.

I recommend React Native when the client already has a React web team, wants to share code with an existing TypeScript codebase, or plans to hire from the web developer pool. In those cases, telling them to adopt Dart would be bad advice, even if it meant less work for me.

When to go native instead

Sometimes the right answer is neither:

  • The app is iOS-only or Android-only and will stay that way.
  • It depends heavily on brand-new platform features on day one, like the latest widgets or OS integrations.
  • It’s built around demanding real-time processing: advanced camera, AR, audio processing.
  • You already have strong native teams on both platforms.

I’ve also done the opposite move: at Shiftboard I rewrote a native app as a single cross-platform Flutter app, for a consistent experience on Android and iOS. (Here’s what that involved.) The right answer depends on where your costs actually are.

Takeaways

  • Start with your team’s skills and who will maintain the app, not benchmarks.
  • An existing React web codebase is a strong reason to choose React Native.
  • Flutter shines for custom, consistent UI and animation-heavy apps.
  • For typical business apps, both perform well; the New Architecture narrowed the gap.
  • Check package support for your three most critical native features before deciding.
  • Go fully native for single-platform apps or deep, cutting-edge platform features.

If you’re weighing Flutter, React Native or native for your next app and want a straight answer for your situation, get in touch.

Comments

Questions, corrections or your own experience — leave a comment below (GitHub sign-in).