Pendahuluan
Thermal printer masih menjadi tulang punggung sistem kasir, restoran, dan logistik di seluruh dunia. Tapi membangun aplikasi yang bisa mencetak ke thermal printer dari berbagai platform β Android, iOS, Desktop, Web β adalah tantangan besar.
KmpPrinter hadir sebagai solusi: library Kotlin Multiplatform open-source yang menyatukan semua transport thermal printer dalam satu API.
Dengan 2.200+ baris kode, 6 bahasa pemrograman, dan dukungan untuk Bluetooth Classic, BLE, USB, Network TCP, Serial, hingga Virtual, KmpPrinter adalah library thermal printing paling komprehensif di ekosistem Kotlin.
π Metadata Proyek
| Item | Detail |
|---|---|
| Repository | [ringga-dev/kmp-printer](https://github.com/ringga-dev/kmp-printer) |
| Lisensi | MIT β gratis untuk komersial dan personal |
| Stars | β 5 |
| Bahasa | TypeScript (42%), Kotlin (38%), JavaScript (17%), Vue (1.7%), CSS, Swift, C# |
| Release Terbaru | v2.2.2 (11 Juni 2026) |
| Platform | Android, iOS, JVM/Desktop, Web (JS), Wasm |
| Dokumentasi | [ringga-dev.github.io/kmp-printer](https://ringga-dev.github.io/kmp-printer/) |
β¨ Fitur Unggulan
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β KmpPrinter API β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β π Discovery β Bluetooth, BLE, Network, USB β
β π Connection β TCP, BLE, USB, Serial, Virtual β
β π Receipt DSL β Text, Tables, QR, Barcode β
β π Monitoring β Paper out, Cover, Error β
β π‘οΈ Concurrency β Mutex safety, Chunked sending β
β ποΈ Preview β Virtual render untuk UI preview β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Multi Transport
KmpPrinter support 6 tipe koneksi:
| Transport | Android | iOS | Desktop | Web |
|---|---|---|---|---|
| Bluetooth Classic | β | β | β | β |
| BLE | β | β | β | β |
| USB | β | β | β | β |
| Network TCP | β | β | β | β |
| Serial | β οΈ | β | β | β |
| Virtual | β | β | β | β |
BLE-only di iOS karena Apple tidak menyediakan API Bluetooth Classic untuk pihak ketiga.
Receipt Builder DSL
API utama KmpPrinter menggunakan DSL Kotlin yang intuitif:
// Contoh cetak struk kopi β 15 baris kode
printer.print(config) {
alignCenter()
bold(true)
line("β COFFEE SHOP")
bold(false)
divider()
tableRow(listOf("Americano", "2", "6.00"), listOf(2, 1, 1))
tableRow(listOf("Latte", "1", "4.50"), listOf(2, 1, 1))
divider()
line("Total: $10.50", align = "RIGHT")
feed(1)
qrCodeNative("https://example.com", center = true)
feed(3)
cut()
}.collect { status -> println(status) }
Printer Discovery (Flow-based)
Menggunakan Kotlin Coroutines Flow untuk discovery real-time:
printer.discovery("NETWORK") { log ->
println("Scanning: $log")
}.collect { devices ->
devices.forEach { device ->
println("Found: ${device.name} di ${device.address}:${device.port}")
}
}
Status Monitoring Real-time
Pantau kondisi printer secara periodik:
printer.monitorStatus(config, intervalMs = 2000).collect { status ->
when {
status.isPaperOut -> alert("π’ Kertas habis!")
status.isCoverOpen -> alert("π Cover terbuka!")
!status.isOnline -> alert("β οΈ Printer offline!")
}
}
ποΈ Arsitektur
KmpPrinter dibangun di atas Kotlin Multiplatform dengan arsitektur berlapis:
ββββββββββββββββββββββββββββββββββββββββββββ
β Application β
ββββββββββββββββββββββββββββββββββββββββββββ€
β KmpPrinter API (commonMain) β
ββββββββββββββββββββββββββββββββββββββββββββ€
β ββββββββββ ββββββββββ ββββββββββββββββ β
β β Androidβ β iOS β β Desktop/JVM β β
β β BLE β β CoreBLEβ β BlueZ + TCP β β
β ββββββββββ ββββββββββ ββββββββββββββββ β
β ββββββββββ ββββββββββ ββββββββββββββββ β
β β USB β β TCP/IP β β Web Serial β β
β ββββββββββ ββββββββββ ββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββ
Keunggulan arsitektur KMP:
π§ Cara Install
Gradle (KMP Project)
// settings.gradle.kts
dependencyResolutionManagement {
repositories {
maven {
url = uri("https://raw.githubusercontent.com/ringga-dev/kmp-printer/maven-repo")
}
}
}
// build.gradle.kts
kotlin {
sourceSets {
commonMain.dependencies {
implementation("io.github.ringga-dev:kmp_printer:2.2.2")
}
}
}
Platform-Specific Setup
Android: Tambahkan permission di AndroidManifest.xml:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.INTERNET" />
Desktop (Linux): Butuh udev rule untuk USB:
# /etc/udev/rules.d/99-thermal-printer.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="0416", MODE="0666"
π§ͺ Contoh Aplikasi
KmpPrinter sudah include aplikasi demo Vue 3 untuk web:
kmp-printer/
βββ composeApp/ # Android + Desktop app (Compose Multiplatform)
βββ demo-web/ # Vue 3 demo aplikasi web
βββ kmp-printer/ # Library utama (commonMain)
β βββ src/commonMain
β βββ src/androidMain
β βββ src/iosMain
β βββ src/jvmMain
β βββ src/jsMain
βββ docs/ # Dokumentasi
π Kode dan Metrik
| Metrik | Nilai |
|---|---|
| Total baris kode | 1.097.000+ |
| TypeScript | 461.000 baris (42%) |
| Kotlin | 420.000 baris (38%) |
| JavaScript | 182.500 baris (17%) |
| Release terbaru | v2.2.2 |
| Package | io.github.ringga-dev:kmp_printer |
π‘ Kasus Penggunaan
1. Sistem POS Restoran
// Cetak struk pesanan dapur
printer.print(kitchenConfig) {
bold(true)
fontSize(2)
line("π³ DAPUR")
divider()
line("Meja 5 β #102")
line("1x Nasi Goreng")
line("1x Es Teh")
feed(2)
cut()
}
2. Logistik & Warehouse
// Cetak barcode untuk tracking
printer.print(labelConfig) {
barcode(orderId, type = BarcodeType.CODE128)
line("Order: $orderId")
line("Tanggal: $date")
qrCodeNative(trackingUrl, size = 8)
cut()
}
3. Aplikasi Kesehatan
// Cetak label obat
printer.print(pharmacyConfig) {
line("π₯ Apotek Sehat")
line("Pasien: ${patient.name}")
line("Obat: ${medicine.name}")
line("Dosis: ${medicine.dosage}")
barcode(prescriptionId, type = BarcodeType.CODE39)
cut()
}
π Roadmap
Fitur yang direncanakan ke depan:
Kesimpulan
KmpPrinter adalah solusi thermal printing multiplatform yang matang, dengan:
Dengan 42% TypeScript dan 38% Kotlin, library ini memanfaatkan kekuatan KMP untuk memberikan performa native di setiap platform β cukup tulis sekali, cetak di mana saja.
Mulai hari ini:
git clone https://github.com/ringga-dev/kmp-printer.git
cd kmp-printer
./gradlew build
π Happy printing!