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:

  1. Command Layer — Wraps Protocol Buffers payloads with command metadata (name, type, data length).
  2. Encryption Layer (optional) — Encrypts the serialized command with AES-128-GCM after a 4-step key exchange.
  3. 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)

PlatformLanguageBLE StackStatus
iOSSwiftCoreBluetoothStable
AndroidKotlinAndroid BLEStable
iOS / AndroidDart (Flutter)flutter_blue_plusStable
iOS / AndroidTypeScript (React Native)react-native-ble-plxStable
macOS / LinuxPythonbleakStable
Zephyr (nRF54L15)CZephyr BLEStable

Peripheral (Server)

PlatformLanguageBLE StackStatus
Zephyr (nRF54L15)CZephyr BLEStable
Zephyr (EFR32xG22E)CZephyr BLE + SiLabs HCIStable
macOSPythonblessStable

Protocol Libraries

LanguagePackageDependencies
Swiftblerpc-protocol-swiftFoundation + CryptoKit
Kotlinblerpc-protocol-ktProtobuf JavaLite
Dartblerpc-protocol-dartcryptography
Pythonblerpc-protocolcryptography
TypeScriptblerpc-protocol-rn@noble/ciphers + @noble/curves + @noble/hashes
Cblerpc-protocol/cNone (PSA Crypto on Zephyr)