Flutter, React Native, or Kotlin Multiplatform? The 2026 Mobile Decision That Outlives Your Team

Cross-platform mobile stopped being a two-horse race. What changed with Kotlin Multiplatform, where Flutter and React Native still win, and how to decide.

EngineeringFlutter, React Native, or Kotlin Multiplatform? The 2026 Mobile Decision That Outlives Your Team

Why Is the Cross-Platform Choice Harder in 2026 Than It Was in 2022?

Four years ago this was a two-horse race with a simple tiebreaker. Flutter or React Native, and if your team already wrote JavaScript you picked React Native, and if it did not you picked Flutter. Most kickoff meetings settled it in twenty minutes. In 2026 there are three credible answers, and the third one changes the shape of the question rather than just adding an option to the list.

Kotlin Multiplatform is not a cross-platform UI framework, and that distinction is the whole decision. Flutter and React Native both answer the question "how do we write the user interface once and ship it to two platforms?" Kotlin Multiplatform answers a narrower and arguably more valuable question: "how do we stop writing the same business logic twice?" It compiles shared Kotlin down to platform-specific binaries and then deliberately leaves the UI layer open. You can share the UI too, using Compose Multiplatform, or you can keep SwiftUI on iOS and Jetpack Compose on Android and share only the parts underneath. Those are two very different staffing models hiding behind one technology name.

The usage numbers show an incumbency and a challenger rather than a changing of the guard. In the 2024 Stack Overflow Developer Survey, 9.4% of all respondents reported extensive work with Flutter and 8.4% with React Native. Kotlin Multiplatform's number is smaller but its slope is not: usage among Developer Ecosystem survey respondents more than doubled from 7% in 2024 to 18% in 2025. Installed base and growth rate are both real signals, and they point in different directions, which is exactly why the decision feels harder than it used to.

There is one more reason to slow down here that has nothing to do with the frameworks. The cost of being wrong is higher on mobile than anywhere else in your stack. A web frontend can be replaced route by route behind the same URL while users keep working. A mobile app is a binary that goes through two review processes to devices you do not control, used by people running versions you shipped three years ago. Reversing a mobile architecture decision is a rewrite plus a migration plus a long tail of users on the old build. Getting it right the first time is worth an afternoon of honest analysis.

What Changed: Kotlin Multiplatform Stopped Being an Experiment

Three things moved Kotlin Multiplatform from "interesting, ask me in two years" to a default option on the shortlist, and they happened close enough together that a lot of teams evaluated it before the last of them landed and have not looked again since.

First, the platform owner endorsed it. At Google I/O 2024, the Android team announced first-class support for Kotlin Multiplatform as the recommended way to share business logic across mobile, web, server and desktop. When the owner of one of your two target platforms names the sharing technology it backs, that is a durability signal rather than a taste signal, and durability is most of what you are buying in a mobile architecture decision.

Second, the UI story closed. In May 2025, JetBrains shipped Compose Multiplatform 1.8.0, which marked Compose for iOS as Stable and production-ready, finalising the core API surface and adding type-safe navigation with deep linking, resource management, and iOS accessibility support covering VoiceOver, AssistiveTouch and Full Keyboard Access. That last item reads like a footnote and is not one if you sell into Europe, where accessibility conformance is now an enforcement question rather than a backlog item, something we covered in detail in our piece on accessibility debt and EAA enforcement.

Third, the production evidence arrived, and it is specific rather than anecdotal. Forbes shares over 80% of its logic across iOS and Android and now rolls features out to both platforms simultaneously while keeping room for platform-specific customisation. McDonald's started with a single payments feature, judged the test a success, expanded Kotlin Multiplatform to the entire application, and then restructured from separate Android and iOS teams into a unified mobile team. Quizlet reported a 25% faster grading algorithm on iOS compared with its previous JavaScript implementation and cut the Android app from 18 MB to 10 MB. All three are documented in JetBrains' published Kotlin Multiplatform case material.

The most directly relevant data point for anyone running this exact comparison is 9GAG, which according to the same source aligned its app behaviour across both platforms with Kotlin Multiplatform after trying Flutter and React Native first. That is one company's path, not a verdict, and it is worth reading as evidence that the three options genuinely solve different problems rather than as proof that one won.

Key Takeaways

  • Google named Kotlin Multiplatform its recommended way to share business logic across platforms at I/O 2024, which is a longevity signal for a five-year bet
  • Compose Multiplatform reached Stable on iOS in May 2025, including VoiceOver and Full Keyboard Access support that matters for European accessibility conformance
  • Adoption among Developer Ecosystem respondents went from 7% in 2024 to 18% in 2025
  • Documented production outcomes include Forbes sharing over 80% of logic and Quizlet cutting its Android app from 18 MB to 10 MB

Where Does Flutter Still Win?

Flutter's core bet has not changed since the beginning: it owns the rendering. Rather than mapping your code onto each platform's native widgets, it draws every pixel itself with its own engine. Everything good and everything frustrating about Flutter follows from that single decision.

The good part is control and predictability. Your design system lands exactly as designed on both platforms, pixel for pixel. Your UI does not quietly drift when Apple restyles a control in the next iOS release. Your designers stop maintaining two sets of specs, and your QA stops filing bugs that are really just platform rendering differences. For UI-first consumer products with a strong brand identity, that is not a minor convenience, it is the reason to choose Flutter at all.

The 2026 signals from Google are maintenance signals, which is what you want to see from a framework you plan to run for five years. The published Flutter and Dart 2026 roadmap commits to completing the Impeller renderer migration on Android by removing the legacy Skia backend on Android 10 and above, making WebAssembly the default on web, day-zero support for Android 17 and upcoming iOS releases, multi-window support on desktop in partnership with Canonical, and moving Material and Cupertino into standalone packages. On the language side, Dart is slated to ship Primary Constructors and Augmentations. Nobody promises day-zero operating system support for a project they are winding down.

Where Flutter bites is at the edges of the platform. The moment your product needs deep native integration, a specific Bluetooth stack, background location behaviour, HealthKit, the secure enclave, wallet and passes, a vendor SDK that only ships iOS and Android bindings, you are writing platform channels and native code on both sides anyway. Teams consistently underestimate this, and the underestimate compounds: every platform channel is a seam where the "write once" promise stops being true and a native-competent engineer has to own both ends.

The other honest caveat is that pixel-identical is a liability when what you actually wanted was native-feeling. If your users' mental model is "this is an iPhone app," a Flutter app that renders its own approximation of iOS controls will feel subtly wrong to exactly the users who care most. That is a product judgement, not an engineering one, and it should be made by someone who will live with the answer.

Where Does React Native Still Win?

React Native's 2026 case rests on one technical argument that recently resolved and one structural argument that has always been the real reason companies pick it.

The technical argument is that the long architectural transition is finished. React Native 0.76, released in October 2024, enabled the New Architecture by default, shipping the Fabric renderer, TurboModules and bridgeless mode as the standard configuration after years of opt-in previews, alongside a standalone React Native DevTools replacing Flipper. That release carried over 1,070 commits from 156 contributors. The practical consequence for a buyer is that "the new architecture is coming" is no longer an open risk you are underwriting. It is a one-time upgrade cost on existing codebases and simply the default on new ones.

The structural argument is organisational, and it is the one that actually decides most React Native adoptions. It is the only option of the three that lets a web organisation staff mobile out of the same talent pool it already hires from. If your product web app is React, choosing React Native means shared engineers, shared state-management patterns, shared component thinking, shared code review culture and one hiring pipeline instead of two. That is the same logic we applied to the web-side framework question in React vs Vue for enterprise SaaS, and it compounds harder on mobile, because mobile specialists are scarcer and more expensive to replace than web generalists.

There is a third advantage worth naming because it rarely shows up in framework comparisons and often decides the matter for consumer products: over-the-air updates. Shipping a corrected JavaScript bundle without waiting for a store review is genuinely valuable when you are iterating weekly or fixing something embarrassing on a Friday. Neither Flutter nor Kotlin Multiplatform offers that in the same shape.

Where React Native bites is performance-sensitive and animation-heavy work, and ecosystem churn. The New Architecture improved the first materially, but a product built on heavy real-time rendering, complex gesture systems or sustained background processing will still hit walls that a native or KMP-plus-native approach would not. And the dependency reality deserves stating plainly: a React Native app carrying forty community native modules is a native codebase with extra steps, and it needs someone on the team who can read Swift and Kotlin when one of those modules breaks on a new OS release.

Key Takeaways

  • The New Architecture has shipped by default since React Native 0.76 in October 2024, so the long transition risk is now a one-time upgrade cost rather than an open question
  • React Native is the only option that lets a React web organisation staff mobile from the same hiring pool and review culture
  • Over-the-air JavaScript updates bypass store review, which matters for fast-iterating consumer products
  • Heavy animation, real-time rendering and large community-native-module dependency trees are where the model strains

The Factor Most Teams Have Not Priced In: How Well Do AI Agents Write Each Stack?

This factor did not exist in the 2022 version of this comparison and it is now material enough to change the answer at the margin. Whatever framework you pick, a model is going to write a meaningful share of the code.

The adoption data is not ambiguous. In the 2025 Stack Overflow Developer Survey, 84% of respondents were using or planning to use AI tools in development, with 51% of professional developers using them daily. JetBrains' State of Developer Ecosystem 2025, covering 24,534 developers across 194 countries, found that 85% regularly use AI tools for coding and 62% rely on at least one AI coding assistant, agent or editor.

Models are only as strong as the public corpus they were trained on, and the three stacks do not have comparable corpora. JavaScript and TypeScript represent the largest body of public code in existence, and React patterns are densely represented within it. Dart is a fraction of that. Kotlin Multiplatform is smaller again, and it carries a specific complication the other two do not: a significant share of the public KMP code a model has seen predates Compose Multiplatform reaching Stable on iOS in May 2025, which means it uses APIs that have since changed. The model is not wrong about the world it saw. It is wrong about yours.

The failure mode this produces is specific rather than vague, and the survey data names it precisely. The top AI-related frustration reported in the 2025 Stack Overflow survey was "AI solutions that are almost right, but not quite," cited by 66% of developers, with 45.2% reporting that debugging AI-generated code is more time-consuming. Only 3.1% said they highly trust AI accuracy. In a stack with thinner training data, "almost right" simply arrives more often, and on mobile the distance between catching it in review and shipping it is one store review cycle plus however long your users take to update.

None of this is an argument against Kotlin Multiplatform, and reading it that way would be a mistake. It is an argument about staffing. The cost of a thinner training corpus is paid in senior review time, and if your plan assumes AI-assisted velocity across a stack the models know least well, you should put that review time in the budget rather than discovering it in month three. This is the same dynamic we described in our piece on comprehension debt: generated code that nobody on the team can confidently evaluate is not a productivity gain, it is deferred cost with a delivery date attached.

Key Takeaways

  • 84% of 2025 Stack Overflow respondents use or plan to use AI tools, and 85% of JetBrains' 24,534 respondents use them regularly, so framework choice is now also a choice about AI assistance quality
  • Training-corpus depth runs JavaScript first, Dart second, Kotlin Multiplatform third, with KMP additionally carrying pre-Stable API drift from before May 2025
  • 66% of developers name "almost right, but not quite" as their top AI frustration, and thin-corpus stacks surface that more often
  • Budget the senior review time a thinner corpus requires rather than assuming uniform AI velocity across stacks

Which Questions Actually Decide It?

Strip out the advocacy and the decision reduces to six questions. Answer them honestly and in most cases the framework picks itself, usually in an afternoon rather than a quarter.

One: do you want one user interface or two? This is the first fork and it is not a technical question, it is a product question. If the answer is "one look everywhere, and we will defend that," Flutter or Compose Multiplatform. If the answer is "it should feel like an iPhone app on iPhone," you want native UI per platform with shared logic underneath, which is the Kotlin Multiplatform shape.

Two: what does the team already have? Existing competence beats every abstract advantage in this comparison. A strong Android team with Kotlin fluency has a shorter path to KMP than to anything else. A React web organisation has a shorter path to React Native. A team with neither, building a design-led consumer product, has the cleanest case for Flutter.

Three: how deep do you go into platform APIs? Write the list before you choose, not after. Count the native integrations the product genuinely needs, camera pipelines, background location, biometrics, wallet, health data, vendor SDKs, device peripherals. Past roughly a handful of non-trivial integrations, the "write once" advantage of a shared-UI framework erodes fast, because each integration becomes a bridge that a native-competent engineer has to own on both sides anyway.

Four: do you already have a native app you cannot rewrite? This is the most underrated property in the comparison and it decides more real cases than any benchmark. Kotlin Multiplatform is the only one of the three you can adopt incrementally into an existing native application, one shared module at a time, without a big-bang rewrite and without asking a board to approve a year of work that produces no new features. McDonald's path, one feature first and expansion after it proved out, is available with KMP and effectively is not with the other two.

Five: who maintains this in year four? Frameworks outlive the engineers who chose them. An app that will be handed to an internal team, or passed between vendors, benefits from the stack with the widest hiring pool in your market. An app owned continuously by a stable specialist team can afford a narrower, better-fitting choice.

Six: what is your release cadence, and does store review latency hurt you? If you ship weekly to consumers and a bad release costs real money, React Native's over-the-air update path is worth actual weight in the decision. If you ship monthly to enterprise users through managed distribution, it is worth nothing and should not influence anything.

Key Takeaways

  • One UI or two is the first fork, and it is a product decision rather than an engineering one
  • Count your required native integrations before choosing; past a handful, shared-UI advantages erode sharply
  • Kotlin Multiplatform is the only option you can adopt incrementally into an existing native app, module by module
  • Weight existing team competence and year-four ownership double, because both are systematically underweighted in framework debates

Where Are These Engineers, and Can You Actually Staff Your Choice?

A framework decision is a hiring commitment, and this is the part that gets skipped in architecture reviews. The three stacks have genuinely different talent markets, and picking the one you cannot staff in your region is a slower, more expensive failure than picking the technically second-best option.

React Native has the widest pool, because it draws from the enormous React population rather than from mobile specialists alone. Flutter has a deep and mature pool, particularly across Central and Eastern Europe, where it became a common choice for agency and product work over the last several years. Kotlin Multiplatform has the thinnest pool of the three by a distance, and it is composed almost entirely of experienced Android engineers who moved into it, which means KMP is not a stack you can staff with mid-level generalists on short notice. That scarcity is the practical counterweight to everything attractive about the technology.

This is one of the places where nearshore development changes the arithmetic rather than just the invoice. A company in Munich, Amsterdam or London trying to hire two senior Kotlin Multiplatform engineers locally is competing in a market of dozens of candidates. The same search across Serbia and the wider Balkan engineering market opens a materially larger pool of senior Android and Kotlin engineers at a cost structure that makes a dedicated pairing viable, in a timezone where a shared standup is a normal meeting rather than a sacrifice by one side. We wrote about why that overlap is a real line item and not a soft benefit in the hidden cost of timezone overlap.

At StepTo we staff all three stacks from Belgrade, and we hold no franchise loyalty to any of them. You can hire Flutter developers, React Native developers, or Kotlin developers for a Kotlin Multiplatform build, and where the honest answer is that a shared framework is wrong for your product, we staff iOS and Android engineers natively instead. If you want the underlying economics rather than a quote, our write-ups on iOS app development cost and dedicated development team cost lay out the real numbers.

How Do You Run This Decision Without Losing a Quarter?

The exercise that works takes about a week and produces an artifact rather than a consensus that evaporates when someone new joins.

Start by writing down the product answer to question one, one UI or two, and get it signed off by whoever owns the product rather than by engineering. Then list every native integration the roadmap requires in the next eighteen months, not the next eighteen weeks. Then write down your team's actual current competence, without generosity. Those three inputs resolve most cases before anyone opens an editor.

For the cases they do not resolve, build a thin vertical slice in the two leading candidates. Not a demo, a slice: one real screen, one real API call, one real native integration from your list, running on both platforms on real devices. A week of that produces more signal than a month of comparison articles, including this one, because it surfaces the specific friction your product will hit rather than the friction the average product hits. If you want to test a delivery partner at the same time, this is an ideal shape for a paid pilot before committing to anything longer.

Then write a one-page architecture decision record: what you chose, what you rejected, and why, in terms a new engineering lead can evaluate in year three without relitigating it from scratch. The document is the deliverable. Framework debates recur endlessly in organisations that never wrote down the reasoning, and they cost more in senior attention than the difference between the answers ever did.

This is the process we run on mobile app development engagements, and it is deliberately front-loaded, because the alternative is discovering the platform-integration problem in month four with a design system already built. Our broader approach to scoping and running this kind of work is described on our process page, and our rates for the engineering time behind it are on our published rate card, with no quote request required to see the numbers.

Pick the Stack You Can Staff, Then Write Down Why

The 2026 cross-platform landscape is genuinely better than the 2022 one, and the reason it feels harder is that the three options now solve meaningfully different problems instead of competing for the same job. Flutter buys you rendering control and a design system that lands identically everywhere. React Native buys you one talent pool shared with your web organisation and over-the-air updates. Kotlin Multiplatform buys you native feel per platform, shared logic underneath, and the only incremental adoption path into an app you already have. What none of them buys you is an exemption from needing engineers who understand both platforms underneath. If you are weighing this for a new product or for an existing app you cannot rewrite, StepTo builds on all three from Belgrade as a senior-led <a href="/dedicated-development-team" class="underline decoration-dotted">dedicated development team</a>, and we are happy to pressure-test your reasoning, including telling you when a shared framework is the wrong answer for what you are building.

Building a team in Eastern Europe?

StepTo helps European and US companies build senior-led nearshore engineering teams in Serbia. Let's talk about what your next engagement could look like.

Start a conversation
I

Written by

Igor Gazivoda

Co-founder & CEO · StepTo

Igor has 15+ years in software engineering and business development. He specializes in scaling engineering teams, nearshore strategy, and AI-driven product development. He holds a Master's in Computer Science from the University of Belgrade.

LinkedIn →
Performance-led engineering

Want senior engineers who move work forward, not just tickets?

Work with accountable, English-fluent professionals who communicate clearly, protect quality, and deliver with a steady operating rhythm. Cost efficiency matters, but performance is why clients stay with us.

Delivery signals · senior engineering team
Senior ownership
Lead-level
Delivery rhythm
Weekly
Timezone overlap
CET
1 teamaccountable for outcomes, communication, and execution