> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hyperwisor.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Dynamic Repeater

> Repeat a template per data item — a data-driven list or grid.

<Info>
  **Category:** Display · **Reads data:** yes · **Sends commands:** no
</Info>

## Mental model

A **Dynamic Repeater is a mail merge.** You define one template, and it stamps a
copy for every item in your data — a list or grid that grows with the data.

## When to use it

* A card per device, per record, per reading
* Any repeating layout driven by a dataset

## Settings

### General / Data

* **Widget Title / ID** · the data source to repeat over

### Style

* **Auto-generate template** — build a template from the data shape
* **Columns** — grid width
* Container / button / divider colors
* **Empty text** · **error text** — placeholder states

## Script API example

The same interactions from a [dashboard script](/script/overview):

```js theme={null}
widget.on('deviceCards', 'dataload', async () => {
  const rows = await db.query('devices', {}, { limit: 100 });
  widget.setText('countLabel', rows.length + ' devices');
});
```

<Card title="Table" icon="table" href="/dashboard/widgets/table">
  The same data as a grid of rows.
</Card>
