Introduction

datavis is a desktop tool for watching streaming telemetry in real time. It pulls in live channels over several transports, decodes them — Protobuf schemas can be picked up on the fly — and draws them in a workspace of panels you arrange yourself. You can record a session and scrub back through it later through the very same panels.

It is written in Rust on top of egui.

What it does

  • Reads live data from ZeroMQ (Protobuf), MQTT, WebSocket (InfluxDB line protocol), and organisation-specific transports through an external bridge adapter. Protobuf payloads are decoded at runtime with prost-reflect, so you do not have to compile schemas in ahead of time.
  • Arranges panels by carving the window into tiles and dragging channels out of the sidebar onto whichever panel you want. Select a few at once and drop them together.
  • Ships a handful of panel types: waveform, numeric readout, gauge, FFT spectrum, XY scatter, state graph, status, and a text log.
  • Records to MCAP — including any Protobuf schemas it discovered — and plays the file back through the same panels. Replay and live look identical because panels never know which one they are getting.
  • Runs Python scripts (numba-compiled) to derive new channels from existing ones, live and during replay.
  • Reads its channels and layout from config.toml. A demo source is built in, so you can poke at it without wiring up anything real.

The core idea

One trait — ChannelStore — is the seam that hides live-vs-replay from everything above it. Panels read samples through that trait and never learn which mode they are in. Recording, playback, and the larger-than-RAM lazy loader all sit behind the same interface. This design choice recurs throughout the guide; when a feature "just works" in both live and replay, this is why.

How to read this guide

  • Getting Started gets the app running in under a minute using the demo source.
  • Configuration covers config.toml: channels, defaults, and the panel layout.
  • Data Sources covers each transport and how to wire it up.
  • Visualising covers panels, zoom, and cursors.
  • Recording & Playback covers MCAP capture, size-based auto-split, and scrubbing recordings back — including files larger than RAM.
  • Scripting covers deriving channels in Python.
  • Reference is the terse lookup: CLI flags, every config.toml section, and the internal architecture.

A note on provenance. Large parts of this project — this guide included — were written with an AI assistant. Expect confident-looking code that has not met every edge case. Check anything here you would not take on faith.