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.
| Kind | Writes | Row summary looks like |
|---|---|---|
| Clock | A formatted time | down → match.clock (600s) |
| Counter | A number | score.home = 0 (±1) [0…99] |
| Ticker | Array items with optional animation or scrolling | Headlines → current item, workflow or continuous text strip |
| Formatter | One or more derived values | data::score.total = home + away |
| Watch rule | One or more values, on a condition | watch score.home (gt) → alert.show |
| Data feed | Mapped fields from an HTTP poll, a WebSocket or a webhook push | GET 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.