Skip to content

Observables

An observable is a named signal that the simulator records and makes available for plotting, logging, or post-processing. Every trace on the scope panel is backed by an observable; every column in the result CSV corresponds to one.

Three ways to declare an observable

  1. Label a wire. Click on a wire and give it a name. The label becomes an observable that emits the signal flowing through it.
  2. Probe a component's built-in output. Many components expose measurements (a capacitor's branch current, a meter's reading) that you can turn on via a checkbox in the properties dialog. The name you give the measurement becomes the observable id.
  3. Define one explicitly. Open the observables panel (in the main menu) and add an entry directly. Useful when you want to alias an automatically-generated id to something friendlier.

Naming rules

  • Names must be unique across the whole circuit. The validator flags duplicates and refuses to run.
  • Names live in a single flat namespace shared with From / GoTo signal routing. Pick something descriptive (e.g. v_bus_3 instead of v1) — when your circuit grows past a dozen signals you'll thank yourself.

How observables flow through the system

When you click Run:

  1. The front-end exports the circuit to a netlist. Every observable gets a stable id and a binding to either a wire signal, a named port, or a component-internal measurement.
  2. The simulator's scheduler routes those signals into a CSV writer AND into the streaming-results channel that the scope reads from.
  3. As chunks arrive, the scope panel updates in real time. When the run finishes, the full CSV is available for download.

See also

Released under the MIT License.