Type-safe, high-performance RPC
over Bluetooth Low Energy using Protocol Buffers.
Protocol Buffers
Define your BLE communication with .proto files. Get type-safe, language-agnostic serialization with zero ambiguity.
High Performance
Achieves near-maximum BLE throughput (~30 KB/s) with MTU-aware fragmentation and zero-copy optimizations.
Multi-Platform
Run on iOS, Android, macOS, Linux, and embedded devices (nRF54, EFR32) with consistent APIs.
How It Works
bleRPC provides a two-layer protocol stack on top of BLE GATT:
- Command Layer — Wraps Protocol Buffers payloads with command metadata (name, type, data length).
- Container Layer — Fragments command payloads into MTU-sized containers for BLE transmission, with reassembly on the receiving side.
All communication uses a single GATT Characteristic: the Central writes requests via Write Without Response and receives responses via Notify.
sequenceDiagram
participant C as Central<br/>(iOS / Android / Python)
participant P as Peripheral<br/>(Zephyr / Python)
Note over C: Protobuf encode + Command wrap
Note over C: Split into MTU containers
C->>+P: Write Without Response (containers)
Note over P: Reassemble containers
Note over P: Decode command + Protobuf
Note over P: Execute handler
Note over P: Encode response + Split into containers
P->>-C: Notify (containers)
Note over C: Reassemble + decode response
Supported Platforms
Central (Client)
| Platform | Language | BLE Stack | Status |
|---|---|---|---|
| iOS | Swift | CoreBluetooth | Stable |
| Android | Kotlin | Android BLE | Stable |
| macOS / Linux | Python | bleak | Stable |
| Zephyr (nRF54L15) | C | Zephyr BLE | Stable |
Peripheral (Server)
| Platform | Language | BLE Stack | Status |
|---|---|---|---|
| Zephyr (nRF54L15) | C | Zephyr BLE | Stable |
| Zephyr (EFR32xG22E) | C | Zephyr BLE + SiLabs HCI | Stable |
| macOS | Python | bless | Stable |
Protocol Libraries
| Language | Package | Dependencies |
|---|---|---|
| Swift | blerpc-protocol-swift | Foundation only |
| Kotlin | blerpc-protocol-kt | Protobuf JavaLite |
| Python | blerpc-protocol | None |
| C | blerpc-protocol/c | None |