| .claude | ||
| .github | ||
| .vscode | ||
| cmd | ||
| configs | ||
| examples | ||
| internal/cmdtest | ||
| rns | ||
| tests | ||
| .gitattributes | ||
| .gitignore | ||
| compare_rnid_two_nodes_tcp_py_vs_go.sh | ||
| go.mod | ||
| go.sum | ||
| go_channel_helper | ||
| go_link_helper | ||
| go_packet_helper | ||
| go_request_helper | ||
| go_resource_helper | ||
| LICENSE | ||
| PORTING_1.1.4_BACKLOG.md | ||
| README.md | ||
go-reticulum
Go port (parity-focused) of the original Reticulum project.
This repository is maintained as a practical parity port. The current parity target is Python Reticulum 1.1.5, and the Go implementation is aligned against that version across the core library, bundled CLI utilities, examples, and parity/integration checks currently tracked in this repository. A significant part of the work was/is done with AI assistance (Codex/LLMs) for reading the reference implementation, creating parity TODOs, writing tests, and porting examples/CLI tooling.
The port is developed by a single maintainer with assistance from ChatGPT 5.1/5.2. Even though the project is covered with unit tests, integration tests, and smoke checks, unstable areas may still exist; if you run into one, please open an issue or contact the maintainer.
Goals
- Port Reticulum to Go with maximum behavioural parity.
- Keep the project testable: unit tests and selected integration tests.
- Provide CLI utilities compatible in spirit with the original ones (
rnstatus,rnpath,rnid, etc.).
Repository layout
rns/— core library (network stack and protocols).cmd/— CLI utilities (the Go equivalents of Reticulum’s “official” tools).examples/— ports of Python examples (small demo programs).
How to run
Requires Go (recommended: current stable version).
How to use
Prefer using prebuilt binaries from Releases if you don’t want to build from source.
Quick start (local shared instance)
- Start the daemon (shared instance):
go run ./cmd/rnsd -v
- In another terminal, view status:
go run ./cmd/rnstatus -a
If you use a non-default config directory, pass it to every tool:
CFG="$HOME/.reticulum-go"
go run ./cmd/rnsd -config "$CFG" -v
go run ./cmd/rnstatus -config "$CFG" -a
CLI utilities (cmd/*)
Quick run without building:
go run ./cmd/rnsd --help
go run ./cmd/rnstatus --help
Tools overview
rnsd— Reticulum daemon / shared instance runner. Seecmd/rnsd/README.md.rnstatus— status display for interfaces and transport. Seecmd/rnstatus/README.md.rnpath— path discovery and path table management. Seecmd/rnpath/README.md.rnprobe— probe/RTT utility using receipts. Seecmd/rnprobe/README.md.rnid— identity and crypto utility (generate/announce/encrypt/sign). Seecmd/rnid/README.md.rnx— remote execution (listener/client, ACL, interactive mode). Seecmd/rnx/README.md.rncp— file transfer (send/receive/fetch, ACL). Seecmd/rncp/README.md.rnir— identity resolver stub / Reticulum initialiser (parity placeholder). Seecmd/rnir/README.md.rnodeconf— RNode firmware/config tool (hardware-dependent). Seecmd/rnodeconf/README.md.
Build a single tool:
go build -o ./bin/rnstatus ./cmd/rnstatus
./bin/rnstatus --help
Examples overview
minimal— smallest possible init + announce loop. Seeexamples/minimal/README.md.announce— destination announces + announce handler. Seeexamples/announce/README.md.broadcast— plain destination “channel” broadcast. Seeexamples/broadcast/README.md.link— basic link establishment + packet exchange. Seeexamples/link/README.md.identify— link identification (Link.Identify) demo. Seeexamples/identify/README.md.echo— receipts/proofs + RTT measurement. Seeexamples/echo/README.md.ratchets— destination ratchets demo. Seeexamples/ratchets/README.md.channel— message-based Channel over Link. Seeexamples/channel/README.md.buffer— buffered read/write over Link Channel. Seeexamples/buffer/README.md.request— request/response handlers over Link. Seeexamples/request/README.md.resource— large transfers viaResource. Seeexamples/resource/README.md.filetransfer— directory listing + file download overResource. Seeexamples/filetransfer/README.md.speedtest— link throughput measurement. Seeexamples/speedtest/README.md.interface— add a custom interface programmatically (serial). Seeexamples/interface/README.md.
Quick run:
go run ./examples/minimal --help
go run ./examples/link --help
Parity & docs
- Current parity target: Python Reticulum
1.1.5. PARITY_*.mdfiles track any remaining or newly discovered parity drift vs the Python reference (no unrelated wishlists).- Ideally, each parity item is closed by a code change plus a test/verification step.
- Note: the Python Reticulum supports “external interfaces” by loading
<Type>.pymodules frominterfacepath. The Go port does not execute/load those Python modules; if such a file exists, startup will error to avoid silently running with a placeholder interface.
Disclaimer
This is a work-in-progress port: APIs, protocols, and CLI behaviour can change as parity improves.
Support & Donate
- Monero:
41uoDd1PNKm7j4LaBHHZ77ZPbEwEJzaRHhjEqFtKLZeWjd4sNfs3mtpbw1mcQrnNLBKWSJgui9ELEUz217Ui6kF13SmF4t5
License
MIT – see LICENSE.