Tiles

A tile is one panel on a dashboard. It binds a position, an optional execution, and a block.

Fields

FieldRequiredDescription
idyesUnique tile identifier.
positionyesLayout placement (see below).
blockyesThe renderer and its config. See Blocks.
titlenoCard header text.
cardnoPresentation: color, show_header, outline (see below).
loadnoWhen the tile executes (see Load behavior).
execnoHow the tile gets data. See Execution types.
querynoRequired when exec.type is athena.
depends_onnoTile ids that must be evaluated before this one. Reserved — not yet enforced by the runtime (see note below).
triggered_bynoTile ids whose change re-runs this tile.
artifactnoPer-tile download control (see below).
controlsnoPer-tile UI controls, e.g. a run button.
placeholdernoMarkdown shown in the tile until its first result renders, e.g. "Press ▷ to provision." Use it on manual tiles and tiles that wait for input, so an empty card explains itself. (Schema 1.3.0.)
tagsnoFree-form tags for search/filtering.

Position

json
"position": { "row": 0, "order": 1, "width": 9 }

Tiles are laid out on a 12-column grid. row groups tiles onto a row, order sorts within the row, and width is the Bootstrap column width (1–12).

Load behavior

load.mode controls when a tile runs:

ModeRuns when
load_onceOnce on first load (default).
alwaysOn every dashboard event.
manualOnly when explicitly triggered (e.g. a run button).
intervalOn a timer (load.interval_ms, or the deployment default).
inputWhen a triggered_by input changes.

load.indicator controls the loading visual: auto (default), none, loading, spinner, or status.

Note
triggered_by is about reactivity — re-run tile B when tile A changes. depends_on is about ordering (evaluate tile A before tile B) but is not yet enforced by the runtime. You don't need it for parameterised tiles: input tiles' default values are seeded when the dashboard loads, so a filtered tile runs with its defaults on first load and re-runs via triggered_by when the input changes. A tile whose input value isn't available yet shows "Waiting for input…" rather than erroring.

Run and download controls

Two per-tile controls render in the tile's corner:

json
{
  "controls": { "run_button": true },
  "artifact": { "download": true, "label": "⤓" }
}

By default these appear automatically on tiles that execute — tiles with an exec (athena, lambda, cache) that are not input/control blocks — since those are the only tiles where re-running or downloading a result is meaningful. Static, markdown, and input tiles show no buttons. Set either field explicitly to override: true to force a button on, false to suppress it on an exec tile.

Card presentation

card controls how the tile's card looks:

json
"card": { "color": "info", "outline": true, "show_header": true }
FieldDefaultDescription
colorlightA Bootstrap color token (primary, secondary, success, info, warning, danger, light, dark) or a hex value.
outlinefalseIf true, render the card as an outline — colored border and transparent fill — using color, instead of a solid fill.
show_headertrueSet false to suppress the header even when title is set.

outline pairs with color: {"color": "info", "outline": true} gives a tile with an info-colored border and no fill, useful for de-emphasizing a panel or grouping tiles visually without heavy blocks of color.