Engineering · 7 min read
Native or cross-platform? Building your app in 2026
The framework matters less than who your users are and what their phones can do. Here is how we choose between native, Flutter, React Native and Kotlin Multiplatform.
Most people who ask us "native or cross-platform?" are really asking three other questions. How much will it cost? Will it feel fast on my customers' phones? And will I be stuck if this agency disappears? This guide answers those, in that order.
The short answer
For most business apps in 2026, a cross-platform framework is the sensible default. One codebase serves iOS and Android, so you pay for one team instead of two and features ship on both platforms on the same day.
Go fully native when the app lives or dies on something the operating system does best: heavy camera or audio processing, complex animation, deep Bluetooth or wearable work, or features Apple and Google release first to their own toolkits.
The four realistic options
Native: Swift for iOS, Kotlin for Android
Two separate apps, each written in the platform's own language. You get immediate access to every new operating system feature and the most predictable performance. The cost is obvious: two codebases, two sets of bugs, and usually two developers or teams. Every feature is built twice.
Flutter
Google's framework, written in Dart. Flutter draws its own interface rather than using the phone's built-in controls, which is why apps look identical on both platforms. Its rendering engine, Impeller, has been the default on iOS and on Android API 29+ since Flutter 3.27, and it compiles its shaders ahead of time rather than at runtime, which removes a long-standing source of stutter. On older Android devices without Vulkan support, Flutter falls back to its OpenGL renderer.
React Native
Meta's framework, written in JavaScript or TypeScript. It renders real native controls, so an app tends to feel at home on each platform. Since version 0.76 (October 2024) the New Architecture has been switched on by default, which closed much of the old performance gap. If your company already has React web developers, they can contribute to the app with less retraining than any other option.
Kotlin Multiplatform
JetBrains' approach shares the business logic (networking, data, rules) in Kotlin while letting you keep native screens, or share those too with Compose Multiplatform. Both Kotlin Multiplatform and Compose Multiplatform are now listed as stable on iOS and Android. It suits teams that already have Android skills, or an existing Android app they want to bring to iOS without starting again.
How they compare
| Native (Swift + Kotlin) | Flutter | React Native | Kotlin Multiplatform | |
|---|---|---|---|---|
| Codebases | Two | One | One | One shared core, native or shared UI |
| Build cost | Highest | Lower | Lower | Middle |
| Look and feel | Fully native | Identical on both platforms | Native controls | Native or shared |
| New OS features | Day one | Via plugins, sometimes later | Via modules, sometimes later | Day one on the native side |
| Hiring pool | Two specialist pools | Dart developers | Large JavaScript pool | Kotlin developers |
| Web reuse | None | Some | Strong with React | Limited |
Cost differences depend heavily on the app. A simple content app shows little difference; an app with complex, platform-specific features can wipe out the cross-platform saving because so much ends up written natively anyway.
Your users matter more than the framework
The right choice often comes from looking at who will hold the phone.
Platform mix. In September 2026, StatCounter put Android at about 83% of mobile operating system usage in Africa, against roughly 53% in the United Kingdom, where iOS is close behind. An app for a Lagos or Nairobi audience must be excellent on mid-range and entry-level Android phones first. An app for a London audience must be equally good on both.
Low-memory phones. Android (Go edition) is Google's lighter version of Android for phones with 4GB of RAM or less. Many of your customers in Nigeria, Ghana or Kenya will be on devices in that class. Large app downloads, heavy animations and memory-hungry screens get uninstalled quickly.
Data cost and patchy connections. Mobile data is a real expense for many users, and connections drop. Whatever the framework, the app should:
- keep a local copy of the data people need, so it opens and works without a signal;
- queue actions taken offline (an order, a form, a payment request) and send them when the connection returns;
- compress images and load them at the size the screen needs, not the size they were uploaded;
- keep the download small, which mostly comes down to discipline over libraries, fonts and media.
All four approaches can do this well. It is a design and engineering decision, not a framework feature, and it has to be planned from the first sprint. Retrofitting offline support into a finished app is expensive.
App store realities
Budgets often miss the costs and rules of the stores themselves.
- Accounts. Apple's Developer Program costs 99 USD a year (shown in local currency where available). A Google Play developer account has a one-off registration fee of 25 USD.
- Testing before launch. Google Play requires new personal developer accounts (created after 13 November 2023) to run a closed test with at least 12 testers who stay opted in for at least 14 consecutive days before the app can go public. Plan for those two weeks.
- Keeping up to date. From 31 August 2026, new apps and updates on Google Play must target Android 16 (API level 36) or higher. Existing apps that fall behind stop being offered to new users on newer phones. Whoever maintains your app needs to budget for these yearly updates.
- Review. Both stores review submissions. Apps that collect personal data need an accurate privacy policy and correct data-use declarations, and those must match what the app actually does.
The accounts should be registered in your company's name, not your developer's. It is the single most common ownership problem we are asked to untangle.
How we decide on a project
When a client brings us an app idea, we work through these questions during discovery:
- What must the app do that only the operating system can do well? If the list is long, lean native or Kotlin Multiplatform.
- Who are the users and what phones do they carry? This sets the performance budget and the offline plan.
- Is there a web product too? A React web app makes React Native attractive because logic and people can be shared.
- Who will maintain it in three years? Choose a stack you can hire for locally or replace us on without a rewrite.
- How fast do you need to learn from real users? If speed matters most, a cross-platform MVP gets you to both stores sooner.
For many first releases, our recommendation is Flutter or React Native, built offline-first, with native modules only where a feature truly needs them. For products with heavy hardware integration, or an existing strong Android app, Kotlin Multiplatform or fully native work tends to pay back.
Next step
If you are weighing these options for a real project, we are happy to look at your requirements and give you a straight recommendation, including when the answer is "you do not need an app yet, a fast mobile website will do". Read more about our mobile app development work, or get in touch.
Sources
- Flutter docs: Impeller rendering engine
- React Native blog: React Native 0.76, New Architecture by default
- Kotlin docs: Stability of supported platforms
- StatCounter: Mobile operating system market share, Africa
- StatCounter: Mobile operating system market share, United Kingdom
- Android Developers: Android (Go edition)
- Apple Developer: Enrollment and fees
- Play Console Help: Get started with Play Console (registration fee)
- Play Console Help: App testing requirements for new personal developer accounts
- Android Developers: Target API level requirements for Google Play