# Reticulum Synthesis A simple program to generate and run random topologies of [Reticulum](https://reticulum.network) networks on local UDP. The purpose is to test routing and applications easily. ![Graph of 50 nodes, with some highly connected clusters and more isolated parts.](graph.svg) You can contact `tuxmain` on the Reticulum Matrix channel for any request. Development status: Early development, just for fun, to tinker with Reticulum and learn about mesh networks. ## Build [Install Rust.](https://rustup.rs) ```bash cargo build --release ./target/release/reticulum-synthesis --help ``` Python and `rnsd` must already be installed (and in `PATH`), see Reticulum's manual. ## Use Generate and run 10 local Reticulum nodes: ```bash reticulum-synthesis -d /tmp/test -n 10 --gen --run ``` Option `--gen` (or `-g`) generates the network graph and creates the directories and config files as subdirectories in the directory passed to `-d`. Subdirectories are named from `n0` to `n9` in the example. Option `--run` (or `-r`) runs the generated nodes using `rnsd`. (tries to run for any subdirectory in the directory passed to `-d`) Tune the graph density with the `-p ` option that accepts an edge probability number between 0 and 1. When generating a graph, option `-R ` renders the graph to an SVG image. (may take some time to compute, depending on the number of nodes) The network can then be tested using RNS tools: (from reticulum repository) ``` $ python Examples/Announce.py --config /tmp/test/n5 [2025-10-11 11:04:43] [Notice] Announce example running, hit enter to manually send an announce (Ctrl-C to quit) [2025-10-11 11:04:45] [Notice] Sent announce from <0e1fb61e3b38e332868b331740642f41> (example_utilities.announcesample.fruits.dd5be4f7c7547eaa41f654f75005ea36) [2025-10-11 11:04:45] [Notice] Sent announce from (example_utilities.announcesample.noble_gases.dd5be4f7c7547eaa41f654f75005ea36) # In another terminal: $ python RNS/Utilities/rnpath.py --config /tmp/test/n10 0e1fb61e3b38e332868b331740642f41 Path found, destination <0e1fb61e3b38e332868b331740642f41> is 4 hops away via <11d3d5adc157e01df45660569a40b458> on UDPInterface[e10_33/127.0.0.1:42182] ``` For now, UDP ports are allocated to links in order from `42000` to `65535`. The graph can also be read from a text file listing edges, using option `-G `. An edge is a space-separated list of two node indices. Separation can be any whitespace character. Example: ``` 0 1 1 2 2 0 1 3 3 4 ``` ## License [Support me via LiberaPay](https://liberapay.com/tuxmain/donate) GNU AGPL v3, CopyLeft 2025 Pascal Engélibert [(why copyleft?)](https://txmn.tk/blog/why-copyleft/) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.