Reliable LoRa Mesh
for Embedded Systems
A lightweight networking layer and reactive dataflow runtime for LoRa radios. Resilient multi-hop communication on constrained embedded hardware. Runs on ESP32 + SX1262/SX1276. Zero heap allocation after boot.
A networking layer, not just radio firmware
Rivr is a LoRa mesh networking layer for embedded devices. Instead of building a single application on top of LoRa, Rivr provides a robust communication substrate that other systems can build upon.
On top of that substrate, Rivr ships a reactive dataflow DSL — describe packet processing pipelines in a few lines of code, compiled on-device at boot, evaluated on every incoming frame. No OS, no garbage collector, no heap.
A full networking stack, not just a radio wrapper
Rivr ships a complete, production-ready mesh platform: reactive pipelines, EU868 duty-cycle compliance, signed OTA updates, and rich diagnostics — all running bare-metal on ESP32.
Reactive Dataflow DSL
Describe packet-processing pipelines in a few lines of code. Compiled on-device at boot, evaluated on every frame with bounded worst-case latency.
Zero Heap After Boot
All engine state lives in BSS. Memory footprint is fully determined at compile time — no OS, no garbage collector, no heap.
EU868 Duty-Cycle Limiter
1-hour sliding window, 512-slot ring buffer with LRU eviction. Per-service airtime budgets and flood-deduplication built in.
Multi-Mode Mesh Routing
Flood routing (TTL / hop / dedupe) + unicast with reverse-path cache + 16-slot pending queue. Three-tier next-hop selection with EWMA RSSI/SNR scoring.
Rivr Fabric
Congestion-aware relay suppression for repeater nodes. 60-second sliding-window score prevents routing storms on busy meshes.
Signed OTA Updates
PKT_PROG_PUSH delivers a new RIVR program over the mesh. Ed25519-signed, anti-replay protected, hot-reloaded from NVS without a full reflash.
Browser Flash Tool
Flash firmware directly from your browser using WebSerial. No drivers, no CLI tools required. Supports all 6 hardware variants.
OLED Display + Diagnostics
SSD1306 128×64 with 7 auto-rotating pages: overview, RF stats, routing table, duty-cycle, VM state, neighbours, and Fabric. Export @SUPPORTPACK for bug reports.
Application Services
Built-in CHAT, TELEMETRY, MAILBOX, and ALERT services with structured @CHT / @TEL / @MAIL / @ALERT JSON log records and an 8-entry LRU mailbox store.
BLE Transport Bridge
Optional NimBLE edge interface using Nordic NUS UUIDs. Same binary Rivr frames over Bluetooth LE as over LoRa. Three activation modes (boot window, button, app-requested).
Policy Engine
@PARAMS runtime updates for beacon interval, TX power, relay throttle, and node role — no reflash needed. Optionally HMAC-SHA-256 signed for authenticated policy pushes.
Four real code layers
Rivr is written in C and Rust. The C firmware handles radio and routing; the Rust core compiles and evaluates DSL pipelines at runtime — completely allocation-free after boot. Host tools run on Linux, macOS, and Windows.
Host Tooling (Rust)
— rivr_host: host-side tools for compiling, replaying, and signing RIVR programs.DSL Runtime (Rust no_std)
— rivr_core: no_std Rust library — parses, compiles, and evaluates .rivr pipelines.Firmware Core (C)
— firmware_core + rivr_layer: C firmware — radio, routing, duty-cycle limiter, policy engine, OTA.Hardware
— Physical hardware: ESP32 processor, SX126x/SX127x radio, optional OLED and BLE interface.Built by the open-source community
Rivr is open source and community-driven. Contributions, bug reports, and field-testing results are highly appreciated. Check out the companion app for Android, Linux, and Windows too.
GitHub
View the source code, report issues, and contribute pull requests.
Discord
Chat with developers, get help with hardware, and discuss builds.
Companion App
Flutter app for Android, Linux, and Windows. Live chat, neighbour RSSI/SNR table, mesh topology, and @MET metric dashboard.
Ready to get started?
Flash Rivr to your ESP32 board in minutes and join the mesh.