一键导入
reticulum-utilities
// Comprehensive guide to Reticulum's command-line utilities for network management, diagnostics, identity operations, file transfer, and remote execution
// Comprehensive guide to Reticulum's command-line utilities for network management, diagnostics, identity operations, file transfer, and remote execution
Reticulum's cryptographic primitives, identity structure, encryption tokens, and key derivation. Use when working with Ed25519, X25519, identity hashes, HKDF, token format, encryption, signatures, ratchets, or key derivation.
Reticulum's addressing system and destination types. Use when working with destination types (SINGLE, GROUP, PLAIN, LINK), destination hashes, aspect naming, or addressing.
Reticulum's hardware abstraction layer and interface types. Use when working with RNode, AutoInterface, TCP, UDP, I2P, Serial, KISS, BLE interfaces, interface modes, IFAC, bandwidth allocation, or MTU.
Reticulum's link system — encrypted channels with forward secrecy. Use when working with link establishment, link requests, ECDH, ephemeral keys, forward secrecy, channels, keep-alive, or link timeouts.
Reticulum's packet structure and wire format. Use when working with packet headers, MTU/MDU, packet types, header types (HEADER_1/HEADER_2), packet context flags, IFAC, or binary packet encoding.
Detailed knowledge of Reticulum's announce mechanism for automatic path discovery. Use when working with announce propagation, path discovery, announce bandwidth, announce forwarding, path requests, or announce structure.
| name | reticulum-utilities |
| description | Comprehensive guide to Reticulum's command-line utilities for network management, diagnostics, identity operations, file transfer, and remote execution |
| triggers | ["rnpath","rnprobe","rnir","rnid","rncp","rnx","rnstatus","rnsd","path inspection","network probe","identity recall","file transfer","remote execution","network status","reticulum daemon","announce database"] |
Reticulum provides a comprehensive suite of command-line utilities for network management, diagnostics, identity operations, file transfer, and remote execution. These utilities form the operational toolkit for managing and interacting with Reticulum networks.
Reticulum includes the following core utilities:
The rnpath utility manages path discovery and routing table inspection in Reticulum networks.
Request and display a path to a destination:
# Request path to a destination (replace with actual hash)
rnpath c89b4da064bf66d280f0e4d8abfd9806
# Output shows:
# Path to <c89b4da064bf66d280f0e4d8abfd9806> requested
# Path found, destination <c89b4da064bf66d280f0e4d8abfd9806> is 3 hops away via <e89b4da064bf66d2> on AutoInterface[wlan0]
View all known paths in the routing table:
# Show all paths
rnpath --table
# Show only paths with maximum 2 hops
rnpath --table --max 2
# Filter to specific destination
rnpath --table c89b4da064bf66d280f0e4d8abfd9806
Example output:
<3e12fc71692f8ec47bc5> is 1 hop away via <3e12fc71692f8ec47bc5> on AutoInterface[eth0] expires 2026-01-15 14:23:19
<94b08f2d39ee12cf0922> is 2 hops away via <3e12fc71692f8ec47bc5> on AutoInterface[eth0] expires 2026-01-15 14:25:41
<c89b4da064bf66d280f0> is 3 hops away via <3e12fc71692f8ec47bc5> on AutoInterface[eth0] expires 2026-01-15 14:20:08
Monitor announce rates and rate violations:
# Show announce rate info for all destinations
rnpath --rates
# Show rates for specific destination
rnpath --rates c89b4da064bf66d280f0e4d8abfd9806
Example output:
<c89b4da064bf66d280f0> last heard 2 minutes ago, 4.5 announces/hour in the last 3 hours
<3e12fc71692f8ec47bc5> last heard 30 seconds ago, 12.0 announces/hour in the last 2 hours, 2 active rate violations, new announces allowed in 45 minutes
Remove paths from the routing table:
# Drop specific path
rnpath --drop c89b4da064bf66d280f0e4d8abfd9806
# Drop all paths via a specific transport instance
rnpath --drop-via 3e12fc71692f8ec47bc5
# Drop all queued announces on all interfaces
rnpath --drop-announces
Query path tables on remote Reticulum instances:
# Get path table from remote instance
# -R: remote transport instance identity hash
# -i: path to management identity file
# -W: timeout for remote queries
rnpath --table -R 9fb6d773498fb3feda407ed8ef2c3229 -i ~/.reticulum/identities/mgmt_id -W 15
# Get announce rates from remote instance
rnpath --rates -R 9fb6d773498fb3feda407ed8ef2c3229 -i ~/.reticulum/identities/mgmt_id
Export path information in JSON format for scripting:
# Export path table as JSON
rnpath --table --json
# Export announce rates as JSON
rnpath --rates --json
--config PATH # Use alternative config directory
-w SECONDS # Timeout before giving up (default: 15s)
-v, --verbose # Increase verbosity
The rnprobe utility sends probe packets to measure round-trip time (RTT) and verify connectivity.
Send a probe to a destination:
# Probe a destination with full destination name
# Format: app.aspect1.aspect2... destination_hash
rnprobe lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
# Output shows:
# Sent probe 1 (16 bytes) to <c89b4da064bf66d280f0e4d8abfd9806> via <3e12fc71692f8ec4> on AutoInterface[wlan0]
# Valid reply from <c89b4da064bf66d280f0e4d8abfd9806>
# Round-trip time is 245.3 milliseconds over 3 hops
Configure probe parameters:
# Send multiple probes
rnprobe -n 5 lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
# Send larger probe packet
rnprobe -s 128 lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
# Wait between probes
rnprobe -n 10 -w 2 lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
# Set custom timeout
rnprobe -t 30 lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
Show detailed path information:
# Verbose output shows next hop and interface details
rnprobe -v lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
# Example output:
# Sent probe 1 (16 bytes) to <c89b4da064bf66d280f0e4d8abfd9806> via <3e12fc71692f8ec4> on AutoInterface[wlan0]
# Valid reply from <c89b4da064bf66d280f0e4d8abfd9806>
# Round-trip time is 245.3 milliseconds over 3 hops [RSSI -67 dBm] [SNR 18.5 dB] [Link Quality 94%]
When sending multiple probes, statistics are shown:
rnprobe -n 10 lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
# Output shows:
# ... (individual probe results) ...
# Sent 10, received 9, packet loss 10.0%
rnprobe returns meaningful exit codes for scripting:
-s SIZE # Probe packet size in bytes (default: 16)
-n COUNT # Number of probes to send (default: 1)
-t SECONDS # Timeout before giving up (default: 12s + hop latency)
-w SECONDS # Time between each probe (default: 0)
-v, --verbose # Show detailed output
--config PATH # Use alternative config directory
The rnir utility runs a simple Identity Recall service, making the announce database available for inspection. This is primarily used for diagnostic purposes.
# Run Identity Recall service with default config
rnir
# Use alternative config directory
rnir --config /path/to/config
# Verbose output
rnir -v
# Quiet mode
rnir -q
The Identity Recall service maintains the announce database, allowing other utilities and applications to query received announces and recalled identities. This is automatically handled by the Reticulum daemon in most deployments.
The rnir utility serves these functions:
In practice, rnir functionality is usually provided by rnsd (the Reticulum daemon), and this utility is mainly used for testing and debugging announce propagation.
The rnid utility provides comprehensive identity management, including key generation, import/export, signing, encryption, and destination operations.
# Create new identity file
rnid --generate ~/.reticulum/identities/my_identity
# Force overwrite if file exists
rnid --generate ~/.reticulum/identities/my_identity --force
# Import identity from hex string
rnid --import 7a2b9c... --write ~/.reticulum/identities/imported_id
# Import from base64
rnid --import ARF3t4w... --base64 --write ~/.reticulum/identities/imported_id
# Import from base32
rnid --import K4HGL... --base32 --write ~/.reticulum/identities/imported_id
# Export identity (private key) in hex
rnid -i ~/.reticulum/identities/my_identity --export
# Export in base64
rnid -i ~/.reticulum/identities/my_identity --export --base64
# Export in base32
rnid -i ~/.reticulum/identities/my_identity --export --base32
# Show public key (private key hidden by default)
rnid -i ~/.reticulum/identities/my_identity --print-identity
# Show both public and private keys
rnid -i ~/.reticulum/identities/my_identity --print-identity --print-private
# Output shows:
# Public Key : 2c0461f1c6f3a6aef3971f38e2dbd663b783c8f5ad5f2eb0e9772da88d4d1ce5
# Private Key : Hidden
# Calculate destination hash for specific aspects
rnid -i ~/.reticulum/identities/my_identity --hash lxmf.delivery
# Output shows:
# The lxmf.delivery destination for this Identity is <c89b4da064bf66d2>
# The full destination specifier is <lxmf.delivery/c89b4da064bf66d280f0e4d8abfd9806>
# Announce a destination based on identity
rnid -i ~/.reticulum/identities/my_identity --announce lxmf.delivery
# Output shows:
# Created destination <lxmf.delivery/c89b4da064bf66d280f0e4d8abfd9806>
# Announcing destination <c89b4da064bf66d280f0e4d8abfd9806>
# Sign a file
rnid -i ~/.reticulum/identities/my_identity --sign document.pdf
# Creates document.pdf.rsg (signature file)
# Verify signature
rnid -i ~/.reticulum/identities/my_identity --validate document.pdf.rsg
# Output shows:
# Signature document.pdf.rsg for file document.pdf made by Identity <2c0461f1c6f3a6ae> is valid
# Sign with custom output path
rnid -i ~/.reticulum/identities/my_identity --sign document.pdf --write signature.rsg
# Verify with explicit paths
rnid -i ~/.reticulum/identities/my_identity --validate signature.rsg --read document.pdf
# Encrypt file for an identity (requires public key)
rnid -i c89b4da064bf66d280f0e4d8abfd9806 --encrypt sensitive.txt
# Creates sensitive.txt.rfe (encrypted file)
# Decrypt file (requires private key)
rnid -i ~/.reticulum/identities/my_identity --decrypt sensitive.txt.rfe
# Encrypt with custom output
rnid -i c89b4da064bf66d280f0e4d8abfd9806 --encrypt sensitive.txt --write encrypted.rfe
# Decrypt with custom output
rnid -i ~/.reticulum/identities/my_identity --decrypt encrypted.rfe --write decrypted.txt
# Force overwrite
rnid -i ~/.reticulum/identities/my_identity --decrypt encrypted.rfe --force
# Request identity from network if not locally known
rnid -i c89b4da064bf66d280f0e4d8abfd9806 --request --print-identity
# Set custom timeout for request
rnid -i c89b4da064bf66d280f0e4d8abfd9806 --request -t 30 --print-identity
# Output shows:
# Path to <c89b4da064bf66d280f0e4d8abfd9806> requested
# Received Identity <2c0461f1c6f3a6ae> for destination <c89b4da064bf66d280f0e4d8abfd9806> from the network
# Public Key : 2c0461f1c6f3a6aef3971f38e2dbd663b783c8f5ad5f2eb0e9772da88d4d1ce5
-i, --identity PATH # Path to identity file or identity/destination hash
-g, --generate PATH # Generate new identity
-m, --import DATA # Import identity from hex/base32/base64
-x, --export # Export identity
-p, --print-identity # Display identity information
-P, --print-private # Show private key (use with caution)
-H, --hash ASPECTS # Calculate destination hash
-a, --announce ASPECTS # Announce destination
-e, --encrypt FILE # Encrypt file
-d, --decrypt FILE # Decrypt file
-s, --sign FILE # Sign file
-V, --validate FILE # Validate signature
-R, --request # Request unknown identity from network
-t SECONDS # Identity request timeout
-f, --force # Force overwrite of existing files
-r, --read FILE # Input file path
-w, --write FILE # Output file path
-b, --base64 # Use base64 encoding
-B, --base32 # Use base32 encoding
-v, --verbose # Increase verbosity
-q, --quiet # Decrease verbosity
--config PATH # Use alternative config directory
The rncp utility provides secure file transfer capabilities using Reticulum's Resource API.
# Send file to destination
rncp document.pdf c89b4da064bf66d280f0e4d8abfd9806
# Silent mode (no progress animation)
rncp --silent document.pdf c89b4da064bf66d280f0e4d8abfd9806
# Show physical layer transfer rates
rncp --phy-rates document.pdf c89b4da064bf66d280f0e4d8abfd9806
# Disable automatic compression
rncp --no-compress large.zip c89b4da064bf66d280f0e4d8abfd9806
# Set custom timeout
rncp -w 60 large_file.dat c89b4da064bf66d280f0e4d8abfd9806
Example output:
Path to <c89b4da064bf66d280f0e4d8abfd9806> requested
Establishing link with <c89b4da064bf66d280f0e4d8abfd9806>
Advertising file resource
Transferring file ⢁ 45.2% - 1.81 MB of 4.00 MB - 125.30 KBps
# Start listener to receive files
rncp --listen
# Listen with authentication (only accept from specific identities)
rncp --listen -a c89b4da064bf66d280f0e4d8abfd9806 -a 3e12fc71692f8ec47bc5
# Listen without authentication (accept from anyone - use with caution!)
rncp --listen --no-auth
# Save received files to specific directory
rncp --listen --save ~/downloads
# Allow overwriting existing files
rncp --listen --save ~/downloads --overwrite
# Periodic announce (announce every 300 seconds)
rncp --listen -b 300
# Announce only at startup
rncp --listen -b 0
# Fetch file from remote listener
rncp --fetch /path/to/remote/file c89b4da064bf66d280f0e4d8abfd9806
# Fetch with custom save location
rncp --fetch /path/to/remote/file c89b4da064bf66d280f0e4d8abfd9806 --save ~/downloads
# Fetch and overwrite local file if it exists
rncp --fetch /path/to/remote/file c89b4da064bf66d280f0e4d8abfd9806 --overwrite
Allow authenticated clients to fetch files:
# Allow fetch from specific directory (jail)
rncp --listen --allow-fetch --jail /shared/files -a c89b4da064bf66d280f0e4d8abfd9806
# The jail restricts fetch requests to files under /shared/files
# Attempts to access files outside the jail are denied
# Display listener destination hash and exit
rncp --print-identity
# Output shows:
# Identity : <2c0461f1c6f3a6aef3971f38e2dbd663b783c8f5>
# Listening on : <c89b4da064bf66d280f0e4d8abfd9806>
Create an allowed identities file:
# Create file at ~/.config/rncp/allowed_identities
mkdir -p ~/.config/rncp
cat > ~/.config/rncp/allowed_identities << EOF
c89b4da064bf66d280f0e4d8abfd9806
3e12fc71692f8ec47bc5
94b08f2d39ee12cf0922
EOF
# Now rncp --listen will automatically load these allowed identities
Alternative locations (checked in order):
/etc/rncp/allowed_identities~/.config/rncp/allowed_identities~/.rncp/allowed_identities-l, --listen # Listen for incoming transfers
-f, --fetch # Fetch file from remote listener
-F, --allow-fetch # Allow authenticated clients to fetch files
-j, --jail PATH # Restrict fetch to specific directory
-s, --save PATH # Save received files to directory
-O, --overwrite # Allow overwriting existing files
-C, --no-compress # Disable automatic compression
-a HASH # Allow identity (can be used multiple times)
-n, --no-auth # Accept from anyone (no authentication)
-p, --print-identity # Print identity and listening destination
-b SECONDS # Announce interval (0 = only at startup, -1 = never)
-w SECONDS # Connection timeout (default: 15s)
-P, --phy-rates # Display physical layer transfer rates
-S, --silent # Disable transfer progress output
-v, --verbose # Increase verbosity
-q, --quiet # Decrease verbosity
--config PATH # Use alternative config directory
The rnx utility enables secure remote command execution over Reticulum networks.
# Execute command on remote system
rnx c89b4da064bf66d280f0e4d8abfd9806 "uname -a"
# Execute with detailed output
rnx --detailed c89b4da064bf66d280f0e4d8abfd9806 "ls -la /tmp"
# Mirror remote exit code (exit with same code as remote command)
rnx -m c89b4da064bf66d280f0e4d8abfd9806 "test -f /etc/passwd"
echo $? # Shows remote command's exit code
Example output:
Establishing link with <c89b4da064bf66d280f0e4d8abfd9806>
Sending execution request
Command delivered, awaiting result
Receiving result ⢁ 45.2%
Linux raspberrypi 5.15.84-v8+ #1613 SMP PREEMPT aarch64 GNU/Linux
# Limit stdout size (in bytes)
rnx --stdout 1024 c89b4da064bf66d280f0e4d8abfd9806 "dmesg"
# Limit stderr size
rnx --stderr 512 c89b4da064bf66d280f0e4d8abfd9806 "make"
# Pass data to stdin
rnx --stdin "Hello World" c89b4da064bf66d280f0e4d8abfd9806 "cat"
# Set execution timeout
rnx -w 30 c89b4da064bf66d280f0e4d8abfd9806 "long_running_task"
# Set result download timeout
rnx -W 60 c89b4da064bf66d280f0e4d8abfd9806 "generate_large_output"
Show comprehensive execution statistics:
rnx --detailed c89b4da064bf66d280f0e4d8abfd9806 "df -h"
# Output includes:
# --- End of remote output, rnx done ---
# Remote command execution took 0.234 seconds
# Transferred 2.45 KB in 1.8 seconds, effective rate 1.36 KBps
# Remote wrote 1234 bytes to stdout
# Remote wrote 0 bytes to stderr
Enter interactive shell session with remote system:
# Interactive shell
rnx --interactive c89b4da064bf66d280f0e4d8abfd9806
# Interactive with detailed output
rnx --interactive --detailed c89b4da064bf66d280f0e4d8abfd9806
# Once connected, you get a command prompt:
> ls -la
> pwd
> cat /etc/hostname
> exit
Commands in interactive mode:
clear - Clear the terminalexit or quit - Exit interactive mode# Start listener to accept command execution requests
rnx --listen
# Listen with authentication (only accept from specific identities)
rnx --listen -a c89b4da064bf66d280f0e4d8abfd9806 -a 3e12fc71692f8ec47bc5
# Listen without authentication (dangerous - accept from anyone)
rnx --listen --noauth
# Print listener identity and exit
rnx --print-identity
# Don't announce at startup
rnx --listen --no-announce
Create an allowed identities file:
# Create file at ~/.config/rnx/allowed_identities
mkdir -p ~/.config/rnx
cat > ~/.config/rnx/allowed_identities << EOF
c89b4da064bf66d280f0e4d8abfd9806
3e12fc71692f8ec47bc5
EOF
# Now rnx --listen will automatically load these allowed identities
Alternative locations (checked in order):
/etc/rnx/allowed_identities~/.config/rnx/allowed_identities~/.rnx/allowed_identitiesExecute commands without identifying:
# Don't send local identity to remote (anonymous execution)
rnx --noid c89b4da064bf66d280f0e4d8abfd9806 "hostname"
Use specific identity for authentication:
# Use custom identity file
rnx -i ~/.reticulum/identities/work_id c89b4da064bf66d280f0e4d8abfd9806 "whoami"
# Listener with custom identity
rnx --listen -i ~/.reticulum/identities/server_id
-l, --listen # Listen for incoming execution requests
-x, --interactive # Enter interactive mode
-i PATH # Path to identity file
-a HASH # Accept from this identity (listener mode)
-n, --noauth # Accept from anyone (listener mode)
-N, --noid # Don't identify to remote
-d, --detailed # Show detailed execution statistics
-m # Mirror remote command exit code
-w SECONDS # Connection and request timeout (default: 15s)
-W SECONDS # Maximum result download time
--stdin DATA # Pass data to remote command's stdin
--stdout BYTES # Maximum stdout size to return
--stderr BYTES # Maximum stderr size to return
-p, --print-identity # Print identity and listening destination
-b, --no-announce # Don't announce at startup (listener mode)
-v, --verbose # Increase verbosity
-q, --quiet # Decrease verbosity
--config PATH # Use alternative config directory
Important: Remote execution is a powerful capability that should be used with caution:
--noauth in production--stdout and --stderr limits-w and -WThe rnstatus utility displays comprehensive network status, interface statistics, and system information.
# Show status of active interfaces
rnstatus
# Show all interfaces (including client connections and peers)
rnstatus --all
# Filter interfaces by name
rnstatus wlan
Example output:
AutoInterface[wlan0]
Status : Up
Mode : Full
Rate : 54.0 Mbps
Noise Fl. : -92 dBm
Traffic : ↑2.45 MB 125.30 KBps
↓5.67 MB 287.91 KBps
TCPServerInterface[eth0:4242]
Status : Up
Clients : 3
Mode : Gateway
Traffic : ↑15.23 MB 512.45 KBps
↓8.91 MB 301.22 KBps
Transport Instance <3e12fc71692f8ec47bc5> running
Probe responder at <94b08f2d39ee12cf0922> active
Uptime is 3 hours 24 minutes, 2 entries in link table
# Show announce statistics
rnstatus --announce-stats
# Show link table statistics
rnstatus --link-stats
# Show traffic totals
rnstatus --totals
# Combine multiple options
rnstatus --all --announce-stats --link-stats --totals
Example with announce stats:
AutoInterface[wlan0]
Status : Up
Queued : 2 announces
Held : 5 announces
Announces : 8.5/hour↑
12.3/hour↓
Traffic : ↑2.45 MB 125.30 KBps
↓5.67 MB 287.91 KBps
# Sort by bitrate
rnstatus --sort rate
# Sort by total traffic
rnstatus --sort traffic
# Sort by received bytes
rnstatus --sort rx
# Sort by transmitted bytes
rnstatus --sort tx
# Sort by announce rate
rnstatus --sort announces
# Reverse sort order
rnstatus --sort traffic --reverse
Available sort keys:
rate or bitrate - Interface bandwidthtraffic - Total traffic (rx + tx)rx - Received bytestx - Transmitted bytesrxs - Receive speedtxs - Transmit speedannounces or announce - Total announce frequencyarx - Incoming announce frequencyatx - Outgoing announce frequencyheld - Number of held announcesQuery status from remote Reticulum instance:
# Get status from remote instance
# -R: remote transport instance identity hash
# -i: path to management identity file
rnstatus -R 9fb6d773498fb3feda407ed8ef2c3229 -i ~/.reticulum/identities/mgmt_id
# Include link statistics
rnstatus -R 9fb6d773498fb3feda407ed8ef2c3229 -i ~/.reticulum/identities/mgmt_id --link-stats
# Set custom timeout
rnstatus -R 9fb6d773498fb3feda407ed8ef2c3229 -i ~/.reticulum/identities/mgmt_id -w 30
Export status information in JSON format:
# Export as JSON for scripting
rnstatus --json
# Example JSON output structure:
{
"interfaces": [
{
"name": "AutoInterface[wlan0]",
"status": true,
"mode": 0,
"bitrate": 54000000,
"rxb": 5945344,
"txb": 2568192,
"rxs": 294563,
"txs": 128410,
"noise_floor": -92,
...
}
],
"transport_id": "3e12fc71692f8ec47bc5",
"transport_uptime": 12240.5,
...
}
The status display shows various information depending on interface type:
Physical Interfaces:
RNode Interfaces:
I2P Interfaces:
Server Interfaces:
All Interfaces:
-a, --all # Show all interfaces
-A, --announce-stats # Show announce statistics
-l, --link-stats # Show link table statistics
-t, --totals # Display traffic totals
-s, --sort KEY # Sort interfaces by key
-r, --reverse # Reverse sort order
-j, --json # Output in JSON format
-R HASH # Query remote transport instance
-i PATH # Management identity for remote queries
-w SECONDS # Timeout for remote queries (default: 15s)
-v, --verbose # Increase verbosity
--config PATH # Use alternative config directory
FILTER # Only show interfaces matching filter
The rnsd utility runs Reticulum as a daemon/service, providing persistent network connectivity.
# Start daemon in foreground
rnsd
# Start as service (log to file)
rnsd --service
# Start with custom config
rnsd --config /etc/reticulum
# Verbose logging
rnsd -v
# Very verbose (debug) logging
rnsd -vv
# Quiet mode
rnsd -q
Drop into Python REPL with Reticulum instance:
# Start daemon in interactive mode
rnsd --interactive
# Python REPL with access to Reticulum instance:
>>> RNS
<module 'RNS' from '/usr/lib/python3/dist-packages/RNS/__init__.py'>
>>> reticulum
<RNS.Reticulum object at 0x7f8b4c1a2e50>
>>> reticulum.get_interface_stats()
{'interfaces': [...], ...}
# Print example configuration
rnsd --exampleconfig
# Save to file
rnsd --exampleconfig > /etc/reticulum/config.example
# Use as starting point for your config
rnsd --exampleconfig > ~/.reticulum/config
# Edit ~/.reticulum/config with your settings
Run rnsd as a systemd service:
# Create service file: /etc/systemd/system/rnsd.service
[Unit]
Description=Reticulum Network Stack Daemon
After=network.target
[Service]
Type=simple
Restart=always
RestartSec=10
User=reticulum
ExecStart=/usr/local/bin/rnsd --service
[Install]
WantedBy=multi-user.target
# Enable and start service
sudo systemctl enable rnsd
sudo systemctl start rnsd
# Check status
sudo systemctl status rnsd
# View logs
sudo journalctl -u rnsd -f
By default, rnsd looks for configuration in:
~/.reticulum/%USERPROFILE%\.reticulum\Override with --config:
rnsd --config /etc/reticulum
-s, --service # Run as service (log to file)
-i, --interactive # Drop into interactive Python shell
-v, --verbose # Increase verbosity (can be used multiple times)
-q, --quiet # Decrease verbosity (can be used multiple times)
--config PATH # Path to alternative config directory
--exampleconfig # Print example configuration and exit
--version # Show version and exit
When run as a service, logs are written to:
~/.reticulum/logfile%USERPROFILE%\.reticulum\logfileLog levels (0-7):
Configure in config file:
[logging]
loglevel = 4
# 1. Check network status
rnstatus --all --announce-stats
# 2. Inspect routing table
rnpath --table
# 3. Test connectivity to destination
rnprobe -n 5 lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
# 4. Check announce rates
rnpath --rates c89b4da064bf66d280f0e4d8abfd9806
# 5. Request path if needed
rnpath c89b4da064bf66d280f0e4d8abfd9806
# Server: Start listener with authentication
rncp --listen --save ~/incoming -a c89b4da064bf66d280f0e4d8abfd9806 -b 300
# Client: Send file
rncp important.pdf c89b4da064bf66d280f0e4d8abfd9806
# Client: Fetch file from server
rncp --fetch /shared/document.pdf c89b4da064bf66d280f0e4d8abfd9806
# Server: Start rnx listener
rnx --listen -a c89b4da064bf66d280f0e4d8abfd9806
# Client: Execute commands
rnx c89b4da064bf66d280f0e4d8abfd9806 "df -h"
rnx c89b4da064bf66d280f0e4d8abfd9806 "systemctl status rnsd"
rnx --detailed c89b4da064bf66d280f0e4d8abfd9806 "dmesg | tail -50"
# Client: Interactive session
rnx --interactive c89b4da064bf66d280f0e4d8abfd9806
# 1. Generate identity
rnid --generate ~/.reticulum/identities/my_id
# 2. Display public key
rnid -i ~/.reticulum/identities/my_id --print-identity
# 3. Calculate destination hash
rnid -i ~/.reticulum/identities/my_id --hash myapp.service
# 4. Announce destination
rnid -i ~/.reticulum/identities/my_id --announce myapp.service
# 5. Sign a document
rnid -i ~/.reticulum/identities/my_id --sign contract.pdf
# 6. Encrypt file for recipient
rnid -i c89b4da064bf66d280f0e4d8abfd9806 --encrypt sensitive.txt
# 7. Decrypt received file
rnid -i ~/.reticulum/identities/my_id --decrypt sensitive.txt.rfe
#!/bin/bash
# monitor_reticulum.sh - Monitor Reticulum network health
while true; do
echo "=== Reticulum Status at $(date) ==="
# Get JSON status
STATUS=$(rnstatus --json)
# Extract uptime
UPTIME=$(echo $STATUS | jq -r '.transport_uptime')
echo "Uptime: $UPTIME seconds"
# Count active interfaces
ACTIVE=$(echo $STATUS | jq '[.interfaces[] | select(.status == true)] | length')
echo "Active interfaces: $ACTIVE"
# Show traffic totals
rnstatus --totals
# Check paths
echo -e "\nKnown paths:"
rnpath --table --json | jq -r '.[] | "\(.hash) - \(.hops) hops"'
sleep 300 # Check every 5 minutes
done
All utilities can be integrated into scripts and applications:
import subprocess
import json
# Get network status
result = subprocess.run(['rnstatus', '--json'], capture_output=True, text=True)
status = json.loads(result.stdout)
# Check if specific interface is up
for iface in status['interfaces']:
if 'wlan0' in iface['name']:
if iface['status']:
print(f"wlan0 is up, {iface['rxb']} bytes received")
else:
print("wlan0 is down")
# Probe destination
result = subprocess.run([
'rnprobe', '-n', '1',
'lxmf.delivery',
'c89b4da064bf66d280f0e4d8abfd9806'
], capture_output=True, text=True)
if result.returncode == 0:
print("Destination is reachable")
else:
print("Destination is unreachable")
# Check if rnsd is running
ps aux | grep rnsd
# Verify interfaces are up
rnstatus --all
# Test path discovery
rnpath --table
# Request new path
rnpath c89b4da064bf66d280f0e4d8abfd9806
# Probe with verbose output
rnprobe -v lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
# Verify identity
rnid -i ~/.reticulum/identities/my_id --print-identity
# Check allowed identities list
cat ~/.config/rncp/allowed_identities
# Test without authentication (diagnostic only)
rncp --listen --no-auth # Not for production!
# Check interface statistics
rnstatus --all --announce-stats
# Look for high announce rates
rnpath --rates
# Check for held announces
rnstatus --announce-stats | grep "Held"
# Drop stuck announces
rnpath --drop-announces
Reticulum's utilities provide comprehensive network management capabilities. Master these tools to effectively operate, monitor, and troubleshoot Reticulum networks. Each utility serves a specific purpose, and together they form a complete operational toolkit for Reticulum network administration.