No description
Find a file
2026-08-22 14:51:06 +02:00
.github/workflows ci: reticulum-core use no_std feature in ci pipeline 2026-08-05 20:30:27 +02:00
examples fix: TransportConfig remove broadcast flag to prevent forwarding loops 2026-08-21 14:27:08 +02:00
reticulum-core Merge pull request #109 from BeechatNetworkSystemsLtd/no-std-core 2026-08-05 20:15:49 +02:00
reticulum-daemon fix: TransportConfig remove broadcast flag to prevent forwarding loops 2026-08-21 14:27:08 +02:00
src fix: prevent LinkRequest forwarding loop on radios 2026-08-21 13:25:20 +00:00
tests fix: TransportConfig remove broadcast flag to prevent forwarding loops 2026-08-21 14:27:08 +02:00
.gitignore chore: add rust-analyzer.log to gitignore 2026-06-03 23:47:54 +02:00
Cargo.lock chore: update Cargo.lock 2026-07-29 12:21:26 +02:00
Cargo.toml refactor: remove alloc feature 2026-08-03 16:40:43 +02:00
CONTRIBUTING.md docs: add guidelines for contributors 2026-01-26 09:09:51 +01:00
LICENSE Initial commit 2024-07-18 11:11:22 +01:00
README.md refactor: rename daemon package, binary 2026-06-08 03:06:05 +02:00

Reticulum-rs

Reticulum-rs is a Rust implementation of the Reticulum Network Stack — a cryptographic, decentralised, and resilient mesh networking protocol designed for communication over any physical layer.

This project brings Reticulum's capabilities to the Rust ecosystem, enabling embedded, and constrained deployments with maximum performance and minimal dependencies.

Features

  • 📡 Cryptographic mesh networking
  • 🔐 Trustless routing via identity-based keys
  • 📁 Lightweight and modular design
  • 🧱 Support for multiple transport layers (TCP, serial, Kaonic)
  • 🔌 Easily embeddable in embedded devices and tactical radios
  • 🧪 Example clients for testnets and real deployments

Structure

Reticulum-rs/
├── src/                 # Core Reticulum protocol implementation
│   ├── buffer.rs
│   ├── crypt.rs
│   ├── destination.rs
│   ├── error.rs
│   ├── hash.rs
│   ├── identity.rs
│   ├── iface.rs
│   ├── lib.rs
│   ├── transport.rs
│   └── packet.rs
├── proto/               # Protocol definitions (e.g. for Kaonic)
│   └── kaonic/
│       └── kaonic.proto
├── examples/            # Example clients and servers
│   ├── kaonic_client.rs
│   ├── link_client.rs
│   ├── tcp_client.rs
│   ├── tcp_server.rs
│   └── testnet_client.rs
├── reticulum-daemon/           # RNS Daemon
│   ├── Cargo.toml
│   └── src/
│       ├── config.rs
│       └── main.rs
├── Cargo.toml           # Crate configuration
├── LICENSE              # License (MIT/Apache)
└── build.rs             

Getting Started

Prerequisites

  • Rust (edition 2021+)
  • protoc for compiling .proto files (if using gRPC/Kaonic modules)

Build

cargo build --release

Reticulum daemon

Converting config from Python Reticulum

Reticulum-rs uses TOML for configuration, whereas the original Python Reticulum uses a custom format parsed by configobj, a Python-only library. If you have an existing Python Reticulum configuration, it will be read and converted to TOML in-memory. If you want to apply the conversion and save a TOML copy, run the convert-config subcommand:

cargo run -p reticulum-daemon -- convert-config <config_file>

This leaves the original file and creates a copy with .toml extension. The converter handles boolean normalization (True/False/Yes/No → true/false), quotes string values, transforms interface declarations to TOML array-of-tables syntax, and comments out None/nil values which TOML does not support.

Running the daemon

# Use default config search paths (~/.config/reticulum, ~/.reticulum, /etc/reticulum)
cargo run -p reticulum-daemon

# Specify a custom config directory
cargo run -p reticulum-daemon -- --config /path/to/config/dir
cargo run -p reticulum-daemon -- -c /path/to/config/dir

The daemon searches for either config (legacy filename) or config.toml in the specified directory.

Run Examples

# TCP client example
cargo run --example tcp_client

# Kaonic mesh test client
cargo run --example kaonic_client

Python integration tests

Integration tests against the Python implementation can be run with the python-tests feature and setting the RETICULUM_TEST_PYTHON_DIR environment variable to the location of the checked out Python Reticulum source tree. Example:

RETICULUM_TEST_PYTHON_DIR=../Reticulum cargo test python --features="python-tests"

Use Cases

  • 🛰 Tactical radio mesh with Kaonic
  • 🕵️‍♂️ Covert communication using serial or sub-GHz transceivers
  • 🚁 UAV-to-ground resilient C2 and telemetry
  • 🧱 Decentralized infrastructure-free messaging

License

This project is licensed under the MIT license.


© Beechat Network Systems Ltd. All rights reserved. https://beechat.network/