Targets Reference¶
Every target Kotlin Multiplatform (KGP 2.3.21) supports, except the deprecated linuxArm32Hfp. The same vocabulary works in the supports { } DSL, the kmptargets.targets property, and CI matrix values.
Leaves¶
| Family | Targets |
|---|---|
| JVM | androidTarget (alias android), jvm (alias desktop) |
| iOS | iosArm64, iosSimulatorArm64, iosX64 |
| macOS | macosArm64, macosX64 |
| watchOS | watchosArm64, watchosArm32, watchosX64, watchosSimulatorArm64, watchosDeviceArm64 |
| tvOS | tvosArm64, tvosX64, tvosSimulatorArm64 |
| Linux | linuxX64, linuxArm64 |
| MinGW | mingwX64 |
| Android Native | androidNativeArm32, androidNativeArm64, androidNativeX86, androidNativeX64 |
| Web | js, wasmJs, wasmWasi |
Every leaf also accepts a kebab-case alias (e.g. watchos-sim-arm64, linux-x64, android-native-arm64), and parsing is case-insensitive.
Presets¶
| Preset | Expands to |
|---|---|
all |
every shipped target |
native |
every Kotlin/Native target (Apple + Linux + MinGW + Android Native) |
apple |
all Apple platforms: iOS + macOS + watchOS + tvOS |
appleMobile / appleDesktop |
all iOS / all macOS |
appleWatch / appleTv |
all watchOS / all tvOS |
linux |
linuxX64, linuxArm64 |
mingw (alias windows) |
mingwX64 |
androidNative |
the four androidNative* targets |
web |
js, wasmJs, wasmWasi |
jvmFamily |
androidTarget, jvm |
mobile |
androidTarget + all iOS |
Membership clarifications¶
jvmFamilyincludes Android — it is{androidTarget, jvm}, the two JVM-bytecode leaves, not justjvm.mobile=androidTarget+ the iOS leaves (iosArm64,iosSimulatorArm64,iosX64) — no watchOS, no macOS.androidNative≠androidTarget— the fourandroidNative*leaves are Kotlin/Native NDK targets; the Android app target isandroidTarget(aliasandroid).- Aliases:
android→androidTarget,desktop→jvm,windows→mingw. The alias and the canonical name are interchangeable in every layer. - Bare sub-family names are rejected:
ios,macos,watchos,tvosfail parsing with a hint pointing at the relevant leaf orappleXpreset — they would be ambiguous between "all leaves" and "the device leaf".
Deprecated leaves¶
Kotlin marks macosX64, watchosX64, and tvosX64 deprecated (since Kotlin 2.3.20). They stay selectable and stay in every preset (appleDesktop still expands to both macOS leaves) — registering one logs a deprecated-target advisory, and kmpTargetsInfo annotates them (deprecated) in its vocabulary listing. (iosX64 is low-tier but not deprecated.)
Composing¶
Presets and leaves compose with + / - in the DSL and with , / - / + in the property grammar: