NOVEK LABS
Mobile12 min read

React Native vs native development: when cross-platform is the wrong call

V

Victor

Founder, Novek Labs

For roughly nine out of ten startup apps, React Native is the right call: one team, one codebase, both app stores, and about half the budget of building twice. The interesting question is not whether cross-platform works. It does, and it has for years. The interesting question is identifying the minority of apps where it is genuinely the wrong call, because getting that wrong in either direction is expensive.

Full disclosure up front: at Novek Labs we ship React Native by default, so we have a bias. But that default came from watching the same pattern repeat across real builds, not from ideology. This post covers where it holds, where it breaks, and how to tell which side of the line your app sits on before you spend a dollar.

Key takeaways

  • React Native, a framework that lets one JavaScript codebase run as a real app on both iOS and Android, fits the large majority of startup apps: social, marketplace, fintech, booking, e-commerce.
  • Native development, meaning separate Swift and Kotlin apps, wins when your core value depends on deep platform integration: advanced camera and AR, heavy background processing, widgets and watch apps, or day-one OS features.
  • The true cost of going native is not just two salaries. It is coordination overhead, feature drift between platforms, and two of every code review, test suite, and release cycle.
  • React Native's new architecture, the default since late 2024, closed most of the old "it feels janky" gap. What remains is upgrade churn and rough edges around native modules.
  • Starting cross-platform and migrating to native later is real work but rare. Burning twice the budget on a native build that did not need it is far more common.

What is the actual difference between React Native and native development?

Native development means writing two separate applications: one in Swift using Apple's tooling, one in Kotlin using Google's. Each app talks directly to its operating system with nothing in between. You get maximum control and maximum cost.

React Native takes a different bet. You write your app once in JavaScript or TypeScript, and the framework renders it using each platform's real native components. The button your user taps on an iPhone is a genuine iOS button, not a web imitation. Since the new architecture became the default, JavaScript talks to native code through a direct interface called JSI instead of the old asynchronous bridge, and a rendering system called Fabric keeps the UI layer synchronized with native views. In plain terms: the performance penalty that gave cross-platform its reputation for sluggishness has mostly been engineered away.

If you are also weighing Flutter, Google's alternative that draws its own UI instead of using native components, we compared the two in React Native vs Flutter. The argument here applies to cross-platform generally; we use React Native because it is what we ship.

What do two native teams actually cost a startup?

The obvious cost is headcount. An iOS engineer and an Android engineer instead of one cross-platform engineer, or two teams instead of one as you grow. For a pre-revenue startup, that difference alone often decides the question.

The less obvious costs are the ones founders underestimate.

Coordination overhead

Every feature now needs two implementations, two code reviews, two QA passes, and two release trains. Your product manager writes one spec and receives two interpretations of it. In our experience this coordination tax runs well beyond the raw engineering hours, because it consumes your scarcest resource: founder and PM attention.

Feature drift

Two codebases never stay in sync. The iOS build gets the new onboarding flow first. The Android build has a payments fix the iOS build lacks. Six months in, your two apps are cousins, not twins. With one codebase, drift is structurally impossible: both platforms ship the same feature on the same day because they are the same code.

Velocity at the stage that matters most

Before product-market fit, your entire advantage is iteration speed. Every week spent building the same screen twice is a week not spent learning from users. We wrote about how most MVPs die before launch, and scope that outruns the budget is a leading cause. Doubling your platform surface is the fastest way to do exactly that.

When we built Roundup, a micro-investing app, one React Native codebase let a small team ship portfolio views, round-up logic, and onboarding to both stores in the same cycle, during exactly the phase where the product was changing weekly.

Does React Native actually feel native in 2026?

This is the objection we hear most, and it deserves a straight answer: mostly yes, with caveats.

The "cross-platform apps feel janky" reputation was earned in the 2016 to 2020 era, when React Native serialized every interaction across an asynchronous bridge. That architecture is gone. With the new architecture as the default, synchronous native calls and Fabric rendering mean scrolling, gestures, and animations run at native speed for typical product UI: lists, forms, tabs, checkout flows, dashboards, chat.

What "native feel" actually requires today is less about the framework and more about craft: respecting platform conventions, using native navigation patterns, handling keyboard behavior correctly, and testing on real low-end Android hardware. A carelessly built native app feels worse than a well built React Native app. We have seen both.

Where the honest gap remains:

  • Upgrade churn. React Native releases move fast, and major upgrades can break third-party libraries. Budget a maintenance window every few months. This is the real ongoing tax of the ecosystem.
  • Native module edges. When you need a capability the community has not wrapped, someone has to write Swift or Kotlin anyway: Bluetooth peripherals, unusual hardware, niche SDKs. The escape hatch exists, but it is not free.
  • Day-one OS features. Native apps can adopt a new Apple or Google API immediately. React Native support arrives after someone wraps it, which can take weeks or months.

When is native development the right call?

Here is the specific minority where we tell founders to go native, even though it costs us the project.

Apps whose core value is deep platform integration

If the product is the camera, go native: advanced computational photography, real-time AR overlays, custom video pipelines. The same goes for apps built around heavy background processing, watch apps or widgets as the primary surface, or products whose pitch depends on adopting new OS features the week they land.

Games and real-time graphics

React Native renders product UI. It is the wrong tool for a game loop, a physics engine, or anything demanding sustained 60 to 120 fps custom rendering. Games belong in native code or a game engine like Unity.

Performance-critical real-time interfaces

Professional audio tools, live video editing, trading interfaces where interaction latency is the product itself. If a dropped frame is a lost customer, buy the control that native gives you.

Notice what is not on this list: social apps, marketplaces, fintech, delivery, booking, fitness, B2B tools. That is most of the startup universe, which is why the ninety percent figure is not hype. Luxescape, a travel platform we built, is exactly this shape: search, rich imagery, maps, booking, payments. Nothing in it needed a dedicated Swift team, and the budget saved went into the features users actually chose it for.

React Native vs native: side by side

Factor React Native Native (Swift + Kotlin)
Codebases to build and maintain One Two
Engineering cost Roughly half of dual-native Full price, twice
Feature parity across platforms Automatic Constant manual effort
Typical UI performance Native-grade since the new architecture Native
Games and custom rendering Poor fit Strong fit
Deep hardware and OS integration Possible via native modules, with friction Direct and immediate
New OS features on launch day Delayed until wrapped Immediate
Framework upgrade churn Real and recurring Minimal, platform-paced
Hiring pool Large (JavaScript/TypeScript) Smaller, two specialties
Web code sharing Substantial None

The escape hatch: native modules inside React Native

The most underrated fact in this debate is that the choice is not binary. React Native ships with a first-class mechanism for writing Swift and Kotlin inside your app. When a feature needs true native capability, you write a native module for it, expose it to JavaScript, and keep the rest of the app in one codebase.

This is how most successful React Native apps at scale actually work: a shared core with small pockets of platform code where it earns its keep. A payments SDK here, a custom camera view there. You get native power where the product needs it without paying the two-team tax everywhere else. The trade-off is that someone on the team needs real native fluency to write and maintain those modules, which is worth confirming before you sign with any mobile development partner.

The decision framework

Answer these six questions honestly. They settle the choice faster than any benchmark thread.

  1. Is deep platform integration your core value, or a supporting feature? If the camera, AR, background processing, or a watch app is the product, go native. If it is one feature among twenty, React Native plus a native module covers it.
  2. Are you building a game or a real-time graphics interface? If yes, native or a game engine. No exceptions.
  3. Do you need both iOS and Android within the next year? Almost every consumer startup does. If yes, cross-platform halves the work.
  4. Can you fund and manage two engineering tracks without starving the product? If the honest answer is no, the native question answers itself.
  5. Does your roadmap depend on adopting new OS features the week they ship? If yes, weight native. If you can wait a quarter, this is not a deciding factor.
  6. How fast do you need to learn from real users? Pre-product-market-fit, speed to feedback beats the last few percent of polish, and one codebase wins. We broke down realistic schedules in how long it takes to build an MVP.

If questions one and two came back "no," you are in the ninety percent. Ship React Native and spend the savings on the product.

What if you start with React Native and need to go native later?

This is the fear that pushes founders into premature native builds, so let's size it honestly.

First, it is rare. Most apps never hit a wall that a native module cannot solve, because most apps are product UI over an API, and that is exactly what React Native is good at.

Second, when it does happen, the migration is incremental, not a rewrite-or-die cliff. Teams typically move the performance-critical screens to native first while the rest of the app keeps shipping. Your API layer, business logic, design decisions, and everything you learned from users carries over. The expensive part of an app is rarely the UI code.

Third, compare the failure modes. Starting cross-platform and migrating later means you spent efficiently while searching for product-market fit and paid a known cost once the product justified it. Starting native "just in case" means paying double from day one for insurance you probably never claim. One of these is a good trade for a startup. The other is how runways end early.

Frequently asked questions

Is React Native good enough for a fintech or payments app? Yes for the overwhelming majority of fintech products. Account views, transfers, charts, KYC flows, and card management are standard product UI, and mature native modules exist for secure storage, biometrics, and major payment SDKs. High-frequency trading interfaces with hard latency requirements are the exception.

Do big companies actually use React Native in production? Yes. Meta builds large parts of its own apps with it, and companies including Microsoft and Shopify have adopted it heavily and written publicly about the decision. That should retire the concern that cross-platform is a toy.

Is React Native cheaper to maintain long term, or just cheaper to build? Both, with one caveat. One codebase means one place to fix bugs, one test suite, and one upgrade path, which keeps ongoing costs well below two native apps. The caveat is upgrade churn: the React Native ecosystem moves quickly, so budget periodic upgrade work that native teams largely avoid.

Can a React Native app use widgets, watch apps, or live activities? Yes, through native modules and extensions written in Swift or Kotlin alongside the shared codebase. The practical question is proportion. If widgets are a supporting feature, this works well. If the watch app or widget is the primary product surface, consider going native from the start.

Should I hire separate iOS and Android developers for my MVP? Almost certainly not. Two native tracks double cost and coordination while halving iteration speed, at the exact stage where learning fast matters most. Contract a cross-platform team, validate the product, and revisit the question only if you hit a genuine platform wall.

Making the call for your app

The pattern is simple: React Native by default, native by exception, with the exception defined by your core value rather than fear of hypothetical limits. If you can name the specific platform capability your product cannot live without, go native with confidence. If you cannot, one codebase at half the cost is the disciplined choice.

If you are weighing this decision for a real product, talk to us. We will tell you straight if your app is in the ten percent that should go native, even though it is not what we sell.

All posts

Contact

Have a project in mind?

We reply within 24 hours.