Panels & Layout
The panel layout lives in config.toml under [screens.*]. Unlike the channel
tables, this section is GUI-managed: datavis writes it back as you rearrange
panels and on exit. You can hand-edit it, but the app owns its formatting.
Screens
A screen is one named free-canvas workspace of panels. Multiple screens are switchable from the toolbar. Each screen carries its list of panels, each with its own canvas position:
default_window_s = 10.0
[screens.main]
[[screens.main.panels]]
type = "waveform"
frame = [0.0, 0.0, 0.5, 0.4]
channels = ["load/ch0", "load/ch7", "scripts/rms"]
cursors = false
dots = false
[[screens.main.panels]]
type = "state_graph"
channel = "load/state0"
frame
Each panel carries its canvas geometry as frame = [x, y, w, h], four numbers
in 0..1 normalized to the screen area (x/y = top-left corner, w/h =
size). Panels are placed freely, never overlap, and scale with the window.
Omit frame and datavis auto-arranges the screen's panels into a grid on load,
then writes real frames back as you move them.
[[screens.<name>.panels]]
One table per panel. Common keys:
type— the panel type (waveform,gauge,state_graph,status,spectrum,numeric,xy_scatter,log). See Panel Types.channels— a list of channel names, for multi-channel panels (waveform, FFT).channel— a single channel name, for single-channel panels (gauge, status, state graph).- Panel-specific keys — e.g. waveform's
cursorsanddots, status'sstates, gauge's min/max. Each panel type documents its own keys. style(gauge) — the gauge shape:bar(default, horizontal fill),vertical(bottom-up bar),led(segmented VU meter), orarc(270° dial). Chosen from the panel's settings; omitted from config whenbar.colors(waveform) — an optional{ "channel.name" = "#rrggbb" }table of per-channel line-color overrides. Set from the legend's right-click menu; channels without an entry cycle through the Catppuccin accent palette.
Panels resolve channel names to ids through the channel registry at load. A name that does not resolve, or a channel of the wrong type for the panel, is shown as an inline error — never a crash.
Building a layout in the GUI
- Add a panel from the toolbar, or right-click empty canvas → Add panel here.
- Choose a panel type from the picker.
- Drag a panel by its title bar to move it — or hold Ctrl (⌘ on macOS) and drag anywhere in the panel. Drag the bottom-right grip to resize. Panels snap to each other's edges and sizes and block on contact, so they never overlap.
- Right-click a panel (title bar or body) for its menu: Settings, Reset zoom, and Remove panel. The title-bar gear and ✕ do the same. The dot in the title bar tracks data freshness — green when samples arrive at the channel's usual cadence, amber when they slow, red when they stop.
- Drag channels from the sidebar onto a panel. Select several and drop them together onto a multi-channel panel.
- The arrangement is saved back to
config.tomlautomatically.
Time window
default_window_s (top level) sets the visible span new time-series panels open
with. Zooming a panel overrides it locally; see Zooming & Cursors.