The cross-platform landscape has shifted from framework wars to architectural decisions. In 2024, the question isn't Flutter versus React Native—it's how you structure shared logic across mobile, desktop, and web without rewriting business rules for every surface.
The Convergence on Kotlin Multiplatform
Kotlin Multiplatform (KMP) has moved from experimental to production-default for Android-first teams. Unlike UI-sharing frameworks, KMP shares only business logic—networking, caching, analytics, domain models—while letting you write SwiftUI on iOS and Compose on Android. This 'share logic, own UI' approach eliminates the uncanny valley of cross-platform UIs and keeps platform reviewers happy.
Flutter and React Native: Maturity Over Hype
Flutter 3.22 and React Native 0.76 both shipped WASM/GC support, tighter DevTools integration, and first-party web targets that no longer feel like afterthoughts. Flutter's Impeller renderer is now default on iOS, solving the shader-jank problem that plagued complex animations. React Native's new architecture (Fabric + TurboModules) is stable enough for brownfield adoption—Microsoft, Shopify, and Meta run it in production at scale.
| Metric | Flutter | React Native | KMP + Compose/SwiftUI |
|---|---|---|---|
| Bundle size (hello world) | ~4.2 MB | ~3.8 MB | ~2.1 MB (per platform) |
| Cold start (median) | 180 ms | 210 ms | 120 ms |
| Web support | Stable (WASM) | Stable (React Native Web) | Experimental (Compose Web) |
| Desktop maturity | Production | Community-driven | Production (Compose Desktop) |
SwiftUI and the Native-First Hybrid
Apple's SwiftUI now supports visionOS, watchOS, and macOS from a single target. Teams building iOS-first products increasingly use SwiftUI + KMP shared logic instead of a full cross-platform UI layer. You get native performance, system widgets, and App Store feature parity on day zero—no waiting for framework updates when Apple drops new APIs.
"The winning strategy in 2024 isn't picking one framework. It's designing a module boundary where shared Kotlin owns data and native UI owns pixels.
— Roman Elizarov, Kotlin Project Lead
Build Pipelines: AI-Assisted, Not AI-Replaced
GitHub Copilot and JetBrains AI Assistant now generate platform-specific boilerplate (ViewModels, DI modules, test mocks) from shared interfaces. The productivity gain is real: 30-40% less glue code. But the architecture decisions—module boundaries, serialization formats, offline-first sync logic—still require senior judgment. Treat AI as a typist, not an architect.
App Store Regulation Changes the Math
The EU's DMA and US state-level bills force Apple and Google to allow alternative payment systems and sideloading. Cross-platform builds that target web (PWA) and alternative stores (AltStore, F-Droid, Epic Games Store) gain strategic leverage. Flutter Web and React Native Web now compile to deployable PWAs with service workers, background sync, and install prompts—no native wrapper required.
Decision Matrix for New Projects
| Team Profile | Recommended Stack | Rationale |
|---|---|---|
| Android-first, strong Kotlin | KMP + Compose / SwiftUI | Max logic reuse, native iOS feel |
| React web team, JS/TS expertise | React Native (Expo) | Shared mental model, huge ecosystem |
| Pixel-perfect custom UI, small team | Flutter | Single codebase, consistent rendering |
| iOS-first, Apple ecosystem lock-in | SwiftUI + KMP shared logic | Day-zero API access, best perf |
| Enterprise, long maintenance horizon | KMP + Compose Multiplatform | Google-backed, desktop included |
✦
Start your next project by drawing the line between 'what every platform does the same way' and 'what each platform does best.' Put the former in a shared Kotlin module. Build the latter in SwiftUI, Compose, or React Native. Ship faster. Maintain less. Sleep better.










