Native vs cross-platform apps
Most apps should be cross-platform. Some really should not.
Choose cross-platform, such as React Native with Expo, when you need iOS and Android from one team and the app is screens, data, and payments. Choose native Swift or Kotlin when the app is built around a platform feature, heavy on-device work, or ships on one platform only. We run both: Pullsy's iOS app in SwiftUI and three React Native apps.
Updated · Acasa Labs
At a glance
Native and Cross-platform, side by side.
| Dimension | Native | Cross-platform |
|---|---|---|
| What it means | NativeSwift or SwiftUI for iOS, Kotlin or Jetpack Compose for Android | Cross-platformOne codebase for both, in React Native or Flutter |
| Codebases | NativeOne per platform | Cross-platformOne, with native code only where needed |
| Team | NativeiOS and Android specialists, or one platform at a time | Cross-platformOne team, often shared with the web app |
| New platform features | NativeAvailable the day Apple or Google ships them | Cross-platformAvailable once a library supports them, or through your own native module |
| Performance | NativeThe ceiling: direct access to every platform API | Cross-platformIndistinguishable for typical apps; extra work for heavy graphics or processing |
| Feature parity | NativeTwo teams can drift apart | Cross-platformFeatures land on both platforms together |
| Widgets, watch, extensions | NativeFirst-class | Cross-platformPossible, but those parts are written natively anyway |
| Cost for both platforms | NativeRoughly two builds | Cross-platformOne build, plus platform polish |
01
What cross-platform really costs and saves
Cross-platform frameworks save you a second codebase. One team writes the screens, the business logic, the API calls, and the tests once, and both stores get the same features in the same release. For an app that is mostly lists, forms, accounts, payments, and notifications, that is most of the work, and the saving is large.
What it does not remove is platform work. Push notification setup, in-app purchases, deep links, permissions, store listings, and review rules are still per platform. A good cross-platform team knows each platform well enough to handle those, and plans early for the parts that need native code.
02
When native is the better choice
Pick native when the app is built around something the platform does: home screen widgets, Apple Watch or Wear OS companions, Live Activities, deep background processing, or custom camera and audio pipelines. Those parts are written in Swift or Kotlin in a cross-platform app anyway, and if they are most of the app, the framework is overhead.
Pick native when you ship on one platform only. If your users are all on iPhone, there is no second codebase to save, and SwiftUI gives you the platform directly.
And pick it when on-device performance is the product: real-time graphics, heavy on-device machine learning, or audio processing where every millisecond is felt.
03
When cross-platform is the better choice
Pick cross-platform when you need both stores and one team. For most business apps, member apps, marketplaces, and companion apps for a web product, users cannot tell the difference, and you ship features to everyone at once.
Pick it when you have a web app. With React Native, a React or Next.js team can share types, API clients, and logic between web and mobile, and move between them.
And pick it when the budget is fixed. Building twice is roughly twice the cost to build and to maintain, and for an app whose value is in the data and the workflow, that money is better spent on the product.
04
The middle path most good apps take
The choice is rarely all or nothing. A React Native app can include native modules for the one feature that needs them: a widget, a custom media player, or a specific SDK. That keeps one codebase for the ninety percent of the app that is ordinary, and full native access for the rest.
Going the other way also works. A native app can embed a few shared screens. What matters is drawing the line on purpose, early, so you do not discover in month six that a core feature fights the framework.
05
What we have and have not built
We have shipped a native iOS app in SwiftUI and three cross-platform apps in React Native with Expo. We have not shipped a native Android app in Kotlin or Jetpack Compose, so on Android our production experience is through React Native. If your project needs a native Android specialist, we will tell you that before you sign.
From production
One native app, three cross-platform ones.
Native where there was one platform
PullsyPullsy ships on the web and on iOS, so there was one mobile platform to build for. Its iOS app is SwiftUI on iOS 17+, with push notifications when something changes, on the same FastAPI backend as the web app.
Cross-platform for three apps at once
GymFastGymFast has separate staff, member, and trainer apps for iOS and Android. In React Native with Expo, that is three apps from one monorepo and one API, not six native codebases.
Cross-platform beside a web app
NoteTubeNoteTube's Expo app shares a backend with its Next.js web app, Chrome extension, and MCP server. RevenueCat handles app store billing and a scheduled job keeps it in agreement with Stripe on the web.
A companion app that mirrors the web
KraftrKraftr's mobile app gives brands the same studio as the web, from one Expo codebase for both stores.
How we choose
The five questions we ask before choosing
Both platforms, a web app, and a business workflow point to cross-platform. One platform, or a product built on device features, points to native.
- 01Do you need iOS and Android, or one platform first?
- 02Is the app built around widgets, watch apps, or background work?
- 03Does any feature need heavy on-device processing or graphics?
- 04Is there a web app the mobile app should share code with?
- 05How many people will maintain it after launch?
Questions
Native vs cross-platform apps, asked often.
Is a cross-platform app slower than a native one?
For typical business apps, users cannot tell. The gap appears in heavy graphics, real-time processing, or deep platform integration, where native code is the better tool.
Can a cross-platform app use native features?
Yes. Camera, location, push notifications, biometrics, and in-app purchases are all available, and anything missing can be written as a native module.
Is it cheaper to build cross-platform?
Usually, because there is one codebase to build and maintain instead of two. Platform-specific polish and store work still cost time on each side.
Do you build native Android apps?
Our Android apps are React Native. We have shipped native iOS in SwiftUI but not native Android in Kotlin, and we will say so if your project needs it.
Should we start on one platform?
If your users are mostly on one platform, often yes. Start native or cross-platform on that one, and keep the option to add the second.
Native vs cross-platform apps
Native or cross-platform? Ask before you build twice.
Tell us who uses the app and what it has to do on the device. We will tell you which approach fits, and why.