Tooling

Mobile — Kotlin Multiplatform (KMP)

Share business logic (and increasingly UI) across iOS, Android, desktop, and web from one Kotlin codebase.

Kotlin Multiplatform (KMP) is JetBrains' answer to "share the boring 80% of an app across platforms." Unlike RN or Flutter, KMP doesn't force a UI layer — by default you ship native Swift/SwiftUI on iOS and Compose on Android, sharing only logic. With Compose Multiplatform you can also share UI. KMP went stable in late 2023 and has serious momentum in 2026, including JetBrains' own Fleet IDE and adoption inside Google (Workspace) and others.

For UI-shared cross-platform see Compose Multiplatform. For Swift-driven sharing see Skip. For JS-driven see RN.

All core KMP tooling is free / Apache 2.0.

Core stack

  • Kotlin Multiplatform — JetBrains; stable since 2023; production-ready.
  • Gradle + Kotlin DSL — the build system.
  • KSP (Kotlin Symbol Processing) — multiplatform-friendly annotation processing.

Networking

  • Ktor Client — JetBrains' multiplatform HTTP client; the default.
  • Apollo Kotlin — GraphQL, multiplatform.

Persistence

  • SQLDelight — type-safe SQL; the multiplatform default.
  • Room 2.7+ — Google's Room is now KMP-capable (iOS, JVM, Android).
  • Realm Kotlin — KMP-supported.
  • multiplatform-settings — small KV preferences across platforms.
  • Store5 — caching layer on top.
  • See Mobile — Databases & Storage.

Async / concurrency

  • Kotlin Coroutines + Flow — multiplatform-native.
  • kotlinx.serialization — JSON / protobuf / CBOR; the default in KMP code.
  • kotlinx-datetime — date/time across platforms.

DI

  • Koin — pure-Kotlin, multiplatform DI; the most popular choice in KMP.
  • kotlin-inject — compile-time DI; KMP-capable.
  • Metro — newer compile-time DI.

UI

  • Native UI per platform — SwiftUI on iOS, Compose on Android (most common pattern).
  • Compose Multiplatform — JetBrains' Compose for iOS + desktop + web. See its own page.

Routing (when sharing UI)

  • Voyager — Compose Multiplatform router.
  • Decompose — multiplatform navigation + lifecycle abstraction; native on iOS.
  • PreCompose — Compose Multiplatform navigation.

Tooling

  • Android Studio with KMP plugin — primary IDE.
  • IntelliJ IDEA — works fine.
  • Fleet (JetBrains) — distraction-free, multiplatform-aware.
  • Xcode — required to run iOS simulator and sign builds.
  • kdoctor — JetBrains' env-check CLI for KMP setup.

Interop

  • Swift / Objective-C interop — KMP generates Objective-C-shaped frameworks consumable from Swift; KMP 1.9+ ships Swift export (preview) for native Swift APIs.
  • JavaScript / Wasm — Kotlin/JS and Kotlin/Wasm targets share the same Kotlin code.

Testing

Observability / crash reporting

Pick this if…

  • You have separate iOS + Android teams and want to share networking/state/DB: KMP with native UI per platform.
  • Want shared UI too: add Compose Multiplatform.
  • Already SwiftUI-shop, want Android from there: Skip instead.
  • JS-flavored team: React Native.
  • Single team, single rendering pipeline, accepts non-native widgets: Flutter.

On this page