finds.dev

hbldh/bleak

A cross platform Bluetooth Low Energy Client for Python using asyncio

View on GitHub

★ 2,558PythonMITupdated Oct 2026

// the take

Bleak is an asyncio-based Python client for Bluetooth Low Energy, letting you scan for and talk to GATT servers (read/write/notify) on Windows, Linux (BlueZ), macOS, and Android from one API. It's for anyone writing cross-platform tooling for BLE sensors, wearables, or IoT devices without hand-rolling a backend per OS.

Genuinely cross-platform — it wraps WinRT, BlueZ D-Bus, CoreBluetooth, and python-for-android behind one async interface, which is the actual hard problem BLE libraries have to solve. Mature and actively maintained: real CI across platforms including an Alpine VM harness for BlueZ, a dedicated integration test suite against real adapters (winvhci controller, bluez controller), and a changelog going back years. Ships type stubs (py.typed) and typing shims for the native frameworks (CoreBluetooth, Foundation, objc) so you get real autocomplete instead of guessing at ctypes-style bindings. Clean separation of concerns between the public API and backend implementations makes it easy to reason about which OS quirks you're exposed to.

Cross-platform BLE is leaky by nature — the backends don't behave identically (pairing, MTU negotiation, notification reliability, and reconnect behavior all differ by OS and even by BLE chipset), so you will still hit platform-specific bugs and need platform-specific workarounds despite the unified API. GATT only — no classic Bluetooth (SPP, A2DP, etc.), so it's a non-starter if your device needs anything outside BLE. OS version floors are steep for a 'supports everything' library: Windows 11 22000+ and BlueZ 5.55+ cut out plenty of real-world embedded Linux and older Windows deployments. The Android backend depends on python-for-android, which is its own maintenance burden and far less battle-tested than the desktop backends, so treat mobile support as second-class.

We read the README, the directory tree and a key source file in October 2026. Nobody pays to be listed. How we judge →

// at a glance

Stars
2,558
Forks
375
Language
Python
License
MIT
Last commit
23 Oct 2026

// nearby

If bleak isn't quite it.

All repos →