Skip to main content
Version: 12 - TBD

Dashboards

Dashboards are configurable layout resources (DASHBOARD) that render an interactive grid of widgets in the Engine UI. Each dashboard stores its layout in the value field as YAML or JSON.

Use dashboards for operational overviews: pipeline status, installation health, runbooks, and links into detailed record views.

Viewing a dashboard

Open a dashboard record and choose View in the action menu, or navigate to:

/dashboard?id=<dashboard-id>&view

You can also use the record name:

/dashboard?name=<dashboard-name>&view

Configuration shape

The value field describes the grid and widgets:

version: 1
grid:
columns: 12 # grid columns (default: 12)
gap: 12 # pixel gap between cells (default: 16)
rowHeight: 80 # pixel height of one grid row (default: 80)
widgets:
- uid: unique-widget-id
type: markdown # widget type — see below
title: Optional heading
layout:
col: 1 # 1-based start column
row: 1 # 1-based start row
colSpan: 6 # columns to span
rowSpan: 4 # rows to span
config: { ... } # type-specific options

Unknown widget types show a fallback message instead of breaking the whole dashboard.

Widget types

markdown

Static markdown (notes, runbook links, documentation).

type: markdown
config:
text: |
## Runbook
See [Executions monitor](execution-live-monitor) for details.

stat_tile

Count of records matching an optional filter. Uses the list API count field only (no rows transferred). Click the tile to open Advanced search with the same record type and filter applied.

type: stat_tile
config:
record_type: FLOW
filter:
field: project_id
op: eq
value: "<project-uuid>"
live: false # optional: re-poll every 10s

single_record

Detail card for the first record matching filter and sort (limit: 1).

type: single_record
config:
record_type: FLOW
order: "-modified_at"
filter: { field: name, op: like, value: "pipeline%" }

record_list

Live list of records (default limit 10).

type: record_list
config:
record_type: CUSTOM_OBJECT
order: "-created_at"
limit: 10
live: true

status_strip

Compact provisioning-state list for custom objects.

type: status_strip
config:
record_type: CUSTOM_OBJECT
order: "-created_at"
limit: 10
live: true

latest_n_list

Last N records per distinct field value, using the list API partition_by parameter.

type: latest_n_list
config:
record_type: EXECUTION
order: "-created_at"
limit: 20 # max number of groups
partition_by:
field: type
limit: 1 # rows per group (shorthand: top-level `n`)
order: "-created_at"

action_button

Runs a flow on click. With navigate_to_execution: true, the dashboard navigates to the created execution in the same tab. When navigate_to_execution is false (the default), the widget shows a link below the button to open the latest execution in a new tab, together with a live “time ago” label for when it was started.

type: action_button
config:
label: Deploy
flow_id: "<flow-uuid>"
navigate_to_execution: true

execution_output

Shows status and output (or recent logs) of a specific execution; polls while running when live is true.

type: execution_output
config:
execution_id: "<execution-uuid>"
live: true
show: output # or "logs"
log_limit: 20

relation_graph

Embeds the object template / custom object relation canvas in read-only form, scoped by filters instead of loading the full workspace graph.

Two modes:

modeShows
object_templateObject templates and reference edges between them
custom_objectCustom objects grouped by template, with cross-reference edges

Object-template graph (templates in a project):

type: relation_graph
title: Template references
layout: { col: 1, colSpan: 12, row: 1, rowSpan: 6 }
config:
mode: object_template
filter:
field: project_id
op: eq
value: "<project-uuid>"

Custom-object graph (latest object per template type in a bundle):

type: relation_graph
title: Latest installations by type
layout: { col: 1, colSpan: 12, row: 1, rowSpan: 8 }
config:
mode: custom_object
filter:
field: bundle_id
op: eq
value: "<bundle-uuid>"
partition_by:
field: object_template_id
limit: 1
order: "-created_at"
limit: 50 # max distinct object templates (groups)

filter uses the same JSON filter grammar as Advanced Search and the REST/GraphQL list APIs. For custom_object mode you can also set custom_object_filter (alias for filter when seeding from custom objects).

With partition_by, the widget loads the most recent custom object per distinct field value (typically object_template_id), then renders reference relationships between those objects and related templates.

Filters

Filters are comparison objects or boolean combinations:

# equality
filter: { field: bundle_id, op: eq, value: "<uuid>" }

# AND
filter:
and:
- { field: bundle_id, op: eq, value: "<uuid>" }
- { field: provisioning_state, op: eq, value: PROVISIONED }

Supported operators include eq, neq, like, notlike, lt, gt, lte, gte, set, unset, in, and notin.