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.

DirectoryDescription
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:

RepositoryCI Checks
blerpcPython tests + ruff lint, C lint (clang-format), Go lint + build, iOS build, Android build, Flutter build
blerpc-protocolPython tests + lint, C lint + tests
blerpc-protocol-swiftswift build, swift test, SwiftLint
blerpc-protocol-ktGradle test, ktlint
blerpc-protocol-dartdart 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.