An SDK of the Reticulum protocol in Rust.
A cryptography-based networking stack designed for building local and wide-area networks using readily available hardware, allowing for secure communication without relying on traditional networking protocols.
Reticulum operates independently of traditional IP, and can function effectively in low-bandwidth environments.
- ✅ experimental TCP RPC control port (aka share_instance)
- ✅ rnstransport path.request
- ✅ rnstransport probe (aka respond_to_probes)
- ✅ rnstransport discovery (aka discoverable)
- ❌ rnstransport remote.management (aka enable_remote_management)
- ✅ info blackhole (aka publish_blackhole) — core table + expiry + announce rejection + RPC stub
Physical communication interfaces implemented
- ❌ AutoInterface
- ✅ BackboneInterface
- ❌ I2PInterface
- ✅ TCPClientInterface
- ✅ TCPServerInterface (bind_host ::1 will allow dual-stack functionality)
- ✅ UDPInterface
- ❌ AX25KISSInterface
- ✅ Modem73Interface
- ✅ RNodeInterface (over Serial)
- ❌ RNodeMultiInterface
- ✅ KISSInterface
- ✅ LoRaInterface (Experimental, direct SPI communication to LoRA chipsets. SX126X, LR1121)
- ❌ BluetoothInterface
- ❌ PipeInterface
- ✅ SerialInterface
cargo build
cargo test
Cargo.toml
[dependencies]
reticulum-sdk = "2.3"The crate is designed to function on resource-constrained (embedded) targets, so most behavioral tuning and optional hardware backends are feature-gated. The default features enable the full host build; adjust them for your target.
Standard, full size desktop and server targets can use the default features for optimum performance.
| Feature | Default | Description |
|---|---|---|
alloc |
yes | Pulls in the alloc crate. Always safe to keep enabled on hosted targets. |
serial |
yes | Serial port interfaces (SerialInterface, KISSInterface, RNodeInterface) via tokio-serial. Disable for builds that only need network interfaces (UDP/TCP/backbone). |
lora |
yes | LoRa interface with an SPI/GPIO backend based on embedded-hal, usable on microcontrollers for SX126x / SX127x / LR1121 chipsets. |
lora-linux |
yes* | Linux backends for the LoRa interface (spidev ioctls + gpio-cdev GPIO). Implies lora. Linux-only; leave off for embedded builds. *Enabled by default only on Linux; it is inert on other platforms. |
embedded |
no | Tuned for resource-constrained targets (e.g. ESP32, ESP32-S3): shorter packet / destination / path retention and smaller cache bounds so transport state stays bounded within a few hundred KB of RAM on a busy network. Without it, the transport keeps the upstream (desktop) retention defaults. |
fernet-aes128 |
no | Use 256-bit derived keys (AES-128) for identity encryption instead of the default 512-bit derived keys. Enables interop with Reticulum versions that use AES-128. |
Embedded build with only network interfaces (no serial/LoRa):
cargo build --no-default-features --features alloc,embedded
Full desktop build (default):
cargo build
- The 2% announcement cap implemented in the official Python implementation can quickly begin
to backlog and drop announcements from being sent over low-bitrate networks such as LoRA.
(~27 announces per minute max on a reasonable 250kHz/SF8 encoding)
- This implementation of Reticulum improves this design choice by allowing 6% of the interface to be used for announcements, and scaling down the announcement cap when interface load increases. (~81/min when quiet, ~27/min when channel under load)
- The probability of infinite growth of announcement backlogs is reduced.
- Used by the Rust reticulum-router daemon
Released under the terms of the MIT license