Type-safe, high-performance, secure RPC over Bluetooth Low Energy.
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.
End-to-End Encryption
Optional E2E encryption with X25519 key exchange, Ed25519 signatures, and AES-128-GCM session encryption.
How It Works
bleRPC provides a layered protocol stack on top of BLE GATT:
- Command Layer — Wraps Protocol Buffers payloads with command metadata (name, type, data length).
- Encryption Layer (optional) — Encrypts the serialized command with AES-128-GCM after a 4-step key exchange.
- Container Layer — Fragments 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 / Flutter / RN / Python)
participant P as Peripheral<br/>(Zephyr / Python)
Note over C: Protobuf encode + Command wrap
Note over C: Encrypt (if enabled)
Note over C: Split into MTU containers
C->>+P: Write Without Response (containers)
Note over P: Reassemble containers
Note over P: Decrypt (if enabled)
Note over P: Decode command + Protobuf
Note over P: Execute handler
Note over P: Encode response + Encrypt + Split
P->>-C: Notify (containers)
Note over C: Reassemble + Decrypt + Decode
Supported Platforms
Central (Client)
| Platform | Language | BLE Stack | Status |
|---|---|---|---|
| iOS | Swift | CoreBluetooth | Stable |
| Android | Kotlin | Android BLE | Stable |
| iOS / Android | Dart (Flutter) | flutter_blue_plus | Stable |
| iOS / Android | TypeScript (React Native) | react-native-ble-plx | 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 + CryptoKit |
| Kotlin | blerpc-protocol-kt | Protobuf JavaLite |
| Dart | blerpc-protocol-dart | cryptography |
| Python | blerpc-protocol | cryptography |
| TypeScript | blerpc-protocol-rn | @noble/ciphers + @noble/curves + @noble/hashes |
| C | blerpc-protocol/c | None (PSA Crypto on Zephyr) |