// architecture
How Reticulum finds destinations, learns paths and forwards traffic. This is the technical deep dive of What is Reticulum? for readers who want to understand what happens beneath the apps.
Reticulum does not route to hosts, subnets, ports or DNS names. It routes to destination hashes. A destination is created from an application name, optional aspects and, for Single destinations, an identity. That material is hashed into a 16-byte address, shown as 32 hex characters.
| Type | Encryption | Multi-hop | Use |
|---|---|---|---|
| Single | Asymmetric, per-packet ECDH | Yes | Private application endpoints, LXMF inboxes |
| Link | Ephemeral ECDH session | Yes | Reliable channels, requests, resources |
| Group | Symmetric, pre-shared key | No | Local group traffic with a shared key |
| Plain | None | No | Local public broadcast or discovery |
Only Single and Link destinations are transported across multiple hops. Plain and Group are deliberately local/direct.
An announce makes a destination discoverable on the network. Transport nodes that hear an announce store where it came from, increase the hop count and may re-broadcast it. This is how paths form without a central registry or fixed routing table.
| Field | Purpose |
|---|---|
| Destination hash | The 16-byte address being announced |
| Public key material | X25519 and Ed25519 public keys for the identity |
| Name hash | Compact hash of the application destination name |
| Random hash | Freshness material for announce validation |
| Ratchet key | Optional: current ratchet public key |
| Signature | Ed25519 signature that proves the announce belongs to the identity |
| Application data | Optional: metadata such as display hints or capabilities |
| Rule | Effect |
|---|---|
| Duplicate filtering | Already-seen announces are ignored |
| Hop limit | Announces stop after the configured maximum (default 128) |
| Bandwidth cap | Announces use at most 2% of the interface bandwidth |
| Random delay | Re-broadcasts are delayed to avoid synchronized floods |
| Locality priority | Announces with fewer hops are sent first when bandwidth is scarce |
Reticulum routing is next-hop routing built from announces:
| 1 | Node A sends an announce out on its interfaces. |
| 2 | A transport node hears the announce and stores: "A is reachable via this neighbor on this interface." |
| 3 | The transport node re-broadcasts the announce with an increased hop count. |
| 4 | Other transport nodes repeat this process until the announce has reached the reachable mesh. |
| 5 | When Node B sends to A, it looks up the destination hash and sends the packet to the next hop. Each transport node repeats this locally until the packet arrives. |
If no path exists, the sender can send a path request or wait until the destination announces again.
Transport nodes forward packets without plaintext access. They do see transport metadata that is needed for forwarding: interface activity, timing, packet size, hop counts and destination hashes.
Reticulum packets contain no source addresses, so a packet does not say who sent it. Traffic analysis on the metadata above is still possible.