
RTReticulum
A fast, power efficient, native Reticulum stack for embedded microcontrollers.
| Feature | RNode | microReticulum | uReticulum |
|---|---|---|---|
| Autonomous node | No (host-driven modem) | Yes | Yes |
| NomadNet pages | No | No | Yes |
| WiFi + TCP bridge | No | No | Yes |
| BLE bridge | Bluedroid | No | NimBLE |
| OTA updates | No | No | Yes |
| Sleep | No (Arduino loop) | No | 99% idle |
| Hardware crypto | No | No | mbedTLS accelerated |
| Radio driver | Arduino-LoRa | Arduino-LoRa | RadioLib (SX1262 native) |
What works
- Full Reticulum protocol: Identity, Destination, Packet, Link, Transport with announce propagation and path discovery
- LoRa mesh: SX1262 via RadioLib: peer-to-peer encrypted Links over 915 MHz with automatic announce rebroadcast
- WiFi + TCP bridge: connect to an upstream
rnsdinstance to bridge LoRa traffic to the wider Reticulum network over the Internet - NomadNet node: serves a live metrics page (uptime, battery, heap, RSSI, interfaces, known peers) that NomadNet users can browse
- RNode bridge: USB serial or Bluetooth LE KISS interface: the board acts as an RNode that Python Reticulum can drive directly
- All crypto in hardware: Ed25519, X25519, AES-256-CBC, HMAC-SHA256, HKDF, SHA-256/512 via mbedTLS + Monocypher
- 99% CPU idle in steady state, watchdog-clean boot
Supported hardware
| Board | MCU | Radio | Status |
|---|---|---|---|
| Heltec WiFi LoRa 32 V3 | ESP32-S3 | SX1262 | Primary target, fully working |
| Heltec WiFi LoRa 32 V4 | ESP32-S3 | SX1262 + PA/LNA | Port in progress |
| RAK3172 (STM32WLE5CC) | Cortex-M4F + SX1262 SoC | : | Port in progress |
Build
uReticulum uses Nix for reproducible builds. All toolchains (ESP-IDF, ARM GCC, host compilers, mbedTLS, Monocypher) come from flake.nix.
cd uReticulum
nix develop
Firmware (Heltec V3)
cd firmware/heltec_v3
# Configure (optional: defaults work out of the box)
idf.py menuconfig
# Build
idf.py build
# Flash
idf.py -p /dev/ttyUSB0 flash
Firmware modes
The Heltec V3 firmware supports three operating modes, selectable via idf.py menuconfig under uReticulum Heltec V3:
Transport node (default)
The board runs a full Reticulum stack with its own persistent Identity. It announces on LoRa and (if configured) bridges to the Internet via WiFi + TCP. It hosts a NomadNet-compatible page with live system metrics.
RNode bridge (USB UART)
The board exposes the SX1262 as an RNode over USB serial using the KISS protocol. Python Reticulum (rnsd, NomadNet, Sideband) can drive it directly with interface_type = RNodeInterface. The uReticulum stack is not started: the board is a dumb radio modem.
RNode bridge (Bluetooth LE)
Same as the USB variant, but the KISS interface runs over a Nordic UART Service BLE GATT profile. Connect from Python RNS with port = ble://RNode XXXX. Adds NimBLE (~300 KB) to the firmware.
Configuration
WiFi and TCP bridge settings are under idf.py menuconfig → uReticulum WiFi:
| Setting | Description | Default |
|---|---|---|
WIFI_DEFAULT_SSID |
WiFi network name | empty (WiFi disabled) |
WIFI_DEFAULT_PSK |
WiFi password | empty |
TCP_INTERFACE_HOST |
Upstream rnsd IP/hostname | empty (TCP disabled) |
TCP_INTERFACE_PORT |
rnsd TCP port | 4965 |
| All settings can also be overridden at runtime via NVS (the firmware | ||
| checks NVS first, then falls back to menuconfig defaults). |
Identity persistence
The node's 64-byte Ed25519+X25519 private key is stored in NVS on first boot and reused across reboots. The destination hash is stable: peers don't need to re-discover the node after a power cycle.
Source: Github