finds.dev← search

// the find

tinygo-org/bluetooth

★ 981 · C · NOASSERTION · updated Jun 2026

Cross-platform Bluetooth API for Go and TinyGo. Supports Linux, macOS, Windows, and bare metal using Nordic SoftDevice or HCI

A cross-platform BLE library for Go and TinyGo that targets both desktop OSes (via BlueZ, CoreBluetooth, WinRT) and bare-metal microcontrollers (Nordic nRF series, ESP32, RP2040-W). The API is intentionally unified so the same Go code can run on a Linux laptop or a BBC micro:bit. This is for embedded Go developers who want to write BLE peripherals or centrals without touching platform-specific C SDKs.

The same Go source compiles to multiple targets via build tags — a real achievement given how different BlueZ D-Bus, WinRT async, and Nordic SoftDevice APIs are underneath. The Nordic SoftDevice binary blobs are vendored directly in the repo, so bare-metal flashing works without hunting down firmware separately. The support matrix table in the README is honest about what's missing (macOS can't advertise or act as a peripheral at all). The project is actively maintained — last push was yesterday.

macOS is half-baked: no advertising, no local services, no peripheral mode — it's central-only, which is a significant limitation if you want to test a peripheral on your dev machine. The API stability warning is not a formality; bonding, scan filters, and private addresses are explicitly unimplemented, so anything security-sensitive in BLE is a dead end. You can't be a simultaneous GATT client and server, which rules out BLE mesh or multi-role setups. The dependency on Nordic's proprietary SoftDevice binary blobs means peripheral mode on nRF chips is tied to closed firmware you can't audit or modify.

View on GitHub → Homepage ↗

// 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 →