"Which mobile stack should we use?" is one of the first questions in almost every app project we scope — and one of the most tribal debates in software. We build mobile apps with React Native by default, so we'll declare that bias upfront. But we've also advised clients against it, because the right answer depends on your app, your team, and your budget — not on which framework won the latest benchmark thread.
Here's the framework we actually use.
Start with what kind of app you're building
Content and workflow apps — feeds, forms, dashboards, e-commerce, booking, most B2B tools. This describes the large majority of business apps, and it's where cross-platform shines. React Native and Flutter both deliver a polished experience here at roughly the cost of a single codebase instead of two. Choosing native for these apps usually means paying almost double for a difference your users won't notice.
Device-heavy apps — intensive camera pipelines, Bluetooth peripherals, background audio, AR, advanced sensors. Cross-platform frameworks can do all of this through native modules, but every deep hardware feature adds a layer of bridging work. If your core product is the hardware interaction, native (Swift/Kotlin) reduces risk. If it's one feature among many, cross-platform with a custom native module is usually fine.
Games and graphics-intensive apps — neither React Native nor Flutter is the right tool. Use a game engine. This one isn't close.
The team and hiring reality
Technology decisions are hiring decisions in disguise:
- React Native draws on the JavaScript/TypeScript ecosystem — the largest developer pool in the world. If your team already builds with React on the web (as we do), a huge amount of knowledge, tooling, and even code carries over.
- Flutter is a genuinely excellent framework with strong tooling and very consistent rendering across platforms. Its trade-off is Dart: a capable language, but a smaller hiring pool, and skills that transfer less to the rest of your stack.
- Native means two codebases, two specialized skill sets, and two of every feature ticket. For a well-funded product where mobile is the business, that cost can be worth it. For most SMEs, it's the difference between shipping in one quarter or two — a gap that shows up directly in project cost.
Our observation from real projects: the maintenance phase amplifies this. Keeping two native apps in feature parity for years quietly costs more than most initial estimates admit.
Performance: the myths and the honest version
The performance debate is a decade out of date. The honest 2026 version:
- For typical business apps — scrolling lists, forms, navigation, media — all three options feel native to users when built competently. React Native's new architecture removed most of the old bridge overhead; Flutter's rendering has been fast for years.
- Real performance problems in the apps we've audited almost always trace to app code, not framework: unoptimized images, chatty APIs, unnecessary re-renders. A well-built React Native app comfortably outperforms a sloppy native one.
- Native still wins at the extremes — sustained heavy computation, tight animation loops at 120Hz, minimal binary size. If you're in those extremes, you already know it.
Distrust anyone who answers "which is faster?" without asking what your app does.
Our default, and when we advise against it
We build mobile apps with React Native by default. The reasons are practical: one codebase for iOS and Android, deep overlap with our React and Next.js web stack, shared logic between web and mobile, and a mature ecosystem that has survived every "React Native is dying" cycle for a decade. For the content-and-workflow apps most of our clients need, it delivers the best value per dollar we know of — it's a core part of how we build software.
But we've steered clients elsewhere, and the honest list of when we do:
- Your app's core value is deep hardware integration — go native, or budget seriously for custom native modules.
- You already have strong Swift or Kotlin teams in-house — the framework savings don't outweigh retraining your best people.
- Your organization is already invested in Flutter — Flutter is a good tool; switching costs would exceed any marginal benefit. We'd rather you succeed with Flutter than churn.
- It's a game — game engine, full stop.
The decision in one paragraph
If you're building a typical business app and want the most value from your budget, choose cross-platform — and pick between React Native and Flutter based on your team's existing skills and hiring market, not benchmarks. Go native only when your app lives at the hardware or performance extremes, or when your existing team makes it the cheaper path. The framework matters less than the people building with it.
Weighing this decision for a real project? Talk to us — we'll look at your app's requirements and your team's situation and give you a straight recommendation, even if it isn't the stack we'd be hired to build.