bitle

Bitle is a self-powered ESP32-C3 BitChat relay node. It extends BitChat's Bluetooth mesh by hosting a dedicated BLE gateway that handles Noise XX handshakes, validates BitChat packets, and re-broadcasts encrypted payloads without user interaction. The current hardware uses an ESP32-C3 with a flexible 2.4 GHz antenna, weatherproof enclosure, solar input, and battery pack. Bitle is well suited to extend the mesh network range in places like remote trails, campsites, or any offline comms grid.

The firmware implements the full Noise XX handshake pattern, binding Ed25519 identities the same way the BitChat mobile apps do. Once flashed to an ESP32-C3, a Bitle node powers on, starts advertising, and begins relaying traffic autonomously — no phone, no configuration, no internet required.

Designed for field deployment in environments where infrastructure is absent. Solar charging keeps nodes alive on remote trails and campsites indefinitely. The weatherproof enclosure protects hardware in the conditions where off-grid comms matter most.

Firmware source code is open and MIT-licensed. Clone the repo, flash a board, and drop it in the field. → github.com/bitleproject/bitle

Features

Full BitChat handshake Implements the Noise XX pattern with the upstream noise_ref library, performing Ed25519 identity binding like the mobile apps.
BLE mesh relay Runs a NimBLE GATT service that BitChat clients subscribe to; packets are encoded/decoded with the BitChat binary format and forwarded transparently.
Time sync & nicknames Maintains a BLE-derived epoch for packet timestamps and advertises deterministic anon#### nicknames configurable through NVS.
Solar/battery ready Firmware is fully autonomous; once flashed it will advertise, accept connections, and keep the mesh alive indefinitely without user interaction.

Repository layout

├── CMakeLists.txt # ESP-IDF project entry ├── sdkconfig.defaults # Recommended configuration seed ├── components/ │ ├── bitchat_utils/ # Time sync helper used by the firmware │ └── noise_ref/ # Bundled Noise-C reference library └── main/ ├── main.c ├── bitchat_ble.{c,h} ├── noise_handshake.{c,h} ├── packet_codec.{c,h} └── nickname_manager.{c,h}
→ view firmware on github

Building & flashing

Developed and tested with ESP-IDF v6.0; other recent 5.x/6.x releases should also work. Adjust the serial port flag for your setup — sdkconfig is generated from sdkconfig.defaults during the first build.

idf.py set-target esp32c3
idf.py build
idf.py -p /dev/cu.usbmodem101 flash monitor

For field deployment, drop the firmware onto an ESP32-C3 in your Bitle enclosure, connect power, and the node will immediately begin extending nearby BitChat meshes.