# Units

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

Glider documentation · Logic · Web page: https://cgglider.com/docs/units/

Sections of this page: [Overview](https://cgglider.com/docs/units.md) · [Clock](https://cgglider.com/docs/units/clock.md) · [Counter](https://cgglider.com/docs/units/counter.md) · [Ticker](https://cgglider.com/docs/units/ticker.md) · [Formatter](https://cgglider.com/docs/units/formatter.md) · [Watch rule](https://cgglider.com/docs/units/watch-rule.md) · [Data feed](https://cgglider.com/docs/units/poller.md) · [Runtime & gating](https://cgglider.com/docs/units/runtime.md) · [Commands & API](https://cgglider.com/docs/units/commands.md)

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) |

> **Every data reference says where it comes from:** Fields that read data — unit inputs, a ticker or list source array, a control’s data source, a trigger’s data path, Stream Deck feedback — show a prefix: data:: for page data, poller::<feed>:: for a data feed field, sheets:: for a spreadsheet cell or column. Type the prefix to get suggestions. Binding hints and the Binder and Data panel trees use the same prefixes.

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.](https://cgglider.com/docs-shots/units-list.png)
