config.toml Reference

One config.toml in the working directory holds every section below. Each concern parses the whole file and ignores sections it does not own, so sections are optional and order-independent. This page is the terse lookup; each section has a fuller chapter linked from its heading.

Top level

default_window_s = 10.0   # default visible time span for time-series panels

[channels."name"] — Channels

FieldRequiredMeaning
topicyesSource topic/subject
proto_pathproto sourcesValue field path in the message
ts_pathproto sourcesNanosecond timestamp field path
type / sample_typeyesfloat/f64, int/i64, bool, text
unitnoDisplay unit
colorno#rrggbb
max_ratenoExpected Hz; sizes the ring (falls back to [defaults])
history_snoSeconds retained (falls back to [defaults])
eu_scale / eu_offsetnoRaw → engineering-unit scaling on ingest
max_linestext onlyMax retained log lines

Bridge channels use topic + sample_type only (no proto_path / ts_path).

[defaults] — Defaults

[defaults]
max_rate  = 100000    # fallback Hz for channels omitting it
history_s = 5.0       # fallback seconds for channels omitting it

Only these two keys; per-channel values win. Omit for built-in defaults.

[screens.*] — Panels & Layout

GUI-managed. [screens.<name>] carries a list of [[screens.<name>.panels]] tables, each with a type, a frame = [x, y, w, h] (normalized canvas position), and either a channel or channels plus panel-specific keys.

[[sources.bridge]] — Bridge Adapters

[[sources.bridge]]
name    = "vendor-x"
command = "/opt/vendor-x/adapter"
args    = ["--device", "/dev/tty0"]   # optional

One subprocess per entry. Its channels are declared as normal [channels.*] with topic + sample_type.

[scripts] / [[scripts.instances]] — Scripting

[scripts]
dir = "scripts"          # scripts dir, relative to config.toml
window_s = 10.0          # input window seconds

[[scripts.instances]]
id = "ch1_rms"
script = "sine_rms"
inputs  = ["load/ch0"]
outputs = [{ name = "scripts/rms", type = "float", unit = "" }]
enabled = true

inputs / outputs are optional (fall back to the script's declared defaults).

[recording] — Auto-Split

[recording]
max_file_mb = 512   # auto-split at this on-disk size; omit or 0 = single file