11 KiB
Examples
Sample programs under examples/ show how to use Reticulum-Go as a library.
They are starting points rather than production services.
Pair this page with the API reference.
Which Example to Open
| Goal | Start Here |
|---|---|
| Smallest stack bring-up | examples/minimal |
| Announce callbacks | examples/announce |
| Encrypted link packets | examples/link |
| Minimal resource send | examples/resources |
| File list and download | examples/filetransfer |
| Prove-all echo | examples/echo |
| Page request client | examples/page-downloader |
| Pages and files over Reticulum | reticulum-go pageserver or examples/pageserver |
| Browser WebSocket client | examples/wasm |
| Python talking to the daemon | examples/control-client |
| C / FFI smoke test | bindings/c/examples/smoke |
| C librns page fetch | bindings/c/examples/page-fetch |
| C librns pageserver | bindings/c/examples/pageserver |
| Odin librns smoke | bindings/odin/examples/smoke |
| Odin librns page fetch | bindings/odin/examples/page-fetch |
| Odin librns pageserver | bindings/odin/examples/pageserver |
| Zig librns smoke | bindings/zig/examples/smoke |
| Zig librns page fetch | bindings/zig/examples/page-fetch |
| Zig librns pageserver | bindings/zig/examples/pageserver |
| C++ librns smoke | bindings/cpp/examples/smoke |
| C++ librns page fetch | bindings/cpp/examples/page-fetch |
| C++ librns pageserver | bindings/cpp/examples/pageserver |
| Rust librns smoke | bindings/rust/examples/smoke |
| Rust librns page fetch | bindings/rust/examples/page-fetch |
| Rust librns pageserver | bindings/rust/examples/pageserver |
| Python librns smoke | bindings/python/examples/smoke |
| Python librns page fetch | bindings/python/examples/page-fetch |
| Python librns pageserver | bindings/python/examples/pageserver |
| Lua librns smoke | bindings/lua/examples/smoke |
| Lua librns page fetch | bindings/lua/examples/page-fetch |
| Lua librns pageserver | bindings/lua/examples/pageserver |
| Swift librns smoke | bindings/swift/examples/smoke |
| Swift librns page fetch | bindings/swift/examples/page-fetch |
| Swift librns pageserver | bindings/swift/examples/pageserver |
| Java librns smoke | bindings/java/examples/smoke |
| Java librns page fetch | bindings/java/examples/page-fetch |
| Java librns pageserver | bindings/java/examples/pageserver |
| Kotlin librns smoke | bindings/kotlin/examples/smoke |
| Kotlin librns page fetch | bindings/kotlin/examples/page-fetch |
| Kotlin librns pageserver | bindings/kotlin/examples/pageserver |
| Dart librns FFI smoke | bindings/dart/examples/smoke |
| Odin librns bindings | bindings/odin |
| Zig librns bindings | bindings/zig |
| C++ librns bindings | bindings/cpp |
| Rust librns bindings | bindings/rust |
| Python librns bindings | bindings/python |
| Lua librns bindings | bindings/lua |
| Swift librns bindings | bindings/swift |
| Java librns bindings | bindings/java |
| Kotlin librns bindings | bindings/kotlin |
| Dart librns FFI and Control API | bindings/dart |
| Operator CLIs | reticulum-go status | id | probe | path | cp then CLI Utilities |
minimal
Path: examples/minimal/
Starts transport, creates an identity and destination, and lets you announce.
cd examples/minimal
go run .
announce
Path: examples/announce/
Registers announce handlers and prints arriving announces with app_data.
link
Path: examples/link/
Client/server encrypted link. Server prints its destination hash. Client connects with -destination and exchanges text packets.
# terminal 1
go run . -server -listen-port 4242
# terminal 2
go run . -destination <hash> -listen-port 4243 -target-port 4242
resources
Path: examples/resources/
Minimal link resource transfer. Server accepts one resource and prints it. Client sends -payload over SendResource.
# terminal 1
go run . -server -listen-port 4242
# terminal 2
go run . -destination <hash> -listen-port 4243 -target-port 4242 -payload "hello"
Payloads larger than about 1 MiB use split resource advertisements automatically.
filetransfer
Path: examples/filetransfer/
Serves a directory over a link and lets a client list and download files as resources.
go run . -server -serve ./test_serve -listen-port 4242
echo
Path: examples/echo/
Destination with prove-all. Client sends a packet and waits for a proof.
page-downloader
Path: examples/page-downloader/
Requests /page/ style content from a pageserver-compatible peer.
pageserver
Preferred: reticulum-go pageserver (built into the main binary). Sample pages and files live under examples/pageserver/.
Serves:
/page/for HTML pages/file/for static files
Live interoperability is tested via tests/interop/pageserver_live_test.go when RUN_LIVE_INTEROP=1 is set.
wasm
Path: examples/wasm/
Browser chat demo using pkg/wasm.
task build-wasm
See Embedding and WebAssembly.
Control API Client
Path: examples/control-client/
Python client.py for the localhost Control API.
enable_control_api = yes
rpc_key = <64 hex characters>
See Control API.
librns smoke
Path: bindings/c/examples/smoke/
Minimal C program against librns.so and include/rns.h.
task build-librns
make -C bindings/c/examples/smoke
./bindings/c/examples/smoke/librns-smoke
See librns.
librns page fetch (C)
Path: bindings/c/examples/page-fetch/
NomadNet / pageserver style page request over the C ABI. Opens a path, waits for an announce, establishes a link, and prints the /page/... response.
task build-librns
make -C bindings/c/examples/page-fetch
./bindings/c/examples/page-fetch/librns-page-fetch \
-c /path/to/config \
92798ea245a0afcfa559348e42d628c6:/page/index.mu
Add a TCP or Backbone hub from directory.rns.recipes to the config.
Odin page fetch
Path: bindings/odin/examples/page-fetch/
Same flow as the C page-fetch example, using the Odin wrappers in bindings/odin.
task build-librns
make -C bindings/odin/examples/page-fetch
./bindings/odin/examples/page-fetch/odin-page-fetch \
-c /path/to/config \
92798ea245a0afcfa559348e42d628c6:/page/index.mu
librns pageserver (C)
Path: bindings/c/examples/pageserver/
NomadNet-compatible nomadnetwork.node destination that serves /page/index.mu over librns request handlers.
task build-librns
make -C bindings/c/examples/pageserver
./bindings/c/examples/pageserver/librns-pageserver \
-c /path/to/config
Prints DEST_HASH=... on startup. Fetch with the C, Odin, Zig, or C++ page-fetch example.
Run helpers (Go is the default demo pageserver):
task example:pageserver
make -C examples/pageserver run
task example:pageserver:c
task example:pageserver:odin
task example:pageserver:zig
task example:pageserver:cpp
Odin pageserver
Path: bindings/odin/examples/pageserver/
Same pageserver flow using the Odin bindings.
task build-librns
make -C bindings/odin/examples/pageserver
./bindings/odin/examples/pageserver/odin-pageserver \
-c /path/to/config
Zig page fetch
Path: bindings/zig/examples/page-fetch/
Same flow as the C page-fetch example, using the Zig wrappers in bindings/zig.
task build-librns
make -C bindings/zig/examples/page-fetch
./bindings/zig/examples/page-fetch/zig-page-fetch \
-c /path/to/config \
92798ea245a0afcfa559348e42d628c6:/page/index.mu
Zig pageserver
Path: bindings/zig/examples/pageserver/
Same pageserver flow using the Zig bindings.
task build-librns
make -C bindings/zig/examples/pageserver
./bindings/zig/examples/pageserver/zig-pageserver \
-c /path/to/config
C++ smoke
Path: bindings/cpp/examples/smoke/
Minimal C++17 lifecycle check against librns.so via bindings/cpp.
task build-librns
make -C bindings/cpp/examples/smoke
./bindings/cpp/examples/smoke/cpp-smoke
C++ page fetch
Path: bindings/cpp/examples/page-fetch/
Same flow as the C page-fetch example, using the C++ wrappers in bindings/cpp.
task build-librns
make -C bindings/cpp/examples/page-fetch
./bindings/cpp/examples/page-fetch/cpp-page-fetch \
-c /path/to/config \
92798ea245a0afcfa559348e42d628c6:/page/index.mu
C++ pageserver
Path: bindings/cpp/examples/pageserver/
Same pageserver flow using the C++ bindings.
task build-librns
make -C bindings/cpp/examples/pageserver
./bindings/cpp/examples/pageserver/cpp-pageserver \
-c /path/to/config
Rust / Python / Lua / Swift / Java / Kotlin / Dart examples
Each language binding keeps demos under bindings/<lang>/examples/.
task build-librns
make -C bindings/rust examples
make -C bindings/python examples
make -C bindings/lua examples
make -C bindings/swift examples
make -C bindings/java examples
make -C bindings/kotlin examples
make -C bindings/dart examples
Smoke programs print *-smoke ok. Page-fetch and pageserver match the C demos for Rust, Python, Lua, Swift, Java, and Kotlin. Dart ships FFI smoke under bindings/dart/examples/smoke (Control API sample remains under bindings/dart/example/).
Odin librns bindings
Path: bindings/odin/
Idiomatic Odin package over librns.so. Requires Odin on PATH and a built shared library.
task build-librns
task test-odin
Import with a collection rooted at bindings/odin:
import rns "rns:rns"
Wrapped surface includes node lifecycle, identity, destination, path table, link send and request, and event poll. See librns.
Zig librns bindings
Path: bindings/zig/
Idiomatic Zig package over librns.so. Requires Zig 0.16.0 or later on PATH and a built shared library.
task build-librns
task test-zig
Import as @import("rns") from a build.zig dependency on bindings/zig. See librns.
C++ librns bindings
Path: bindings/cpp/
Idiomatic C++17 RAII package over librns.so. Requires CMake and a C++17 compiler, plus a built shared library.
task build-librns
task test-cpp
#include <rns/rns.hpp>
auto node_r = rns::Node::create("");
auto node = std::move(node_r).value();
node.start();
Wrapped surface matches the Odin and Zig bindings. See librns.
Dart bindings
Path: bindings/dart/
Package rns_control includes librns FFI (ffi.dart) and a Control API client.
task build-librns
task test-dart
task build-librns-targets -- linux android windows
dependencies:
rns_control:
path: /path/to/Reticulum-Go/bindings/dart
See librns Dart FFI and Control API.
Module Layout
Most examples keep their own go.mod with a replace pointing at the repository root. examples/wasm and examples/pageserver also vendor dependencies.