Skip to main content

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:

SectionPurpose
[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

KeyDefaultDescription
enable_transportNoMake this node a transport router. Forwards traffic and announces for other nodes. Required for hubs and gateways.
share_instanceYesRun 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_namedefaultName of the shared-instance socket. Multiple daemons on one host need distinct names.
shared_instance_port37428Local shared-instance data port. Remote-control RPC uses separate control settings.
enable_remote_managementNoAllow remote RPC management from listed identities.
remote_management_allowed(none)Comma-separated identity hashes permitted to manage this node.
respond_to_probesNoReply to network probes used by rnprobe-rs for diagnostics.
panic_on_interface_errorNoHalt 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)

KeyDescription
typeTCPClientInterface, TCPServerInterface, UDPInterface, AutoInterface, RNodeInterface, RNodeMultiInterface, SerialInterface, KISSInterface, I2PInterface, etc.
enabled / interface_enabledyes / no or True / False. This docs set uses enabled = yes in examples.
modefull (default), access_point, roaming, boundary, gateway. Controls how announces are rebroadcast.
network_nameIFAC network name. Interfaces with different names cannot exchange traffic on this link.
passphraseIFAC passphrase. Combined with network_name to authenticate frames.
ifac_sizeAdvanced IFAC tag length. Leave unset for portable configs; explicit unit handling has differed between implementations.
announce_capMax share of bandwidth used for announces. Default 2 (percent).
announce_rate_targetTarget rate for rebroadcasting received announces on this interface.
bitrateLink bitrate in bps. Used for airtime accounting on lossy or rate-limited links.

TCP keys (TCPClientInterface, TCPServerInterface)

KeyUsed byDescription
target_hostClientHostname or IP of the remote peer.
target_portClientTCP port on the remote peer.
listen_ipServerLocal bind address. 0.0.0.0 for all interfaces.
listen_portServerLocal bind port.

RNode keys (RNodeInterface, LoRa radios)

KeyDescription
portSerial device, e.g. /dev/ttyUSB0 or COM3, or a TCP-backed RNode stream such as tcp://192.168.1.50:7633.
frequencyCentre frequency in Hz. Must match other nodes on the link and local regulations.
bandwidthLoRa bandwidth in Hz (e.g. 125000, 250000).
txpowerTransmit power in dBm.
spreadingfactorLoRa SF, 5-12. Higher = longer range, lower throughput.
codingrateLoRa coding rate, 5-8 (means 4/5 to 4/8).
airtime_limit_shortPercent airtime cap over a short window. Used by RNodeMulti subinterfaces in the current Rust implementation.
airtime_limit_longPercent 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]

KeyDescription
enable_nodeEnable propagation node duties (store-and-forward for offline peers).
node_nameDisplay name announced to peers.
announce_intervalMinutes between propagation-node announces.
announce_at_startAnnounce the propagation node when the daemon starts.
autopeerAutomatically peer with discovered propagation nodes.
autopeer_maxdepthMaximum autopeering depth.
message_storage_limitMaximum disk used for stored messages, in megabytes.
propagation_message_max_accepted_sizeLargest single propagated message accepted from peers, in kilobytes.
propagation_sync_max_accepted_sizeLargest accepted propagation sync transfer, in kilobytes.
propagation_stamp_cost_targetTarget stamp cost for propagated messages.
propagation_stamp_cost_flexibilityAccepted variance around the target stamp cost.
peering_costStamp cost used for peering.
remote_peering_cost_maxMaximum accepted remote peering cost.
max_peersMaximum propagation peers.
prioritise_destinationsComma-separated destination hashes whose messages are kept first when storage fills.
static_peersComma-separated peer destination hashes to sync with on a fixed schedule.
from_static_onlyOnly accept propagation from configured static peers.
auth_requiredRequire authorized/control-listed peers for propagation duties.

[lxmf]

KeyDescription
display_nameDisplay name for this LXMF peer.
announce_at_startAnnounce the local LXMF destination when the daemon starts.
announce_intervalMinutes between local LXMF peer announces.
delivery_transfer_max_accepted_sizeLargest direct delivery transfer accepted, in kilobytes.
on_inboundOptional command hook for inbound messages. Treat this as security-sensitive.

[logging]

KeyDescription
loglevelLog 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.

ToolPath
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.