Kotlin/Native — adalah kompiler kode Kotlin langsung ke kode mesin native, yang bekerja tanpa mesin virtual. Berbeda dengan versi JVM, Kotlin/Native menggunakan backend LLVM untuk menghasilkan file yang dapat dieksekusi untuk iOS, Android NDK, macOS, Windows, Linux dan WebAssembly. Teknologi ini merupakan fondasi Kotlin Multiplatform dan memastikan eksekusi kode bersama di platform di mana JVM tidak tersedia. Menurut JetBrains, 2025, Kotlin/Native mendukung 13 platform target dan memungkinkan penggunaan kembali hingga 90% kode dalam proyek KMM.
Poin utama
Kotlin/Native — adalah teknologi kompilasi kode Kotlin ke kode mesin native, yang dikembangkan oleh perusahaan JetBrains. Perbedaan utama dari Kotlin/JVM adalah tidak adanya kebutuhan akan mesin virtual — file yang dapat dieksekusi akhir hanya berisi kode mesin dan runtime minimal. Ini memungkinkan menjalankan aplikasi Kotlin pada perangkat dan sistem di mana JVM tidak didukung, termasuk iPhone, Apple Watch, dan sistem tertanam.
Sejarah Kotlin/Native dimulai dari proyek kompiler eksperimental yang pada tahun 2017 diintegrasikan ke dalam cabang utama Kotlin. Pada tahun 2019 di KotlinConf diumumkan dukungan untuk iOS sebagai platform target, yang menjadi titik balik bagi pengembangan mobile. Sejak versi Kotlin 1.9.20, kompiler Kotlin/Native mencapai stabilitas dan disertakan dalam Kotlin Multiplatform secara default.
Fitur utama Kotlin/Native adalah penggunaan representasi perantara bersama IR, yang dikompilasi ke kode mesin untuk setiap platform secara terpisah. Ini memastikan frontend kompilasi terpadu untuk semua backend Kotlin: JVM, JS, dan Native.
Kompilasi Kotlin/Native melewati beberapa tahap transformasi. Kode sumber dalam Kotlin pertama-tama diubah menjadi representasi internal, kemudian dioptimalkan dan diteruskan ke backend LLVM untuk menghasilkan kode mesin. Tahap akhir adalah penautan dengan pustaka runtime dan pembuatan file yang dapat dieksekusi atau pustaka dinamis.
Arsitektur mencakup tiga komponen utama: frontend (penguraian dan pemeriksaan tipe), generator IR (pembangunan representasi perantara), dan backend LLVM (pembuatan kode mesin). Skema ini mirip dengan pendekatan yang digunakan dalam kompiler Clang untuk C++ dan Rust.
// Kompilasi Kotlin/Native melalui baris perintah
kotlinc-native hello.kt -o hello -opt
// Membangun untuk iOS arm64 melalui Kotlin Multiplatform
./gradlew :shared:linkDebugFrameworkIosArm64
Untuk manajemen memori, Kotlin/Native menggunakan Memory Manager sendiri, berdasarkan penghitungan referensi dengan detektor siklik. Sejak Kotlin 1.7.20, manajer memori baru bekerja secara default dan tidak memerlukan anotasi @ThreadLocal atau @SharedImmutable. Pengumpul sampah bekerja tanpa menghentikan thread, yang sangat penting untuk iOS, di mana sistem dapat secara paksa menutup aplikasi saat thread utama diblokir dalam waktu lama.
Proses kompilasi dibagi menjadi lima tahap: penguraian (analisis kode sumber), analisis semantik (pemeriksaan tipe dan resolusi nama), pembuatan IR (pembangunan representasi perantara), optimasi (penyederhanaan dan penghapusan kode mati), dan pembuatan kode melalui LLVM. Setiap tahap dapat dijalankan secara paralel untuk modul yang berbeda, yang mempercepat pembangunan proyek besar.
| Tahap | Durasi | Hasil |
|---|---|---|
| Penguraian | ~10% waktu | Pohon AST kode sumber |
| Analisis semantik | ~20% waktu | AST yang diketik |
| Pembuatan IR | ~15% waktu | Kotlin IR (Intermediate Representation) |
| Optimasi | ~25% waktu | IR yang dioptimalkan |
| Pembuatan kode LLVM | ~30% waktu | Kode mesin + file eksekusi |
Kotlin/Native mendukung 13 platform target, dibagi ke dalam kategori. Untuk pengembangan mobile tersedia iOS (arm64), Android (arm32, arm64, x86_64), dan watchOS. Platform desktop mencakup macOS (x64, arm64), Windows (mingw x64), dan Linux (x64, arm64, arm32). Untuk pengembangan server dan tertanam, tersedia WebAssembly dan Kotlin/Native di LLVM tanpa sistem operasi (standalone). Setiap platform memerlukan framework atau pustaka terpisah pada keluaran.
Untuk iOS, Kotlin/Native menghasilkan framework universal (.framework) yang dapat dihubungkan ke proyek Xcode. Untuk Android NDK, dibuat pustaka native .so yang dapat dipanggil melalui JNI. Platform watchOS didukung sejak Kotlin 1.6.0, dan tvOS sejak versi 1.7.0. Setiap arsitektur memerlukan pembangunan terpisah, tetapi Kotlin Multiplatform mengotomatiskan proses ini melalui plugin Gradle.
macOS dan Linux digunakan untuk pengembangan aplikasi desktop native di Kotlin menggunakan framework Compose Multiplatform. Platform Windows (MinGW) didukung sejak Kotlin 1.3.70 dan memungkinkan pembuatan aplikasi Windows tanpa instalasi JVM. Untuk pengembangan server, Kotlin/Native dapat digunakan di lingkungan di mana JVM tidak tersedia, misalnya, dalam wadah Docker dengan gambar minimal berbasis scratch atau Alpine.
| Kategori | Platform | Arsitektur |
|---|---|---|
| Mobile | iOS | arm64, simulator (x64, arm64) |
| Mobile | Android NDK | arm32, arm64, x86, x86_64 |
| Dapat dipakai | watchOS | arm64, simulator (x64) |
| Desktop | macOS | x64, arm64 |
| Desktop | Windows | mingw x64 |
| Desktop | Linux | x64, arm64, arm32 |
iOS adalah platform target utama Kotlin/Native dalam konteks KMM. Kompiler membuat framework iOS yang berisi semua kode bersama, yang kemudian dihubungkan ke proyek Xcode. Framework mendukung penautan statis dan dinamis. Kotlin/Native menghasilkan pembungkus Objective-C untuk kelas dan fungsi Kotlin, memastikan integrasi langsung dengan kode Swift dan Objective-C.
Integrasi dengan iOS memerlukan konfigurasi Xcode untuk menghubungkan framework yang dihasilkan. Kotlin Multiplatform mengotomatiskan proses ini dengan tugas embedAndSignAppleFrameworkForXcode yang dijalankan dari Xcode Build Phases. Untuk debugging, Kotlin/Native mendukung titik henti dalam kode modul bersama saat menjalankan aplikasi di simulator iOS.
// Kode Kotlin dikompilasi ke framework iOS
package com.itsectr.shared
class GreetingProvider {
fun createGreeting(): String {
return "Hello from Kotlin/Native!"
}
fun formatVersion(major: Int, minor: Int): String {
return "v$major.$minor"
}
}
Interop dengan kode iOS bekerja di kedua arah. Kotlin/Native menghasilkan header Objective-C untuk kelas Kotlin yang secara otomatis tersedia dari Swift. Umpan balik disediakan oleh anotasi @ObjCName untuk mengekspor fungsi Kotlin dengan nama Objective-C tertentu. Koleksi Kotlin secara otomatis dikonversi ke NSArray dan NSDictionary, dan korutin Kotlin dibungkus dalam Combine publishers melalui pustaka SKIE. Untuk bekerja dengan framework iOS dari Kotlin, digunakan cinterop — alat untuk menghasilkan pengikatan Kotlin ke header Objective-C.
Untuk memulai bekerja dengan Kotlin/Native, diperlukan konfigurasi build.gradle.kts dengan menentukan plugin Kotlin Multiplatform dan platform target. Mari kita lihat konfigurasi minimal untuk proyek KMM dengan dukungan iOS dan Android.
plugins {
kotlin("multiplatform") version "2.0.21"
}
kotlin {
iosArm64()
iosSimulatorArm64()
sourceSets {
commonMain.dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
}
iosMain.dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
}
}
}
Setelah mengkonfigurasi pembangunan, kode yang bergantung pada platform dapat ditambahkan. Kotlin/Native menyediakan akses ke fungsi iOS melalui pembungkus Kotlin. Misalnya, mendapatkan UUID perangkat di iOS memerlukan pemanggilan NSUUID dari Foundation.
import platform.Foundation.NSUUID
fun getDeviceId(): String {
return NSUUID().UUIDString()
}
fun currentTimestampMillis(): Long {
return (platform.Foundation.NSDate().timeIntervalSince1970 * 1000).toLong()
}
Untuk menghasilkan framework iOS, digunakan tugas Gradle linkDebugFrameworkIosArm64 atau linkReleaseFrameworkIosArm64 untuk produksi. Setelah pembangunan, framework terletak di build/bin/iosArm64/debugFramework/. Penghubungan ke proyek Xcode dilakukan melalui Pods Podfile atau dengan menambahkan framework di bagian General → Frameworks, Libraries and Embedded Content.
// Membangun framework release untuk iOS arm64
./gradlew :shared:linkReleaseFrameworkIosArm64
// Membangun framework universal x86_64 + arm64
./gradlew :shared:linkReleaseFrameworkIosX64 \
:shared:linkReleaseFrameworkIosArm64
// Buat XCFramework untuk App Store
./gradlew :shared:assembleReleaseXCFramework
Kotlin/Native dan Kotlin/JVM berbeda dalam arsitektur, kinerja, dan bidang aplikasi. Kotlin/JVM mengkompilasi kode menjadi bytecode yang dijalankan di JVM, yang memberikan akses ke ekosistem pustaka Java yang sangat besar, tetapi memerlukan mesin virtual yang terinstal. Kotlin/Native menghasilkan file yang dapat dieksekusi tanpa ketergantungan eksternal, tetapi dengan ekosistem pustaka yang lebih terbatas.
Kinerja waktu mulai Kotlin/Native lebih tinggi karena tidak perlu memuat JVM. Menurut tolok ukur JetBrains, aplikasi Hello World di Kotlin/Native dimulai dalam 0,003 detik, sementara Kotlin/JVM membutuhkan 0,5–1 detik untuk memuat mesin virtual. Namun, ukuran file yang dapat dieksekusi Kotlin/Native bisa 2–3 kali lebih besar karena runtime yang disertakan.
| Karakteristik | Kotlin/Native | Kotlin/JVM |
|---|---|---|
| Platform target | iOS, macOS, Windows, Linux, WebAssembly, embedded | Server, Android, desktop (JVM) |
| Ketergantungan | Tanpa runtime (mandiri) | Memerlukan JVM (JDK/JRE) |
| Waktu mulai | ~3 ms | ~500–1000 ms |
| Ekosistem | Terbatas (Kotlin + Interop) | Lengkap (Kotlin + Java + Android SDK) |
| Ukuran biner | ~1–5 MB (dengan runtime) | ~100–500 KB (JAR) |
Pilihan antara Kotlin/Native dan Kotlin/JVM tergantung pada platform target. Jika proyek ditujukan untuk iOS atau memerlukan konsumsi sumber daya minimal, Kotlin/Native adalah satu-satunya pilihan. Untuk pengembangan Android, Kotlin/JVM tetap menjadi standar, meskipun Kotlin/Native digunakan untuk komponen NDK di mana kinerja native diperlukan. Dalam proyek multi-platform, Kotlin Multiplatform menggabungkan kedua pendekatan: kode bersama dikompilasi melalui Kotlin/Native untuk iOS dan melalui Kotlin/JVM untuk Android.
Pertanyaan yang sering diajukan
Kotlin/Native mengkompilasi kode ke kode mesin native tanpa mesin virtual, sedangkan Kotlin/JVM mengkompilasi ke bytecode yang memerlukan JVM terinstal. Kotlin/Native digunakan untuk iOS, sistem tertanam, dan WebAssembly, Kotlin/JVM untuk Android dan server.
Ya, Kotlin/Native dapat digunakan sebagai kompiler mandiri untuk membuat aplikasi konsol, plugin native, atau pustaka untuk platform yang didukung. KMM hanya menyederhanakan organisasi kode multi-platform.
Memory Manager Kotlin/Native menggunakan penghitungan referensi dengan detektor siklik otomatis. Sejak Kotlin 1.7.20, pengumpul sampah tidak memerlukan anotasi @ThreadLocal dan bekerja tanpa menghentikan thread utama iOS.
Melalui cinterop, semua framework iOS tersedia: Foundation, UIKit, CoreData, CoreBluetooth, MapKit, dan ratusan lainnya. JetBrains menyediakan pengikatan siap pakai untuk pustaka iOS standar dalam komposisi Kotlin/Native.
Untuk debugging, digunakan Xcode dengan framework Kotlin/Native yang terhubung. Titik henti dalam kode Kotlin berfungsi saat dijalankan di simulator iOS. Untuk perangkat, diperlukan build Debug dan profil pengembang Apple.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga