Tiles
A tile is one panel on a dashboard. It binds a position, an optional execution, and a block.
Fields
| Field | Required | Description |
|---|---|---|
id | yes | Unique tile identifier. |
position | yes | Layout placement (see below). |
block | yes | The renderer and its config. See Blocks. |
title | no | Card header text. |
card | no | Presentation: color, show_header, outline (see below). |
load | no | When the tile executes (see Load behavior). |
exec | no | How the tile gets data. See Execution types. |
query | no | Required when exec.type is athena. |
depends_on | no | Tile ids that must be evaluated before this one. |
triggered_by | no | Tile ids whose change re-runs this tile. |
artifact | no | Per-tile download control (see below). |
controls | no | Per-tile UI controls, e.g. a run button. |
tags | no | Free-form tags for search/filtering. |
Position
"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:
| Mode | Runs when |
|---|---|
load_once | Once on first load (default). |
always | On every dashboard event. |
manual | Only when explicitly triggered (e.g. a run button). |
interval | On a timer (load.interval_ms, or the deployment default). |
input | When a triggered_by input changes. |
load.indicator controls the loading visual: auto (default), none, loading, spinner, or status.
depends_on is about ordering — make sure tile A is evaluated before tile B. triggered_by is about reactivity — re-run tile B when tile A changes. They are independent and can be combined.Run and download controls
Two per-tile controls render in the tile's corner:
{
"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.
controls.run_button— a ▷ button that triggers this tile's execution,
independent of the dashboard refresh. Best paired with load.mode: "manual".
artifact.download— a ⤓ button to download the tile's produced artifact when
one is available. See Async & artifacts.
Card presentation
card controls how the tile's card looks:
"card": { "color": "info", "outline": true, "show_header": true }| Field | Default | Description |
|---|---|---|
color | light | A Bootstrap color token (primary, secondary, success, info, warning, danger, light, dark) or a hex value. |
outline | false | If true, render the card as an outline — colored border and transparent fill — using color, instead of a solid fill. |
show_header | true | Set 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.
Shaleio