Skip to content
 
 

Repository files navigation

rete

A no_std, runtime-agnostic implementation of the Reticulum Network Stack (RNS) in Rust.

⚠️ Pre-release. Wire format and interop testing are stable against the Python reference. API surface may change before 1.0.

What is Reticulum?

Reticulum is a cryptography-based networking stack for building resilient, decentralised mesh networks over LoRa, packet radio, WiFi, serial, and more. It provides end-to-end encryption, initiator anonymity, and self-configuring multi-hop routing with no central authority or infrastructure required.

The Python reference implementation is the authoritative protocol specification. rete provides a compatible implementation that runs natively on embedded targets.

Why rete?

The Python reference runs well on Linux/Raspberry Pi but cannot run on bare-metal microcontrollers. rete targets:

  • ESP32-S3 and Raspberry Pi Pico 2W via Embassy
  • Linux/macOS for development and gateway nodes — same codebase
  • Any async runtime — Embassy, Tokio, or your own (see below)
  • Full wire-format interoperability with the Python RNS reference

rete (noun) — Latin for net or mesh. The word Reticulum shares the same root.

Runtime agnosticism

The core crates have zero async dependencies:

rete-core        → no_std, no alloc, no async — pure packet + crypto
rete-transport   → no_std + alloc, no async  — routing state machine
rete-stack       → async traits only, no executor
rete-embassy     → Embassy executor integration
rete-tokio       → Tokio integration (hosted/server nodes)

You choose the runtime. The protocol logic is the same either way.

Crate structure

rete/
├── crates/
│   ├── rete-core/          no_std, no alloc — packet parsing & crypto
│   ├── rete-transport/     no_std + alloc   — routing, path tables, announces
│   ├── rete-stack/         async traits     — runtime-agnostic interface
│   ├── rete-embassy/       Embassy integration
│   ├── rete-tokio/         Tokio integration
│   ├── rete-daemon/        Hosted daemon building blocks (config, identity, monitoring)
│   ├── rete-lxmf-core/    LXMF message codec (no_std + alloc)
│   ├── rete-lxmf/         LXMF router, delivery, propagation (hosted)
│   ├── rete-iface-auto/   AutoInterface — IPv6 multicast peer discovery
│   ├── rete-iface-kiss/   KISS TNC serial interface
│   ├── rete-iface-serial/ Raw serial interface
│   └── rete-iface-tcp/    TCP interface
└── examples/
    ├── linux/              Hosted — embassy-std or tokio executor
    ├── esp32s3/            ESP32-S3 bare metal
    ├── esp32c6/            ESP32-C6 bare metal
    └── rp2040/             Raspberry Pi Pico 2W bare metal

Protocol compatibility

The Python code in the Reticulum repository is the Reference Implementation. Compatibility with the Reticulum Protocol is defined as having full interoperability and sufficient functional parity with this reference.

Wire format test vectors are generated directly from the Python reference using generate_test_vectors.py and committed at tests/interop/vectors.json. All packet parsing, crypto operations, and hash computations are validated against these vectors before any code ships.

Key protocol facts

Property Value
MTU 500 bytes
Truncated hash length 16 bytes
Name hash length 10 bytes
Identity key X25519 + Ed25519 (64 bytes each, combined)
Encryption ECDH → HKDF → AES-256-CBC + HMAC-SHA256
Signing Ed25519

Implementation status

Crate Status Notes
rete-core ✅ Complete Wire format, crypto, identity
rete-transport ✅ Complete Path tables, announce handling, resources, links, channels
rete-stack ✅ Complete Async trait definitions, NodeCore
rete-embassy ✅ Complete Embassy task layer
rete-tokio ✅ Complete Tokio task layer
rete-iface-kiss ✅ Complete KISS TNC framing
rete-iface-serial ✅ Complete Raw serial + HDLC framing
rete-iface-tcp ✅ Complete TCP transport
rete-iface-auto ✅ Complete IPv6 multicast peer discovery
rete-lxmf-core ✅ Complete LXMF message codec (no_std + alloc)
rete-lxmf ✅ Complete LXMF router, delivery, propagation (hosted)
rete-daemon ✅ Complete Hosted daemon config, identity, monitoring
Links / Channels ✅ Complete Connection-oriented sessions, reliable streams

Portability

Crate x86_64 wasm32 thumbv6m (MCU)
rete-core
rete-transport
rete-stack
rete-embassy
rete-tokio
rete-daemon
rete-lxmf-core
rete-lxmf ✅*
rete-iface-* varies

*rete-lxmf compiles for wasm32 with --no-default-features only.

Getting started

# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Embedded targets
rustup target add thumbv6m-none-eabi        # RP2040
# ESP32-S3 via esp-rs toolchain: https://esp-rs.github.io/book/

# Python reference (for test vector generation + interop testing)
pip install rns

# Build and test (hosted crates)
cargo build
cargo test

# Regenerate test vectors (run after any Python RNS update)
python3 generate_test_vectors.py --out tests/interop/vectors.json

Relationship to other projects

Contributing

  1. Run cargo test — all tests must pass
  2. Regenerate vectors if any protocol behavior changes: python3 generate_test_vectors.py --out tests/interop/vectors.json
  3. Open an issue before PRs that affect wire format or crypto

License

MIT OR Apache-2.0 at your option.

The Reticulum Protocol was dedicated to the Public Domain in 2016 by Mark Qvist.

About

Rust based Reticulum implementation that is Embassy/MCU friendly.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages