ratspeak-docs/docs/reference/configuration-reference.md
har00ga eaaf852bd9 Initial commit: Ratspeak documentation site
Docusaurus-based docs site with ratspeak.org-inspired theme (warm cream/burnt orange palette, Outfit typography, dark mode default). Documentation structured using the Diátaxis framework with Getting Started, Using Ratspeak, Concepts, Networking, Hardware, Deployment, Products, and Reference sections.
2026-06-04 17:59:07 -04:00

10 KiB

sidebar_position
1

Configuration reference

Reference for the configuration files relevant to Ratspeak users and operators: the Reticulum daemon config, the LXMF Offline Inbox/propagation node config, and where Ratspeak app settings live.

Reticulum config (~/.rsReticulum/config or ~/.reticulum/config)

INI format. Common config files are read by Reticulum-compatible daemons such as rnsd-rs. For portable configs, set enabled = yes or enabled = no explicitly on every interface.

rsReticulum defaults to rsReticulum-specific paths such as ~/.rsReticulum/config, with /etc/rsReticulum/config or ~/.config/rsReticulum/config taking precedence on Unix-like systems if present. Point --config at another Reticulum-compatible directory only when shared local state is intentional.

Three top-level sections:

Section Purpose
[reticulum] Daemon-wide flags: transport role, shared instance, RPC.
[logging] loglevel 0-7 (0 = quiet, 7 = extreme).
[interfaces] One sub-block per interface (TCP, RNode, Auto, etc.).

The file is created with sensible defaults on first run. Edit, then restart the daemon.

[reticulum] block

Key Default Description
enable_transport No Make this node a transport router. Forwards traffic and announces for other nodes. Required for hubs and gateways.
share_instance Yes Run as a shared instance so other tools on this host can attach to this daemon over a local socket instead of opening their own interfaces.
instance_name default Name of the shared-instance socket. Multiple daemons on one host need distinct names.
shared_instance_port 37428 Local shared-instance data port. Remote-control RPC uses separate control settings.
enable_remote_management No Allow remote RPC management from listed identities.
remote_management_allowed (none) Comma-separated identity hashes permitted to manage this node.
respond_to_probes No Reply to network probes used by rnprobe-rs for diagnostics.
panic_on_interface_error No Halt the daemon if an interface raises a fatal error (otherwise log and continue).

[interfaces] block

Each interface is declared as a sub-block. The block name is a label; type selects the driver.

[[Hub Uplink]]
    type = TCPClientInterface
    target_host = hub.example.org
    target_port = 4242
    enabled = yes

Common keys (any interface type)

Key Description
type TCPClientInterface, TCPServerInterface, UDPInterface, AutoInterface, RNodeInterface, RNodeMultiInterface, SerialInterface, KISSInterface, I2PInterface, etc.
enabled / interface_enabled yes / no or True / False. This docs set uses enabled = yes in examples.
mode full (default), access_point, roaming, boundary, gateway. Controls how announces are rebroadcast.
network_name IFAC network name. Interfaces with different names cannot exchange traffic on this link.
passphrase IFAC passphrase. Combined with network_name to authenticate frames.
ifac_size Advanced IFAC tag length. Leave unset for portable configs; explicit unit handling has differed between implementations.
announce_cap Max share of bandwidth used for announces. Default 2 (percent).
announce_rate_target Target rate for rebroadcasting received announces on this interface.
bitrate Link bitrate in bps. Used for airtime accounting on lossy or rate-limited links.

TCP keys (TCPClientInterface, TCPServerInterface)

Key Used by Description
target_host Client Hostname or IP of the remote peer.
target_port Client TCP port on the remote peer.
listen_ip Server Local bind address. 0.0.0.0 for all interfaces.
listen_port Server Local bind port.

RNode keys (RNodeInterface, LoRa radios)

Key Description
port Serial device, e.g. /dev/ttyUSB0 or COM3, or a TCP-backed RNode stream such as tcp://192.168.1.50:7633.
frequency Centre frequency in Hz. Must match other nodes on the link and local regulations.
bandwidth LoRa bandwidth in Hz (e.g. 125000, 250000).
txpower Transmit power in dBm.
spreadingfactor LoRa SF, 5-12. Higher = longer range, lower throughput.
codingrate LoRa coding rate, 5-8 (means 4/5 to 4/8).
airtime_limit_short Percent airtime cap over a short window. Used by RNodeMulti subinterfaces in the current Rust implementation.
airtime_limit_long Percent airtime cap over a long window. Used by RNodeMulti subinterfaces in the current Rust implementation.

For RNode over TCP, keep type = RNodeInterface and set port to the radio endpoint:

[[Field TCP RNode]]
    type = RNodeInterface
    port = tcp://192.168.1.50:7633
    frequency = 915000000
    bandwidth = 250000
    txpower = 22
    spreadingfactor = 11
    codingrate = 5

This is different from TCPClientInterface. A TCP client connects to another Reticulum node or hub; an RNode TCP endpoint connects to the radio control stream and still transmits over LoRa.

AutoInterface keys

AutoInterface discovers peers on the local LAN over IPv6 multicast. Useful keys: group_id (separate logical groups on the same LAN), discovery_scope (link, admin, site, organisation, global), devices (whitelist of OS interface names), ignored_devices (blacklist).

LXMF / lxmd-rs config

INI format. Read by lxmd-rs, the LXMF propagation node daemon. Ratspeak calls the client-facing feature Offline Inbox, but LXMF calls the server role a propagation node. Only operators running a propagation node need this file; client apps do not. Use lxmd-rs --config <dir> for an explicit config directory.

[propagation]

Key Description
enable_node Enable propagation node duties (store-and-forward for offline peers).
node_name Display name announced to peers.
announce_interval Minutes between propagation-node announces.
announce_at_start Announce the propagation node when the daemon starts.
autopeer Automatically peer with discovered propagation nodes.
autopeer_maxdepth Maximum autopeering depth.
message_storage_limit Maximum disk used for stored messages, in megabytes.
propagation_message_max_accepted_size Largest single propagated message accepted from peers, in kilobytes.
propagation_sync_max_accepted_size Largest accepted propagation sync transfer, in kilobytes.
propagation_stamp_cost_target Target stamp cost for propagated messages.
propagation_stamp_cost_flexibility Accepted variance around the target stamp cost.
peering_cost Stamp cost used for peering.
remote_peering_cost_max Maximum accepted remote peering cost.
max_peers Maximum propagation peers.
prioritise_destinations Comma-separated destination hashes whose messages are kept first when storage fills.
static_peers Comma-separated peer destination hashes to sync with on a fixed schedule.
from_static_only Only accept propagation from configured static peers.
auth_required Require authorized/control-listed peers for propagation duties.

[lxmf]

Key Description
display_name Display name for this LXMF peer.
announce_at_start Announce the local LXMF destination when the daemon starts.
announce_interval Minutes between local LXMF peer announces.
delivery_transfer_max_accepted_size Largest direct delivery transfer accepted, in kilobytes.
on_inbound Optional command hook for inbound messages. Treat this as security-sensitive.

[logging]

Key Description
loglevel Log verbosity, 0-7.

Ratspeak app settings

Ratspeak does not use a hand-edited config file for app preferences. Display name, theme, auto-announce interval, Offline Inbox mode/manual node hash, notification preferences, and most UI state live in the SQLite database next to the app data and are managed through the Settings view.

Network interface definitions are written to the app-managed Reticulum config at .ratspeak/reticulum/config under the Ratspeak data directory, not to the user's system-wide ~/.reticulum/config. Set RATSPEAK_RNS_CONFIG_DIR only when you intentionally want Ratspeak to use a different Reticulum config directory.

Transport Mode is stored as the app setting transport_mode with one of three values: off, on, or auto. The app presents these as OFF, ON, and AUTO. OFF is the default. ON maps to Reticulum enable_transport = True when the local runtime can perform forwarding. AUTO is an app policy: it enables only when there is an enabled non-LoRa interface, no enabled LoRa/RNode interface, and the current network is Wi-Fi, Ethernet, or an unknown desktop network type. Shared-instance clients do not perform local Transport Mode duties; the shared instance handles that role.

To reset, quit Ratspeak and remove the app data directory, then relaunch. The database will be recreated with defaults and a fresh identity.

The Reticulum stack inside Ratspeak uses .ratspeak/reticulum/config and app-private shared-instance ports 37430/37431, separate from standalone rsReticulum defaults such as ~/.rsReticulum/config and ports 37428/37429. Two daemons can coexist on one host without conflict as long as their interface ports differ.

Identity files

Identities are not configuration — they are 64-byte binary keys (32-byte X25519 private key + 32-byte Ed25519 seed). They cannot be edited in a text editor and must never be committed to source control or shared.

Tool Path
Ratspeak app <OS data dir>/org.ratspeak.desktop/.ratspeak/identities/<hash>/identity (see Install & Platform Setup for the per-OS data directory)
Rust rnsd-rs ~/.rsReticulum/storage/ by default, or the directory passed with --config.
Rust lxmd-rs ~/.rsLXMF/identity by default, with legacy .lxmf/identity fallback in rsLXMF, or the directory passed with --config.

Back up the raw 64-byte file to preserve an identity across machines. Restoring is a file copy — no import step.