Repositories
bleRPC is organized into a main monorepo and several protocol library packages for each supported language.
Main Repository
tdaira/blerpc
The main monorepo containing firmware, central clients, code generators, and tests.
| Directory | Description |
|---|---|
peripheral_fw/ | Zephyr peripheral firmware (C) — nRF54L15 & EFR32xG22E |
peripheral_py/ | Python peripheral (bless) for role-reversal testing |
central_py/ | Python central client (bleak) + integration tests |
central_fw/ | Zephyr central firmware (C) for device-to-device communication |
central_android/ | Android central app (Kotlin) with test runner |
central_ios/ | iOS central app (Swift) with test runner |
central_flutter/ | Flutter central app (Dart) with test runner |
central_rn/ | React Native central app (TypeScript) with test runner |
proto/ | Protocol Buffers definitions (blerpc.proto) |
tools/generate-handlers/ | Code generator (Go) — generates handlers and clients for all languages |
boards/ | Custom board definitions (EFR32xG22E) |
docs/ | Additional documentation (firmware guide) |
Protocol Libraries
Platform-independent protocol encoding/decoding libraries, published as separate packages for each language.
blerpc-protocol
Python C
Container splitting/reassembly, command encoding/decoding, and E2E encryption (key exchange + AES-128-GCM). The Python package is installable via pip. The C implementation (c/src/ + c/include/) is for embedded use.
pip install git+https://github.com/tdaira/blerpc-protocol.git
blerpc-protocol-swift
Swift
Swift Package for iOS and macOS. Uses Foundation and CryptoKit (Apple platform frameworks). Supports iOS 16+ and macOS 13+.
// Swift Package Manager
.package(url: "https://github.com/tdaira/blerpc-protocol-swift", from: "0.5.0")
blerpc-protocol-kt
Kotlin
Kotlin library for Android. Published to GitHub Packages (Maven).
implementation("com.blerpc:blerpc-protocol-kt:0.5.0")
blerpc-protocol-dart
Dart
Pure Dart library for Flutter. Published to pub.dev. Uses the cryptography package for encryption.
blerpc_protocol: ^0.6.0
blerpc-protocol-rn
TypeScript
TypeScript library for React Native. Uses @noble/ciphers, @noble/curves, and @noble/hashes for encryption (pure JS, no native dependencies).
"@blerpc/protocol-rn": "file:../blerpc-protocol-rn"
Architecture Overview
How the repositories relate to each other:
bleRPC (monorepo)
+-----------------------------------------+
| |
| proto/blerpc.proto |
| | |
| v |
| tools/generate-handlers (Go) |
| | |
| +---> peripheral_fw/src/ |
| | generated_handlers.{c,h} |
| | |
| +---> central_py/blerpc/generated/ |
| | generated_client.py |
| | |
| +---> central_android/.../ |
| | GeneratedClient.kt |
| | |
| +---> central_ios/.../ |
| | GeneratedClient.swift |
| | |
| +---> central_flutter/.../ |
| | generated_client.dart |
| | |
| +---> central_rn/.../ |
| | GeneratedClient.ts |
| | |
| +---> central_fw/src/ |
| generated_client.{c,h} |
| |
+-----------------------------------------+
| | | | |
v v v v v
blerpc-protocol blerpc- blerpc- blerpc- blerpc-
(Python + C) protocol-kt proto- proto- proto-
swift dart rn
CI / CD
Each repository has GitHub Actions CI that runs on every push and pull request:
| Repository | CI Checks |
|---|---|
| blerpc | Python tests + ruff lint, C lint (clang-format), Go lint + build, iOS build, Android build, Flutter build |
| blerpc-protocol | Python tests + lint, C lint + tests |
| blerpc-protocol-swift | swift build, swift test, SwiftLint |
| blerpc-protocol-kt | Gradle test, ktlint |
| blerpc-protocol-dart | dart analyze, dart test, auto-publish to pub.dev |
License
All bleRPC repositories are licensed under the GNU Lesser General Public License v3.0 (LGPL-3.0) with a static linking exception. You may statically link against bleRPC libraries without being required to provide relinkable object files. See the LICENSING_EXCEPTION file in each repository for details.