Files
Meshtastic-Android/docs/decisions/ble-strategy.md

1.3 KiB

Decision: BLE KMP Strategy

Date: 2026-03-10 | Status: Decided — Phase 1 complete

Context

core:ble needed to support non-Android targets. Nordic's KMM-BLE-Library is Android/iOS only (no Desktop/Web). KABLE supports all KMP targets but lacks mock modules.

Decision

Interface-Driven "Nordic Hybrid" Abstraction:

  • commonMain: Pure Kotlin interfaces (BleConnection, BleScanner, BleDevice, BleConnectionFactory, etc.) — zero platform imports
  • androidMain: Nordic KMM-BLE-Library implementations behind those interfaces
  • jvm() target added — interfaces compile fine; no JVM BLE implementation needed yet
  • Future: KABLE or alternative can implement the same interfaces for Desktop/iOS without touching core logic

BLE library decision: Stay on Nordic, wait. Our abstraction layer is clean — switching backends later is a bounded, mechanical task (~6 files, ~400 lines). Nordic is actively developing. We don't currently need real BLE on JVM/iOS. If Nordic hasn't shipped KMP by the time we need iOS, revisit KABLE.

Consequences

  • core:ble compiles on JVM and is included in CI smoke compile
  • No Nordic types leak into commonMain
  • Desktop simply doesn't inject BLE bindings
  • Migration cost to KABLE is predictable and bounded

Archive

Full analysis: archive/ble-kmp-strategy.md