Reticulum-Go
A high-performance Go implementation of the Reticulum Network Stack
Project Goals:
- Full Protocol Compatibility: Maintain complete interoperability with the Python reference implementation
- Cross-Platform Support: Support for legacy and modern platforms across multiple architectures
- Performance: Leverage Go's concurrency model and runtime for improved throughput and latency
- More Privacy and Security: Additional privacy and security features beyond the base specification
Prerequisites
- Go 1.24 or later
- Task for build automation
Note: You may need to set alias task='go-task' in your shell configuration to use task instead of go-task.
Nix
If you have Nix installed, you can use the development shell which automatically provides all dependencies including Task:
nix develop
This will enter a development environment with Go and Task pre-configured.
Quick Start
Building the Binary
task build
The compiled binary will be located in bin/reticulum-go.
Running the Application
task run
Running Tests
task test
Development
Code Quality
Format code:
task fmt
Run static analysis checks (formatting, vet, linting):
task check
Testing
Run all tests:
task test
Run short tests only:
task test-short
Generate coverage report:
task coverage
Benchmarking
Run benchmarks with standard GC:
task bench
Run benchmarks with experimental Green Tea GC:
task bench-experimental
Compare both GC implementations:
task bench-compare
Tasks
The project uses Task for all development and build operations.
| Task | Description |
|---------------------|------------------------------------------------------|
| default | Show available tasks |
| all | Clean, download dependencies, build and test |
| build | Build release binary (stripped, static) |
| debug | Build debug binary |
| build-experimental | Build with experimental Green Tea GC (Go 1.25+) |
| experimental | Alias for build-experimental |
| release | Build stripped static binary for release |
| fmt | Format Go code |
| fmt-check | Check if code is formatted (CI-friendly) |
| vet | Run go vet |
| lint | Run revive linter |
| scan | Run gosec security scanner |
| check | Run fmt-check, vet, and lint |
| bench | Run benchmarks with standard GC |
| bench-experimental | Run benchmarks with experimental GC |
| bench-compare | Run benchmarks with both GC settings |
| clean | Remove build artifacts |
| test | Run all tests |
| test-short | Run short tests only |
| test-race | Run tests with race detector |
| coverage | Generate test coverage report |
| checksum | Generate SHA256 checksum for binary |
| deps | Download and verify dependencies |
| mod-tidy | Tidy go.mod file |
| mod-verify | Verify dependencies |
| build-linux | Build for Linux (amd64, arm64, arm, riscv64) |
| build-all | Build for all Linux architectures |
| build-wasm | Build WebAssembly binary with standard Go compiler |
| test-wasm | Run WebAssembly tests using Node.js |
| run | Run with go run |
| tinygo-build | Build binary with TinyGo compiler |
| tinygo-wasm | Build WebAssembly binary with TinyGo |
| install | Install dependencies |
example: task build
Cross-Platform Builds
Linux Builds
Build for all Linux architectures:
task build-all
Build for specific Linux architecture:
task build-linux
Embedded Systems and WebAssembly
For building for embedded systems, see the tinygo branch. Requires TinyGo 0.37.0+.
Build WebAssembly binary with standard Go compiler:
task build-wasm
Run WebAssembly unit tests (requires Node.js):
task test-wasm
Build with TinyGo:
task tinygo-build
Build WebAssembly binary with TinyGo:
task tinygo-wasm
Experimental Features
Green Tea Garbage Collector
Build with experimental Green Tea GC (requires Go 1.25+):
task build-experimental
This enables the experimental garbage collector for performance evaluation and testing.
License
This project is licensed under the 0BSD license.