Four apps in, here is the honest split between what Kotlin Multiplatform shares and what you still write twice.
What genuinely shares
- Domain models and validation
- Use cases and business rules
- Networking, serialisation, and the repository layer
- Room, via the multiplatform artifact
That is the majority of the code in most apps, and it really does compile once.
What does not
Compose Multiplatform renders on iOS, but rendering is not the same as feeling native. Scroll physics, text selection, the share sheet, and every permission dialog still need platform work.
expect class Platform() {
val name: String
fun openSettings()
}
The part nobody warns you about
Gradle. A multiplatform build has more moving pieces than an Android one, and when a dependency does not publish an iOS artifact you find out late. Budget a day for the build before you budget anything for features.
Would I do it again
For Mathrid and Memento, yes — both shipped to two stores from one codebase. For an app that lives or dies on platform feel, I would still write it twice.