| 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 Utilities
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.
Overview of Utilities
Reticulum includes the following core utilities:
- rnpath: Path discovery and management
- rnprobe: Network probing and RTT measurement
- rnir: Identity Recall (announce database inspection)
- rnid: Identity management and cryptographic operations
- rncp: File transfer using the Resource API
- rnx: Remote command execution
- rnstatus: Network status and interface statistics
- rnsd: Reticulum daemon for running as a service
rnpath - Path Discovery and Management
The rnpath utility manages path discovery and routing table inspection in Reticulum networks.
Basic Path Request
Request and display a path to a destination:
rnpath c89b4da064bf66d280f0e4d8abfd9806
Display Path Table
View all known paths in the routing table:
rnpath --table
rnpath --table --max 2
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
Announce Rate Information
Monitor announce rates and rate violations:
rnpath --rates
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
Drop Paths
Remove paths from the routing table:
rnpath --drop c89b4da064bf66d280f0e4d8abfd9806
rnpath --drop-via 3e12fc71692f8ec47bc5
rnpath --drop-announces
Remote Management
Query path tables on remote Reticulum instances:
rnpath --table -R 9fb6d773498fb3feda407ed8ef2c3229 -i ~/.reticulum/identities/mgmt_id -W 15
rnpath --rates -R 9fb6d773498fb3feda407ed8ef2c3229 -i ~/.reticulum/identities/mgmt_id
JSON Output
Export path information in JSON format for scripting:
rnpath --table --json
rnpath --rates --json
Common Options
--config PATH
-w SECONDS
-v, --verbose
rnprobe - Network Probing and RTT Measurement
The rnprobe utility sends probe packets to measure round-trip time (RTT) and verify connectivity.
Basic Probe
Send a probe to a destination:
rnprobe lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
Probe with Options
Configure probe parameters:
rnprobe -n 5 lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
rnprobe -s 128 lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
rnprobe -n 10 -w 2 lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
rnprobe -t 30 lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
Verbose Output
Show detailed path information:
rnprobe -v lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
Probe Statistics
When sending multiple probes, statistics are shown:
rnprobe -n 10 lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
Exit Codes
rnprobe returns meaningful exit codes for scripting:
- 0: All probes successful
- 1: Path request timed out
- 2: Some packets lost
- 3: Probe packet exceeds MTU
Common Options
-s SIZE
-n COUNT
-t SECONDS
-w SECONDS
-v, --verbose
--config PATH
rnir - Identity Recall (Announce Database)
The rnir utility runs a simple Identity Recall service, making the announce database available for inspection. This is primarily used for diagnostic purposes.
Start Identity Recall Service
rnir
rnir --config /path/to/config
rnir -v
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.
Purpose
The rnir utility serves these functions:
- Maintains the announce database
- Makes identity information available for recall
- Provides network-wide identity distribution
- Enables destination lookups by identity hash
In practice, rnir functionality is usually provided by rnsd (the Reticulum daemon), and this utility is mainly used for testing and debugging announce propagation.
rnid - Identity Management
The rnid utility provides comprehensive identity management, including key generation, import/export, signing, encryption, and destination operations.
Generate New Identity
rnid --generate ~/.reticulum/identities/my_identity
rnid --generate ~/.reticulum/identities/my_identity --force
Import and Export
rnid --import 7a2b9c... --write ~/.reticulum/identities/imported_id
rnid --import ARF3t4w... --base64 --write ~/.reticulum/identities/imported_id
rnid --import K4HGL... --base32 --write ~/.reticulum/identities/imported_id
rnid -i ~/.reticulum/identities/my_identity --export
rnid -i ~/.reticulum/identities/my_identity --export --base64
rnid -i ~/.reticulum/identities/my_identity --export --base32
Display Identity Information
rnid -i ~/.reticulum/identities/my_identity --print-identity
rnid -i ~/.reticulum/identities/my_identity --print-identity --print-private
Calculate Destination Hashes
rnid -i ~/.reticulum/identities/my_identity --hash lxmf.delivery
Announce Destination
rnid -i ~/.reticulum/identities/my_identity --announce lxmf.delivery
File Signing and Verification
rnid -i ~/.reticulum/identities/my_identity --sign document.pdf
rnid -i ~/.reticulum/identities/my_identity --validate document.pdf.rsg
rnid -i ~/.reticulum/identities/my_identity --sign document.pdf --write signature.rsg
rnid -i ~/.reticulum/identities/my_identity --validate signature.rsg --read document.pdf
File Encryption and Decryption
rnid -i c89b4da064bf66d280f0e4d8abfd9806 --encrypt sensitive.txt
rnid -i ~/.reticulum/identities/my_identity --decrypt sensitive.txt.rfe
rnid -i c89b4da064bf66d280f0e4d8abfd9806 --encrypt sensitive.txt --write encrypted.rfe
rnid -i ~/.reticulum/identities/my_identity --decrypt encrypted.rfe --write decrypted.txt
rnid -i ~/.reticulum/identities/my_identity --decrypt encrypted.rfe --force
Identity Recall from Network
rnid -i c89b4da064bf66d280f0e4d8abfd9806 --request --print-identity
rnid -i c89b4da064bf66d280f0e4d8abfd9806 --request -t 30 --print-identity
Common Options
-i, --identity PATH
-g, --generate PATH
-m, --import DATA
-x, --export
-p, --print-identity
-P, --print-private
-H, --hash ASPECTS
-a, --announce ASPECTS
-e, --encrypt FILE
-d, --decrypt FILE
-s, --sign FILE
-V, --validate FILE
-R, --request
-t SECONDS
-f, --force
-r, --read FILE
-w, --write FILE
-b, --base64
-B, --base32
-v, --verbose
-q, --quiet
--config PATH
rncp - File Transfer
The rncp utility provides secure file transfer capabilities using Reticulum's Resource API.
Send File
rncp document.pdf c89b4da064bf66d280f0e4d8abfd9806
rncp --silent document.pdf c89b4da064bf66d280f0e4d8abfd9806
rncp --phy-rates document.pdf c89b4da064bf66d280f0e4d8abfd9806
rncp --no-compress large.zip c89b4da064bf66d280f0e4d8abfd9806
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
Receive Files (Listener Mode)
rncp --listen
rncp --listen -a c89b4da064bf66d280f0e4d8abfd9806 -a 3e12fc71692f8ec47bc5
rncp --listen --no-auth
rncp --listen --save ~/downloads
rncp --listen --save ~/downloads --overwrite
rncp --listen -b 300
rncp --listen -b 0
Fetch File from Listener
rncp --fetch /path/to/remote/file c89b4da064bf66d280f0e4d8abfd9806
rncp --fetch /path/to/remote/file c89b4da064bf66d280f0e4d8abfd9806 --save ~/downloads
rncp --fetch /path/to/remote/file c89b4da064bf66d280f0e4d8abfd9806 --overwrite
Listener with Fetch Permission
Allow authenticated clients to fetch files:
rncp --listen --allow-fetch --jail /shared/files -a c89b4da064bf66d280f0e4d8abfd9806
Print Listener Identity
rncp --print-identity
Authentication Configuration
Create an allowed identities file:
mkdir -p ~/.config/rncp
cat > ~/.config/rncp/allowed_identities << EOF
c89b4da064bf66d280f0e4d8abfd9806
3e12fc71692f8ec47bc5
94b08f2d39ee12cf0922
EOF
Alternative locations (checked in order):
/etc/rncp/allowed_identities
~/.config/rncp/allowed_identities
~/.rncp/allowed_identities
Common Options
-l, --listen
-f, --fetch
-F, --allow-fetch
-j, --jail PATH
-s, --save PATH
-O, --overwrite
-C, --no-compress
-a HASH
-n, --no-auth
-p, --print-identity
-b SECONDS
-w SECONDS
-P, --phy-rates
-S, --silent
-v, --verbose
-q, --quiet
--config PATH
rnx - Remote Execution
The rnx utility enables secure remote command execution over Reticulum networks.
Execute Remote Command
rnx c89b4da064bf66d280f0e4d8abfd9806 "uname -a"
rnx --detailed c89b4da064bf66d280f0e4d8abfd9806 "ls -la /tmp"
rnx -m c89b4da064bf66d280f0e4d8abfd9806 "test -f /etc/passwd"
echo $?
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
Execute with Options
rnx --stdout 1024 c89b4da064bf66d280f0e4d8abfd9806 "dmesg"
rnx --stderr 512 c89b4da064bf66d280f0e4d8abfd9806 "make"
rnx --stdin "Hello World" c89b4da064bf66d280f0e4d8abfd9806 "cat"
rnx -w 30 c89b4da064bf66d280f0e4d8abfd9806 "long_running_task"
rnx -W 60 c89b4da064bf66d280f0e4d8abfd9806 "generate_large_output"
Detailed Output
Show comprehensive execution statistics:
rnx --detailed c89b4da064bf66d280f0e4d8abfd9806 "df -h"
Interactive Mode
Enter interactive shell session with remote system:
rnx --interactive c89b4da064bf66d280f0e4d8abfd9806
rnx --interactive --detailed c89b4da064bf66d280f0e4d8abfd9806
> ls -la
> pwd
> cat /etc/hostname
> exit
Commands in interactive mode:
- Any shell command executes on remote system
clear - Clear the terminal
exit or quit - Exit interactive mode
Listen Mode (Execute Commands from Remote)
rnx --listen
rnx --listen -a c89b4da064bf66d280f0e4d8abfd9806 -a 3e12fc71692f8ec47bc5
rnx --listen --noauth
rnx --print-identity
rnx --listen --no-announce
Authentication Configuration
Create an allowed identities file:
mkdir -p ~/.config/rnx
cat > ~/.config/rnx/allowed_identities << EOF
c89b4da064bf66d280f0e4d8abfd9806
3e12fc71692f8ec47bc5
EOF
Alternative locations (checked in order):
/etc/rnx/allowed_identities
~/.config/rnx/allowed_identities
~/.rnx/allowed_identities
Don't Identify to Remote
Execute commands without identifying:
rnx --noid c89b4da064bf66d280f0e4d8abfd9806 "hostname"
Custom Identity
Use specific identity for authentication:
rnx -i ~/.reticulum/identities/work_id c89b4da064bf66d280f0e4d8abfd9806 "whoami"
rnx --listen -i ~/.reticulum/identities/server_id
Common Options
-l, --listen
-x, --interactive
-i PATH
-a HASH
-n, --noauth
-N, --noid
-d, --detailed
-m
-w SECONDS
-W SECONDS
--stdin DATA
--stdout BYTES
--stderr BYTES
-p, --print-identity
-b, --no-announce
-v, --verbose
-q, --quiet
--config PATH
Security Considerations
Important: Remote execution is a powerful capability that should be used with caution:
- Always use authentication: Never use
--noauth in production
- Limit allowed identities: Maintain a strict whitelist
- Monitor execution logs: Keep track of who executes what
- Set resource limits: Use
--stdout and --stderr limits
- Use timeouts: Prevent runaway processes with
-w and -W
- Consider command jailing: The executed commands run with the listener's user permissions
rnstatus - Network Status
The rnstatus utility displays comprehensive network status, interface statistics, and system information.
Basic Status
rnstatus
rnstatus --all
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
Detailed Statistics
rnstatus --announce-stats
rnstatus --link-stats
rnstatus --totals
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 Interfaces
rnstatus --sort rate
rnstatus --sort traffic
rnstatus --sort rx
rnstatus --sort tx
rnstatus --sort announces
rnstatus --sort traffic --reverse
Available sort keys:
rate or bitrate - Interface bandwidth
traffic - Total traffic (rx + tx)
rx - Received bytes
tx - Transmitted bytes
rxs - Receive speed
txs - Transmit speed
announces or announce - Total announce frequency
arx - Incoming announce frequency
atx - Outgoing announce frequency
held - Number of held announces
Remote Status
Query status from remote Reticulum instance:
rnstatus -R 9fb6d773498fb3feda407ed8ef2c3229 -i ~/.reticulum/identities/mgmt_id
rnstatus -R 9fb6d773498fb3feda407ed8ef2c3229 -i ~/.reticulum/identities/mgmt_id --link-stats
rnstatus -R 9fb6d773498fb3feda407ed8ef2c3229 -i ~/.reticulum/identities/mgmt_id -w 30
JSON Output
Export status information in JSON format:
rnstatus --json
{
"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,
...
}
Interface Information
The status display shows various information depending on interface type:
Physical Interfaces:
- Status (Up/Down)
- Mode (Access Point, Point-to-Point, Roaming, Boundary, Gateway, Full)
- Rate (bandwidth)
- Noise Floor (dBm)
- Interference levels
- Airtime percentages
- Channel load
RNode Interfaces:
- CPU load and temperature
- Memory usage
- Battery status
- Signal quality metrics
I2P Interfaces:
- Tunnel state
- Connected peers
- B32 address
Server Interfaces:
- Connected clients
- IFAC (Interface Access Control) information
All Interfaces:
- Traffic statistics (bytes transferred, current speed)
- Announce queue status
- Held announces
Common Options
-a, --all
-A, --announce-stats
-l, --link-stats
-t, --totals
-s, --sort KEY
-r, --reverse
-j, --json
-R HASH
-i PATH
-w SECONDS
-v, --verbose
--config PATH
FILTER
rnsd - Reticulum Daemon
The rnsd utility runs Reticulum as a daemon/service, providing persistent network connectivity.
Start Daemon
rnsd
rnsd --service
rnsd --config /etc/reticulum
rnsd -v
rnsd -vv
rnsd -q
Interactive Mode
Drop into Python REPL with Reticulum instance:
rnsd --interactive
>>> RNS
<module 'RNS' from '/usr/lib/python3/dist-packages/RNS/__init__.py'>
>>> reticulum
<RNS.Reticulum object at 0x7f8b4c1a2e50>
>>> reticulum.get_interface_stats()
{'interfaces': [...], ...}
Generate Example Configuration
rnsd --exampleconfig
rnsd --exampleconfig > /etc/reticulum/config.example
rnsd --exampleconfig > ~/.reticulum/config
Systemd Service
Run rnsd as a systemd 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
sudo systemctl enable rnsd
sudo systemctl start rnsd
sudo systemctl status rnsd
sudo journalctl -u rnsd -f
Configuration Directory
By default, rnsd looks for configuration in:
- Linux/macOS:
~/.reticulum/
- Windows:
%USERPROFILE%\.reticulum\
Override with --config:
rnsd --config /etc/reticulum
Common Options
-s, --service
-i, --interactive
-v, --verbose
-q, --quiet
--config PATH
--exampleconfig
--version
Logging
When run as a service, logs are written to:
- Linux/macOS:
~/.reticulum/logfile
- Windows:
%USERPROFILE%\.reticulum\logfile
Log levels (0-7):
- 0: Critical only
- 1: Errors
- 2: Warnings
- 3: Notices
- 4: Info (default)
- 5: Verbose
- 6: Debug
- 7: Extreme debug
Configure in config file:
[logging]
loglevel = 4
Common Patterns and Examples
Network Diagnostics Workflow
rnstatus --all --announce-stats
rnpath --table
rnprobe -n 5 lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
rnpath --rates c89b4da064bf66d280f0e4d8abfd9806
rnpath c89b4da064bf66d280f0e4d8abfd9806
Secure File Transfer Setup
rncp --listen --save ~/incoming -a c89b4da064bf66d280f0e4d8abfd9806 -b 300
rncp important.pdf c89b4da064bf66d280f0e4d8abfd9806
rncp --fetch /shared/document.pdf c89b4da064bf66d280f0e4d8abfd9806
Remote System Management
rnx --listen -a c89b4da064bf66d280f0e4d8abfd9806
rnx c89b4da064bf66d280f0e4d8abfd9806 "df -h"
rnx c89b4da064bf66d280f0e4d8abfd9806 "systemctl status rnsd"
rnx --detailed c89b4da064bf66d280f0e4d8abfd9806 "dmesg | tail -50"
rnx --interactive c89b4da064bf66d280f0e4d8abfd9806
Identity and Encryption Workflow
rnid --generate ~/.reticulum/identities/my_id
rnid -i ~/.reticulum/identities/my_id --print-identity
rnid -i ~/.reticulum/identities/my_id --hash myapp.service
rnid -i ~/.reticulum/identities/my_id --announce myapp.service
rnid -i ~/.reticulum/identities/my_id --sign contract.pdf
rnid -i c89b4da064bf66d280f0e4d8abfd9806 --encrypt sensitive.txt
rnid -i ~/.reticulum/identities/my_id --decrypt sensitive.txt.rfe
Monitoring Script
#!/bin/bash
while true; do
echo "=== Reticulum Status at $(date) ==="
STATUS=$(rnstatus --json)
UPTIME=$(echo $STATUS | jq -r '.transport_uptime')
echo "Uptime: $UPTIME seconds"
ACTIVE=$(echo $STATUS | jq '[.interfaces[] | select(.status == true)] | length')
echo "Active interfaces: $ACTIVE"
rnstatus --totals
echo -e "\nKnown paths:"
rnpath --table --json | jq -r '.[] | "\(.hash) - \(.hops) hops"'
sleep 300
done
Best Practices
- Use Authentication: Always authenticate connections in production (rncp, rnx)
- Monitor Announces: Keep track of announce rates to detect issues
- Regular Probing: Use rnprobe to verify critical paths
- Manage Identities Securely: Protect private keys, use separate identities for different purposes
- Log Analysis: Review rnsd logs regularly for anomalies
- Remote Management: Set up remote management identities for distributed networks
- Resource Limits: Use timeouts and size limits in rncp and rnx
- Configuration Backups: Keep backups of identities and configurations
Integration with Applications
All utilities can be integrated into scripts and applications:
import subprocess
import json
result = subprocess.run(['rnstatus', '--json'], capture_output=True, text=True)
status = json.loads(result.stdout)
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")
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")
Troubleshooting
Connection Issues
ps aux | grep rnsd
rnstatus --all
rnpath --table
rnpath c89b4da064bf66d280f0e4d8abfd9806
rnprobe -v lxmf.delivery c89b4da064bf66d280f0e4d8abfd9806
Authentication Failures
rnid -i ~/.reticulum/identities/my_id --print-identity
cat ~/.config/rncp/allowed_identities
rncp --listen --no-auth
Performance Issues
rnstatus --all --announce-stats
rnpath --rates
rnstatus --announce-stats | grep "Held"
rnpath --drop-announces
Conclusion
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.