We need to build an app for both iOS and Android. I’m looking at Kotlin Multiplatform vs Flutter. KMP seems interesting because it allows sharing logic while keeping native UIs. Does anyone have experience with the stability of KMP for production-level apps? Is the shared code limited to just data models, or can we share networking and business logic too?
3 answers
KMP is a game-changer if you want native performance and UI. Unlike Flutter, which uses its own rendering engine (Skia), KMP lets you write your business logic, networking (using Ktor), and data persistence (using SQLDelight) once in Kotlin. Then, you write the UI natively in SwiftUI for iOS and Jetpack Compose for Android. This gives you the best of both worlds: shared logic and 100% native user experience. It’s reached "Stable" status recently, so it’s very viable for production. The learning curve is steeper for iOS devs, but the code consistency is unbeatable.
How much of your UI is complex or custom? If the UI is identical across platforms, wouldn't the overhead of writing two native UIs in KMP outweigh the benefits of shared logic?
We used KMP for a fintech app recently. Sharing the encryption and validation logic ensured that both platforms behaved identically, which was a huge win for our QA team.
That's a great point about QA, David. Having a single source of truth for business rules drastically reduces those "it works on Android but not iOS" bugs.
Linda, our UI needs to follow platform-specific design guidelines strictly (HIG for iOS and Material for Android). Flutter’s "one size fits all" look often feels slightly "off" to power users. With KMP, we can share about 70% of the code (the heavy lifting) while ensuring the app feels like a first-class citizen on both platforms. It's more work upfront, but the long-term UX is superior.