← All courses

Project Structure & expect/actual

🗓 May 31, 2026 ⏱ 1 min read

Source sets

  • commonMain — shared Kotlin for all platforms.
  • androidMain — Android-only code (can use Android APIs).
  • iosMain — iOS-only code (can call Apple APIs).

expect / actual

Declare a need in common with expect; implement it per platform with actual.

// commonMain
expect fun platformName(): String

// androidMain
actual fun platformName(): String = "Android ${android.os.Build.VERSION.SDK_INT}"

// iosMain
actual fun platformName(): String =
    UIDevice.currentDevice.systemName()

Gradle targets

kotlin {
    androidTarget()
    iosArm64()
    iosSimulatorArm64()
    sourceSets {
        commonMain.dependencies { /* shared libs */ }
    }
}
Tip: keep as much as possible in commonMain; only drop into expect/actual when you truly need a platform API.