finds.dev← search

// the find

deviceplug/btleplug

★ 1,144 · Rust · NOASSERTION · updated May 2026

Rust Cross-Platform Host-Side Bluetooth LE Access Library

btleplug is an async Rust BLE library for host/central mode — connecting to BLE devices, not acting as one. It runs on Windows (WinRT), macOS/iOS (CoreBluetooth), Linux (BlueZ), and Android (JNI bridge to Android BLE APIs). If you need Rust code that talks to a heart rate monitor or a smart lock across all five platforms, this is the only real option.

The feature matrix table in the README is honest — they mark what actually works with X and leave blanks where it doesn't, which saves you from discovering gaps at 11pm. The integration test infrastructure is serious: real hardware support with nRF52840 DK firmware, plus a Bumble-based virtual peripheral path if you only have a USB BLE dongle. The async API is clean — scanning yields a stream, peripheral events are async, nothing blocks. Android Proguard rules are documented proactively, which suggests someone has actually shipped this to production and hit the R8 stripping issue.

Android setup is genuinely painful. You're building a hybrid Rust/Java project with JNI glue, a vendored copy of jni-utils, a Gradle subproject inside the crate, and manual Proguard rules — this isn't cargo add and go. The BlueZ scan filter behavior on Linux is broken at the OS level: BlueZ merges discovery filters across all D-Bus clients, so your app receives advertisements it didn't ask for and has to post-filter itself; the README documents this but it's easy to miss and will produce subtle bugs. MAC addresses aren't exposed on macOS/iOS — CoreBluetooth UUIDs are randomized per-session, so any code that uses MAC addresses for device identity will silently break on Apple platforms. Multiple adapter support only works on Linux; Windows, macOS, iOS, and Android all assume one adapter.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →