> Markdown version of [/videos/100250-building-a-cross-platform-ble-client-with-kotlin-multiplatform-and-kable?t=618](https://www.wearedevelopers.com/videos/100250-building-a-cross-platform-ble-client-with-kotlin-multiplatform-and-kable?t=618). Every page supports `.md` or `Accept: text/markdown`. Links point to the HTML versions so they work for humans too. Agent guide: [/agents.md](https://www.wearedevelopers.com/agents.md). --- # Building a Cross-Platform BLE Client with Kotlin Multiplatform and Kable Stop duplicating fragile Bluetooth code across mobile ecosystems. Transform chaotic BLE integrations into a stable, coroutine-powered codebase using Kotlin Multiplatform and Kable. - **Speakers:** [Georg Dresler](https://www.wearedevelopers.com/@georg) - **Event:** World Congress 2026 Europe - **Published:** July 10, 2026 - **Duration:** 27:48 - **URL:** https://www.wearedevelopers.com/videos/100250-building-a-cross-platform-ble-client-with-kotlin-multiplatform-and-kable ## Summary Bluetooth Low Energy (BLE) integration is notoriously difficult across mobile ecosystems due to fragmented platform-native APIs, unreliable callbacks, and complex background operations. Navigating the underlying architecture of broadcasting peripherals, grouped services, and readable or writable characteristics traditionally requires duplicating fragile code across iOS, Android, and web. By conceptualizing BLE as an "asynchronous state machine," developers can move away from platform-specific SDK chaos toward a unified, predictable codebase. Kotlin Multiplatform (KMP) combined with the Kable library resolves cross-platform fragmentation by abstracting the quirks of underlying Bluetooth chips into shared Kotlin code. Inside this unified layer, Kotlin Coroutines elegantly handle complex timelines like user PIN entries or dropped pairings through simple suspending functions, preventing code from turning into a callback "crime scene." Meanwhile, Coroutine Flows stream real-time environmental changes—such as battery updates or sensor readings—making observing dynamic peripheral states feel idiomatic and sequential. To keep messy OS-level behaviors out of core business logic, embracing an onion architecture pushes Kable's platform abstractions to the outer edges. This keeps the central domain portable and natively orchestrates structured concurrency. Tying connection lifecycles to robust Coroutine Scopes ensures stable resource management so that canceled sessions drop work safely, clean up in-flight writes, and gracefully disconnect to free up the peripheral. Ultimately, building a single, coroutine-powered BLE client stabilizes hardware communication and unlocks reliable hardware control across the entire device ecosystem. **Keywords:** cross-platform BLE clients, bluetooth low energy integration, kotlin multiplatform KMP, kable library abstraction, kotlin coroutines and flows, asynchronous state machine modeling, BLE peripherals and characteristics, structured concurrency connection management, onion architecture pattern, cross-platform hardware APIs, hardware state observation, mobile state management, suspending functions lifecycle, shared business logic domain ## Chapters 1. **The complexities of developing Bluetooth Low Energy applications** (00:02) — Frequent disconnects, platform differences, and unreliable state callbacks make managing Bluetooth functionality notoriously challenging for developers. 1. **Core architecture and building blocks of Bluetooth Low Energy** (03:12) — The foundational architecture of the protocol relies on centrally coordinated clients, broadcasting peripherals, unique services, and distinct characteristics. 1. **Managing asynchronous state in robust Bluetooth connections** (08:08) — Discovering nearby devices, negotiating authentication, and serializing concurrent read and write requests demand precise asynchronous state management. 1. **Handling asynchronous operations with native Kotlin coroutines** (10:18) — Suspending functions and flows abstract asynchronous callbacks into sequential code while coroutine scopes safely manage connection cancellation and cleanup. 1. **Building portable Bluetooth logic using Kotlin multiplatform** (13:48) — The onion architecture pattern isolates platform-specific implementations to outer layers while preserving core domain and business logic for cross-platform reuse. 1. **Abstracting platform-specific Bluetooth APIs using the Kable library** (18:31) — Integrating a unified multiplatform library eliminates disparate platform quirks by mapping standard operations natively to coroutine flows and suspending functions. 1. **Controlling a selected Bluetooth peripheral via live demo** (21:50) — Filtering device advertisements and writing continuous characteristic updates enables functional real-time control of hardware peripherals from a shared codebase. 1. **Platform constraints on concurrent peripheral device connections** (26:10) — Operating systems heavily dictate the maximum number of concurrent peripheral connections a single central leader can securely maintain. ## Related Moments - [Developing front-end client applications using Kotlin Multiplatform libraries](https://www.wearedevelopers.com/videos/1184-location-verification-without-gps) (from "Location Verification without GPS?") - [Solving cross-platform drawbacks with Kotlin Multiplatform](https://www.wearedevelopers.com/videos/4-kotlin-multiplatform-true-power-of-native-code-reuse) (from "Kotlin Multiplatform - True power of native code reuse") - [Designing cross-platform APIs with team collaboration](https://www.wearedevelopers.com/videos/100143-the-dark-corners-of-kotlin-multiplatform) (from "The Dark Corners of Kotlin Multiplatform") - [Key takeaways and future Kotlin Multiplatform improvements](https://www.wearedevelopers.com/videos/4-kotlin-multiplatform-true-power-of-native-code-reuse) (from "Kotlin Multiplatform - True power of native code reuse") - [Architectural boundaries and the Kotlin Multiplatform survival kit](https://www.wearedevelopers.com/videos/100143-the-dark-corners-of-kotlin-multiplatform) (from "The Dark Corners of Kotlin Multiplatform") - [Centralizing mobile business logic with Kotlin Multiplatform](https://www.wearedevelopers.com/videos/100341-vertical-slice-architecture-micro-frontends-across-mobile-backend-ml) (from "Vertical Slice Architecture: Micro Frontends Across Mobile, Backend & ML") ## Related Articles - [Basic And Advanced Networking in Dart and Flutter](https://www.wearedevelopers.com/magazine/112-basic-and-advanced-networking-in-dart-and-flutter) - [Cross Platform Mobile Development Frameworks to Use in 2025](https://www.wearedevelopers.com/magazine/404-cross-platform-mobile-development-frameworks-to-use-in-2025) - [The Concept of Concurrency & Multithreading: What Are They And How They Function](https://www.wearedevelopers.com/magazine/89-the-concept-of-concurrency-multithreading-what-are-they-and-how-they-function) - [The CAMARA Project: How Telcos Collaborating Improves Developer Experience](https://www.wearedevelopers.com/magazine/671-the-camara-project-how-telcos-collaborating-improves-developer-experience) ## Related Jobs - [Senior Software Engineer, Android (Earn Experience)](https://www.wearedevelopers.com/jobs/ext/1937627-senior-software-engineer-android-earn-experience) at **Bitpanda** - [iOS Engineer, Swift/SwiftUI/Combine (B2C Broker)](https://www.wearedevelopers.com/jobs/ext/1611832-ios-engineer-swift-swiftui-combine-b2c-broker) at **Bitpanda** - [Founding Mobile Engineer (iOS)](https://www.wearedevelopers.com/jobs/ext/1648532-founding-mobile-engineer-ios) at **Almedia** - [Senior Backend Engineer (Java)](https://www.wearedevelopers.com/jobs/ext/19369-senior-backend-engineer-java) at **Bonial International GmbH** - [Senior Software Engineer, Client Apps Platform](https://www.wearedevelopers.com/jobs/ext/1773893-senior-software-engineer-client-apps-platform) at **GitHub** - [Software Engineer (L4)](https://www.wearedevelopers.com/jobs/ext/1932007-software-engineer-l4) at **Twilio**