Kotlin Multiplatform vs Flutter in 2026
Where to share code, what stays native, and how to choose before you commit
Published July 2026 by Batteries Included
This Kotlin Multiplatform vs Flutter comparison uses primary documentation from JetBrains, Google, and the Flutter project, not vendor slide decks or benchmark roundups. It is written for mobile leads, architects, and engineering managers evaluating a cross-platform bet, including when Compose Multiplatform (CMP) changes the old logic-only Kotlin Multiplatform (KMP) story.
Short answer
Flutter is a single-framework, single-language (Dart) path: one codebase owns UI and logic, rendered by Flutter's engine (Impeller on current releases). It optimizes for speed to one consistent interface across targets.
Kotlin Multiplatform is a sharing technology, not a UI mandate: you choose how much Kotlin to share, from one module up to most of the app, and keep or share UI per platform. Google's Android KMP documentation positions KMP for shared business logic between Android and iOS; Compose Multiplatform is the optional path to shared UI on top of the same Kotlin modules.
In 2026 the decision is less "KMP or Flutter" and more where you want the sharing boundary: in the render layer (Flutter) or in the logic layer with native UI freedom (KMP), with CMP as a third option when you want Kotlin-shared UI too.
What each technology actually is
Flutter
Per Flutter's architectural overview and Kotlin's official comparison page:
- Language: Dart
- Scope: Android, iOS, web, desktop, embedded, from one app codebase
- UI model: Flutter draws widgets with its own engine (Impeller talks to the GPU via Metal, Vulkan, or OpenGL depending on platform)
- Native integration: Platform channels send requests from Dart to native code and get responses back when the app needs OS-specific behavior
- Build tooling: Flutter CLI (Gradle and Xcode under the hood)
Flutter optimizes for 100% shared application code with pixel-level control over how the app looks on every device.
Kotlin Multiplatform
Per Kotlin Multiplatform documentation and the KMP vs Flutter comparison:
- Language: Kotlin
- Scope: Android, iOS, web, desktop, server; you pick targets and how much to share (JetBrains describes flexibility from roughly 1% to 100% of the codebase)
- Default mobile pattern: Shared business logic in a
sharedmodule; native UI per platform (Jetpack Compose on Android, SwiftUI or UIKit on iOS) - Optional shared UI: Compose Multiplatform: stable on iOS, Android, and desktop; Beta on web (CMP docs)
- Native integration: When shared code needs OS features, you declare an
expectin common Kotlin and implementactualper platform (Android APIs in Kotlin, Apple APIs on iOS). Calls resolve at compile time instead of crossing a runtime message layer like Flutter platform channels - iOS delivery: Shared Kotlin compiles to a framework (XCFramework) consumed by the Xcode project (Android KMP codelab)
- Stability: KMP reached Stable in Kotlin 1.9.20 (November 2023). Google announced official Android support for KMP to share business logic at Google I/O 2024.
KMP optimizes for shared logic with native programming retained; you are not forced to abandon SwiftUI or Jetpack Compose unless you choose CMP for UI.
Kotlin Multiplatform vs Flutter: what "shared" means
This is the architectural fork that still matters after both ecosystems matured.
| Dimension | Flutter | KMP (logic-first) | KMP + Compose Multiplatform |
|---|---|---|---|
| Primary sharing boundary | UI + logic in Dart | Networking, models, validation, state in Kotlin | Logic + declarative UI in Kotlin |
| Typical UI on mobile | Flutter widgets everywhere | Compose + SwiftUI (or UIKit) | Shared Compose UI on Android and iOS |
| Rendering | Impeller (custom engine) | Platform-native UI toolkits | Skia-based CMP rendering on iOS (Kotlin docs) |
| Code sharing (typical) | High: one app repo | Moderate; often 30–60% in brownfield; more in greenfield CMP | High when UI is shared, comparable ambition to Flutter |
| Team shape | One mobile team, one language | Often split platform UI + shared Kotlin; can converge with CMP | Kotlin-heavy team; less Swift UI surface |
| Best when | Identical UI required; no Kotlin on team; one language, one widget tree | Greenfield or brownfield; Kotlin-capable team; native UX matters from day one | Greenfield; Compose-strong team; shared UI without Dart |
Important nuance: Compose Multiplatform for iOS reached stable in May 2025 (CMP 1.8.0, JetBrains announcement). That narrows the old "Flutter shares UI / KMP shares only logic" split, but Flutter's shared-UI toolchain and package ecosystem remain more mature; CMP shared UI is a newer production path with its own rendering and sizing trade-offs.
Side-by-side on decisions teams actually make
1. Greenfield app, small team
KMP (logic-first) is a strong greenfield default when the team knows Kotlin or expects Android-first delivery: put networking, models, and domain logic in shared/, ship native UI per platform from day one. You avoid committing to Dart and keep room to deepen iOS-native UX later without a rewrite.
KMP + CMP fits greenfield when the team already knows Compose and wants shared UI in Kotlin. Viable in 2026, with more toolchain surface (Gradle, Xcode framework embedding, CMP rendering on iOS) than Flutter.
Flutter fits greenfield when the team has no Kotlin depth, wants one shippable codebase fastest, and native platform chrome is secondary to one design system everywhere. Single CLI, hot reload, one widget tree. Kotlin's comparison material describes Flutter as controlling every pixel from a single shared codebase.
2. Brownfield: large Android Kotlin app, need iOS
KMP is the stronger default. Migrate repositories, ViewModels, and domain models into shared/ first; ship iOS with SwiftUI while Android keeps Compose. Google's getting-started material and JetBrains' recommended project structure describe separating sharedLogic and sharedUI when only some platforms share UI.
Flutter would mean rewriting working Kotlin/Android UI and logic in Dart; rarely the lowest-risk move when Android is already production code.
3. "We need it to feel native on iOS"
KMP with native SwiftUI/UIKit keeps system navigation, accessibility, and platform conventions in Apple's stack. Deep integrations (Share Sheet, NavigationStack, Live Activities) stay in Swift without fighting a cross-platform abstraction.
Flutter can approximate native patterns but often uses platform views and channels for OS-specific fidelity; workable, but complexity scales with how "iOS-native" the product must feel.
CMP sits in the middle: one Kotlin UI codebase, but rendering goes through CMP's Skia pipeline on iOS, not UIKit widgets. Evaluate with prototypes on your heaviest screens (maps, video, complex lists).
4. Desktop and web in the same product
Both target desktop and web. Flutter's web and desktop story is long-standing in production. CMP desktop is stable; web is Beta per Kotlin docs. Treat web as a separate readiness check, not an assumed checkbox.
If web is a first-class ship target alongside mobile, verify each framework's current web status against your release bar before committing.
5. Hiring and ecosystem
Flutter: Larger public sample of Dart/Flutter specialists; pub.dev for packages.
KMP: Kotlin is already central on Android; iOS engineers still own UI unless you adopt CMP. KMP libraries publish to Maven-compatible repositories (klibs.io is an emerging index, Alpha per Kotlin docs). Jetpack libraries are increasingly KMP-ready (Android KMP page).
Neither removes the need for platform expertise on a serious mobile product. The difference is whether UI expertise stays split by platform (KMP logic-first) or consolidates in Dart/Flutter (or Kotlin/CMP).
6. Performance and app size
Neither framework guarantees a win without measuring your app.
- Flutter release builds are AOT-compiled native binaries; debug/profile behavior differs from store builds (Flutter architectural overview).
- KMP adds a shared framework to iOS; CMP adds UI runtime surface. Compare using the same release workflow you plan to ship on each platform.
Marketing benchmarks from third-party blogs are not interchangeable; treat them as hypotheses until you run your own release binaries.
Decision checklist (use in a 60-minute architecture review)
| Question | Lean Flutter | Lean KMP |
|---|---|---|
| Is the team Kotlin-capable or Android-first? | No | Yes |
| Must iOS use SwiftUI/UIKit for core UX? | No | Yes |
| Is one identical UI across platforms a product requirement? | Yes | No (or "later with CMP") |
| Do we have substantial Kotlin/Android code to reuse? | No | Yes (brownfield bonus) |
| Is web a must-ship target this year? | Verify Flutter web fit | Verify CMP web Beta fits |
| Do we need a scoped plan before budget sign-off? | Either: use Discovery Roadmap | Either: use Discovery Roadmap |
When answers split down the middle, run a two-week spike: one critical user flow in Flutter and the same flow as KMP shared logic + native UI (or a thin CMP screen). Compare build integration, developer ergonomics, and release artifacts, not slide-deck claims.
What we recommend in practice
We align with our KMP and Compose Multiplatform insight:
- Start KMP with shared business logic, greenfield or brownfield. Native UI per platform unless CMP is a deliberate, benchmarked choice.
- Add Compose Multiplatform when the team knows Compose, UI duplication is the bottleneck, and you have benchmarked size and rendering on real devices.
- Choose Flutter only when you are greenfield, have no Kotlin depth, need maximum UI sharing from day one, and native platform chrome is secondary to speed and one design system.
That is an architecture philosophy choice, not a quality ranking. Both ship production apps; the expensive mistake is picking one for hype and discovering your team, codebase, or UX requirements pointed the other way six months in.
Common questions
- Is Kotlin Multiplatform production-ready in 2026?
- Yes for shared logic: Stable since Kotlin 1.9.20, with Google's official Android support for cross-mobile business logic. CMP for iOS UI is stable as of CMP 1.8.0; CMP for web is Beta.
- In Kotlin Multiplatform vs Flutter, does Google pick a side?
- Google supports both. Android documentation promotes KMP for sharing business logic with native UI; Flutter is Google's separate cross-platform UI framework. Kotlin's comparison article presents both neutrally and points to Google's platform choice guidance.
- Can KMP share as much code as Flutter?
- Only if you adopt Compose Multiplatform for UI (and accept CMP's rendering model). Logic-only KMP intentionally shares less code than Flutter but keeps native UI stacks.
- Should we compare React Native too?
- If your team is JavaScript-first, yes; that is a different boundary (bridge to native views). Kotlin documents a KMP vs React Native comparison; this article stays on the Flutter vs KMP axis common in Android-heavy evaluations.
- We are not sure yet. What is the lowest-risk next step?
- A Discovery Roadmap engagement: inventory existing modules, define the sharing boundary, and spell out iOS delivery (framework embedding, CI, store pipelines) before a multi-quarter migration.
Evaluating Kotlin Multiplatform vs Flutter?
Not sure where the sharing boundary should sit? We'll help you map logic vs UI trade-offs against your team and codebase. Already running dual codebases? A Discovery Roadmap turns research into a scoped plan, or see our KMP development and migration services.
Related
Sources
- Kotlin documentation: Kotlin Multiplatform and Flutter: official Kotlin-side comparison of sharing boundaries, rendering models, and when each framework fits.
- Android Developers: Kotlin Multiplatform: Google's guidance on sharing business logic between Android and iOS while keeping native UI per platform.
- Kotlin documentation: Kotlin 1.9.20, KMP Stable: KMP reached Stable status in Kotlin 1.9.20 (November 2023).
- Google: Android support for Kotlin Multiplatform (Google I/O 2024): official Android support for sharing business logic across mobile, web, server, and desktop targets.
- JetBrains: Compose Multiplatform for iOS is stable: CMP 1.8.0 (May 2025) marks Compose Multiplatform for iOS as stable and production-ready.
- Kotlin documentation: Recommended KMP project structure: how to separate
sharedLogicandsharedUIwhen only some platforms share UI. - Flutter documentation: Architectural overview: Dart language, Impeller rendering, platform channels, and Flutter's single-codebase UI model.