Episode ini menjelajahi Kotlin Multiplatform: arsitektur KMP dengan shared module untuk JVM, Android, JS, dan Native, deklarasi expect dan actual, hierarki source set untuk berbagi kode antar platform, serta use case nyata untuk mobile, desktop, dan web.

Kotlin tidak hanya berjalan di JVM dan Android. Episode 12 membuka Kotlin Multiplatform (KMP): kemampuan menulis logika bisnis sekali dan memakainya di Android, iOS, desktop, JavaScript, dan Native. Ini adalah arah strategis JetBrains dan salah satu topik yang paling cepat berkembang.
Kunci KMP adalah membagi kode menjadi platform-common yang dibagikan dan platform-specific yang ditulis per target. Deklarasi expect dan actual menjembatani keduanya dengan jaminan compile-time.
Setelah episode ini, kalian akan memahami kapan KMP tepat dipakai dan bagaimana menyusun shared module pertama.
KMP memungkinkan menulis shared module sekali lalu mengompilasinya ke beberapa target: JVM, Android, iOS (Native), JavaScript (Wasm), dan desktop. Platform-common berisi logika bisnis, model data, dan koneksi data; platform-specific berisi API yang bergantung pada sistem operasi.
Hierarki ini disusun di file Gradle. Contoh konfigurasi target:
kotlin {
jvm()
androidTarget()
iosX64()
iosArm64()
iosSimulatorArm64()
js(IR) {
browser()
nodejs()
}
sourceSets {
commonMain.dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
}
}
}jvm() untuk desktop/server, androidTarget() untuk Android, tiga varian ios* untuk perangkat dan simulator Apple, serta js(IR) untuk web. Dependensi yang dipakai bersama dideklarasikan di commonMain.
Kode untuk iOS dan Native dikompilasi menjadi binary native (bukan bytecode JVM) memakai compiler Kotlin/Native. Ini berarti aplikasi iOS memakai kode Kotlin yang dikompilasi langsung ke machine code, dengan performa native penuh.
Source set utama KMP adalah commonMain untuk kode bersama dan commonTest untuk test bersama. Setiap target punya source set khusus, misalnya androidMain dan iosMain, untuk kode spesifik platform. Compiler KMP membuat source set perantara (seperti nativeMain) otomatis berdasarkan target yang dideklarasikan.
Logika yang paling menguntungkan dibagikan:
Kode UI biasanya tetap spesifik platform — Compose Multiplatform untuk desktop dan Android, SwiftUI untuk iOS. Strategi berbagi logika dan memisahkan UI adalah pola KMP yang paling umum di production.
Kata kunci expect mendeklarasikan API yang harus disediakan setiap platform. Kata kunci actual memberikan implementasi spesifiknya. Contoh klasik: mengambil tanggal sekarang:
expect fun tanggalSekarang(): StringDeklarasi expect fun tanggalSekarang() menyatakan kontrak: setiap platform harus menyediakan fungsi ini. Compiler menjamin semua deklarasi expect punya actual yang cocok di setiap target — jika ketinggalan, build gagal.
Setiap target menyediakan implementasinya sendiri:
actual fun tanggalSekarang(): String = java.time.LocalDate.now().toString()Untuk target lain, source set masing-masing berisi actual versinya. Pola expect-actual adalah jembatan yang menjaga tipe tetap aman antar platform — tidak ada refleksi runtime yang rapuh, hanya implementasi yang diverifikasi saat kompilasi.
Pola pemakaian KMP yang umum:
Tim yang memakai KMP melaporkan penghematan besar karena aturan bisnis ditulis sekali dan diuji sekali untuk semua platform.
KMP menambah kompleksitas build dan tooling. Untuk prototype cepat atau aplikasi yang murni satu platform, project Kotlin JVM atau Android biasa lebih sederhana. Pertimbangkan KMP saat kalian benar-benar menargetkan beberapa platform dengan logika bisnis yang signifikan.
Episode 12 membuka Kotlin Multiplatform: arsitektur shared module untuk JVM, Android, JS, dan Native, hierarki source set untuk berbagi kode, deklarasi expect dan actual yang dijamin compiler, serta use case untuk mobile, desktop, dan web.
Inti yang harus dibawa pulang:
expect mendeklarasikan API; actual menyediakan implementasi per platform.Di episode 13 selanjutnya kita akan membahas testing dan quality — unit testing dengan Kotlin Test, JUnit, dan Kotest, mocking dengan MockK atau Mockito, pola Behavior-Driven Testing, serta continuous testing dan otomatisasi yang menjaga kualitas kode.