Reference

Dashboard Spec

The full Perses-compatible dashboard file format Everr validates and renders.

A dashboard file is a Perses-style resource with three top-level keys. Everr validates it on everr apply and again on read; the whole document is stored verbatim, so unknown Perses fields — at the top level or inside spec — survive a read/apply round-trip unchanged. (The folder path is the one piece of state kept outside the document: it's derived from the file's directory, not declared in the file.)

kind: Dashboard
metadata:
  name: <slug>
  project: platform        # optional; defaults to "default"
spec:
  { ... }
KeyTypeNotes
kind"Dashboard"Selects the reconciler. Required.
metadata.namestringThe slug — identity within its project, and the URL segment. Set it explicitly; the file is named <slug>.dashboard.yaml to match. See Slug rules.
metadata.projectstringGroups dashboards into a named set. Optional; defaults to default. Identity is project + slug, so two projects can share the same slug without colliding.
specobjectThe dashboard contents, below.

spec

FieldTypeRequiredNotes
panelsmap<string, Panel>yesPanel key → panel. Keys are referenced by layouts.
layouts[Grid]yesPlacement of panels on the grid.
displayDisplaynoDashboard title / description.
variables[Variable]noTemplate variables.
durationstringnoDefault time-range window (e.g. 1h, 24h). Seeds the time range.
refreshIntervalstringnoDefault auto-refresh (e.g. 30s, 1m).
datasourcesmap<string, object>noAccepted for Perses compatibility; no runtime effect.

Display

display:
  name: API Latency        # optional
  description: ...         # optional

Panel

<panel-key>:
  kind: Panel
  spec:
    display: { name: ..., description: ... }   # description optional
    plugin:
      kind: TimeSeriesChart | Table | StatChart
      spec: { ... }                            # see Visualizations reference
    queries:                                    # optional
      - kind: ClickHouseSQL
        spec:
          plugin:
            kind: ClickHouseSQL
            spec:
              query: "SELECT ..."
FieldTypeNotes
kind"Panel"Required.
spec.displayDisplayname shown as the panel title.
spec.plugin.kindstringVisualization kind. See Visualizations.
spec.plugin.specobjectVisualization options.
spec.queries[PanelQuery]Optional list. Each query's SQL is at spec.plugin.spec.query; query kind is ClickHouseSQL.

Query parameters

Every dashboard query — panel queries and variable options queries alike — is run with these ClickHouse parameters bound. They are always provided (referencing them never errors, and unreferenced parameters are ignored), but they are not injected into the SQL — the query must reference them. Usage guide: Time range parameters.

ParameterValue
{from:String} / {to:String}The dashboard's selected time range — UTC datetimes in YYYY-MM-DD HH:MM:SS.mmm form (millisecond precision; compare them directly rather than assuming whole seconds).
{step:UInt32}Adaptive bucket width in seconds: the range divided by a ~500-point budget, snapped up to the next clock-aligned width — 1/2/5/10/15/20/30s, 1/2/5/10/15/30m, 1/2/3/6/12h, 1d, then whole days.

Grid layout

layouts:
  - kind: Grid
    spec:
      display: { title: ..., collapse: { open: true } }   # optional
      items:
        - x: 0
          y: 0
          width: 12
          height: 8
          content: { $ref: "#/spec/panels/<panel-key>" }
FieldTypeNotes
kind"Grid"Required.
spec.items[].x / .ynumberCell position. The grid is 24 columns wide.
spec.items[].width / .heightnumberCell span.
spec.items[].content.$refstring#/spec/panels/<panel-key>. A panel renders only if referenced here.

Variables

A discriminated union on kind. Full guide: Variables.

TextVariable:

- kind: TextVariable
  spec:
    name: search
    value: ""
    display: { name: Search, hidden: false }   # optional
    constant: false                            # optional

ListVariable:

- kind: ListVariable
  spec:
    name: service
    display: { name: Service, hidden: false }   # optional
    defaultValue: ""        # string, or [..] when allowMultiple   (optional)
    allowMultiple: false    # optional
    allowAllValue: false    # optional
    customAllValue: ""      # optional; substituted when "All" is selected
    sort: none              # optional; see below
    capturingRegexp: ""     # optional; accepted, no runtime effect
    plugin:
      kind: StaticListVariable | ClickHouseSQLVariable
      spec:
        values: [a, b]      # StaticListVariable
        # query: "SELECT ..."   # ClickHouseSQLVariable (first column = options)

sort accepts: none, alphabetical-asc, alphabetical-desc, numerical-asc, numerical-desc, alphabetical-ci-asc, alphabetical-ci-desc.

Slug rules

The slug (from metadata.name; set it explicitly under the <slug>.dashboard.yaml naming convention) must:

  • use only lowercase letters, digits, and hyphens,
  • not start or end with a hyphen,
  • be 1–200 characters.

A slug must be unique within a project; applying two files that resolve to the same slug within the same project fails.

Time defaults

When a dashboard defines duration and/or refreshInterval, Everr seeds the URL time-range params from them once per visit if they're absent. Explicit URL params always win, so shared links keep their exact range.

Compatibility boundaries

The format mirrors Perses so files stay portable, but a few fields are accepted without runtime behavior in Everr today: datasources, variable capturingRegexp, and variable chaining/aliases (see Variables → Not supported). The only query plugin executed is ClickHouseSQL.