Units

Declarative behaviours — clocks, counters, tickers, formatters, watch rules and data feeds — that write to the store.

What a unit is, and why there is no scripting.

A unit is data, not code: a named, typed behaviour with a config, a declared set of store paths it writes, a runtime (client or server), and an enabled flag. The engine runs it. Because the writes are declared up front, the system can gate them — one writer per path — and report on wiring before anything reaches air.

KindWritesRow summary looks like
ClockA formatted timedown → match.clock (600s)
CounterA numberscore.home = 0 (±1) [0…99]
TickerArray items with optional animation or scrollingHeadlines → current item, workflow or continuous text strip
FormatterOne or more derived valuesdata::score.total = home + away
Watch ruleOne or more values, on a conditionwatch score.home (gt) → alert.show
Data feedMapped fields from an HTTP poll, a WebSocket or a webhook pushGET https://… every 1000ms → 3 field(s)

Add a unit from the Units tab by picking a kind; every kind starts from a known-good blank config, so a new unit is valid from the moment it exists. Each row shows a status dot: green ok, amber degraded, grey disabled.

The Units tab with several units.
The Units tab with several units.