Type-safe, high-performance, secure RPC over Bluetooth Low Energy.

Protocol Buffers

.protoファイルでBLE通信を定義。型安全で言語に依存しないシリアライゼーションを曖昧さなく実現

高性能

MTU対応のフラグメンテーションとゼロコピー最適化により、BLEの最大スループット(約30 KB/s)に迫る性能を実現

エンドツーエンド暗号化

オプションのE2E暗号化。X25519鍵交換、Ed25519署名、AES-128-GCMセッション暗号化に対応

仕組み

bleRPCはBLE GATTの上に階層化されたプロトコルスタックを提供します:

  1. コマンド層 — Protocol Buffersペイロードをコマンドメタデータ(名前、タイプ、データ長)で包みます
  2. 暗号化層(オプション) — 4ステップの鍵交換後、シリアライズされたコマンドをAES-128-GCMで暗号化します
  3. コンテナ層 — ペイロードをMTUサイズのコンテナに分割してBLE伝送し、受信側で再組み立てします

すべての通信は単一のGATT Characteristicを使用します。CentralはWrite Without Responseでリクエストを書き込み、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
      

対応プラットフォーム

Central(クライアント)

プラットフォーム言語BLEスタックステータス
iOSSwiftCoreBluetooth安定版
AndroidKotlinAndroid BLE安定版
iOS / AndroidDart (Flutter)flutter_blue_plus安定版
iOS / AndroidTypeScript (React Native)react-native-ble-plx安定版
macOS / LinuxPythonbleak安定版
Zephyr (nRF54L15)CZephyr BLE安定版

Peripheral(サーバー)

プラットフォーム言語BLEスタックステータス
Zephyr (nRF54L15)CZephyr BLE安定版
Zephyr (EFR32xG22E)CZephyr BLE + SiLabs HCI安定版
macOSPythonbless安定版

プロトコルライブラリ

言語パッケージ依存関係
Swiftblerpc-protocol-swiftFoundation + CryptoKit
Kotlinblerpc-protocol-ktProtobuf JavaLite
Dartblerpc-protocol-dartcryptography
Pythonblerpc-protocolcryptography
TypeScriptblerpc-protocol-rn@noble/ciphers + @noble/curves + @noble/hashes
Cblerpc-protocol/cなし(ZephyrではPSA Crypto)