Mobile Development
Flutter vs React Native vs Native Development
An honest comparison of Flutter, React Native, and native iOS/Android for business apps. Palmate uses Flutter as a default when a shared codebase fits — without treating other stacks as wrong.
Palmate Solutions Editorial · Published 23 April 2026 · Updated 20 July 2026 · 6 min read
Choosing a mobile stack is a staffing and product decision, not a fandom. Flutter, React Native, and fully native apps can all ship a credible business product. They differ in where complexity lives: UI consistency, platform APIs, hiring, and how painful a unique OS feature becomes.
Palmate Solutions’ mobile app development default is Flutter when a single codebase can honestly serve iOS and Android. We are explicit when a native module, a PWA, or a responsive web app is the better investment. We will not pretend React Native is unserious, or that native is obsolete. Wrong-tool lectures waste budget.
If you have not planned the job yet, stop here and read how to plan a mobile app before development. Stack debates are entertainment until roles, offline behaviour, and APIs are written down.
What each option actually is
Native means Swift/Kotlin (or the current first-party UI toolkits) with separate codebases, or a small shared layer for networking only. You get the newest platform APIs first, the best fit for unusual hardware, and two products to staff unless you only ship one OS.
React Native means JavaScript or TypeScript UI that bridges to native views. Teams with a strong React web practice can share people and some mental models. You still need native skill when a library is thin or a new OS release breaks a bridge. The product is not “a website in a WebView” if it is done properly — but it is also not zero-native.
Flutter means Dart UI drawn by Flutter’s engine, with platform channels when you must call a native API. You share layout and business logic more aggressively than with two native apps. You depend on Flutter’s release cycle and plugin quality for cameras, Bluetooth, background work, and OEM quirks.
None of these remove App Store or Play Console work, push setup, or crash reporting. Those are constants.
Comparison for business apps
| Concern | Flutter | React Native | Native (two codebases) |
|---|---|---|---|
| One team, two stores | Strong default | Strong if you already think in React | Expensive unless you only need one OS |
| Visual consistency | High — you own the pixels | High if you discipline the design system | High per platform; parity is a process |
| Newest OS APIs | Follows plugins / channels | Follows modules / upgrades | First |
| Unusual hardware (BLE, specialised printers, background location) | Possible; budget native work | Possible; budget native work | Least surprising |
| Hiring in India (typical SME) | Growing Flutter pool | Large React pool | Strong but you need two specialisms |
| Web reuse | Flutter web is a different product quality conversation | React web skills transfer culturally, not as copy-paste UI | None |
“Performance” is the most abused axis. For forms, lists, and operational flows, all three are fine when lists are virtualised and images are sized. If your app is a game or a camera pipeline, you are not in this article’s audience — measure, do not tweet.
When Flutter is the honest default
Use Flutter when:
- v1 is the same jobs on iOS and Android.
- UI is your design system, not a pixel-clone of every iOS 26 control.
- You want one QA matrix for business logic (prices, reservations, role permissions).
- You do not have two native squads and do not intend to hire them this year.
Warehouse, field sales, and customer companion apps often fit. Shared validation and state machines are where bugs otherwise fork by platform (“Android still allows a negative quantity”).
Flutter is a weaker default when the product is the platform feature: CarPlay, a specific Android OEM’s background limits, HealthKit-heavy workflows, or a partner SDK that only ships a first-class native kit. You can still use Flutter with a thin native module. Budget that module as real work, not a weekend plugin hunt.
When React Native is a good choice
React Native is a good choice when the organisation already ships React well, has native engineers for the sharp edges, and wants one JS-oriented product team. It is also a reasonable path if you are extending an existing RN app rather than starting a religious rewrite.
It is a poor choice if nobody on the team has ever opened Xcode or Android Studio and the plan is “npm install until the store accepts it.” The bridge and the build are part of the product.
We do not “bash” React Native. We decline it when Palmate would be learning your codebase’s native modules on your clock without a reason, or when Flutter’s layout model matches the design you already approved. Another studio with deep RN practice may give you a better RN outcome than we would. That is a hiring fact, not a moral one.
When native (or one-OS native) is the right spend
Ship native when:
- You only need one platform (a company Android fleet, or an iOS-only customer base).
- A vendor SDK or a regulated device flow is native-only and central to v1.
- You have — or will hire — platform specialists and you want zero engine policy.
Two native apps with shared API contracts can be very sane. Two native apps with duplicated business rules and no contract will drift in a quarter. The cost is not “Swift is expensive.” The cost is two implementations of “what does available-to-promise mean?”
If the job is mostly content and account management, price a high-quality responsive web app first. The website cost estimator is a better starting point than an app-store programme. An app can come later when a job needs the device.
Cost and timeline, without fake menus
A second OS is not “+20%.” Shared UI stacks save duplication of screens and logic; they do not delete store listings, device QA, or API work. Native two-track work duplicates QA and policy. Integrations, offline queues, and store compliance dominate cost more than whether widgets are drawn by Skia or UIKit.
Ask vendors to split: discovery, app engineering, API work, and release operations. If they quote “Flutter app: one number” with no API line, the number is incomplete. Palmate will not invent a rate card in this article. We will scope after the plan.
A decision you can defend in a meeting
- Write jobs, roles, and the device fleet (planning guide).
- List platform APIs that are load-bearing in v1.
- Inventory the team you can actually staff for eighteen months.
- Choose Flutter when (1) and (2) fit a shared UI; RN when (3) is a React organisation with native backup; native when (2) or a single OS dominates.
- Revisit if v1 was a companion app and v2 becomes a hardware product.
Palmate will recommend Flutter often because it matches how we staff and how many business apps are actually built. We will recommend something else when the product is not that shape. The stack should disappear behind a job a picker, a salesperson, or a customer can finish on a bad network. That is the comparison that matters.
