Panel types

The panel types a dashboard manifest can declare today, and what each one is for.

Two panel types are registered today. A dashboard manifest names one of these as spec.panels.<name>.spec.plugin.kind; anything else renders a clearly labelled "unsupported panel type" state in its own frame rather than breaking the rest of the dashboard.

Panel typeRendererUse when
TimeSeriesChartuPlotYou want a value over time: request rate, latency, error rate, an uptime trend. This is the panel type every worked example in this section uses.
StatChartuPlotYou want the single most recent value for one query, e.g. "current error rate," with no history on screen.

TimeSeriesChart

The primary panel type, and the only one this documentation's own examples use. It draws one or more series against a shared time axis, resolved from the panel's declared Up0TelemetryQuery queries.

No legend or tooltip yet

A TimeSeriesChart panel draws its axes and its lines, but nothing yet tells you which line is which beyond the panel's own title, and hovering a point shows no value. Both are filed and open (tracked issue #1415) rather than silently missing. If a panel needs more than one series to be readable, give each its own panel for now.

Per-panel states, each contained to that panel's own frame:

  • Loading shows a skeleton in place of the chart.
  • Error distinguishes a metric your organization has never emitted from the telemetry store being unreachable, with a retry that only re-runs that one panel.
  • Empty ("No data in this range") is visually distinct from an error, and keeps the panel's frame rather than collapsing to nothing.

One panel failing, at load or after, never takes the rest of the dashboard down with it.

StatChart

A minimal panel type: it resolves one query to a single number and shows it. It exists to prove a second panel type needs no change to the panel or chart registries, not as a finished "big number" widget. There is no sparkline, no threshold coloring, and no unit formatting beyond an optional literal unit string in the manifest. Reach for TimeSeriesChart for anything where the trend matters, which today is nearly everything.

What renders the data

Panels do not draw directly. A panel type resolves its query results into a chart-library-neutral shape, and a separate chart renderer registry picks what actually draws it. Two renderers are registered:

  • uPlot is the default for line/area/bar/scatter charts, comfortable to a documented ceiling well past the low thousands of points that pushed an earlier Recharts-based prototype out. It is what both panel types above use, and the only renderer currently exercised by any real panel.
  • Apache ECharts is registered for treemap/sunburst/sankey, none of which either panel type above requests yet. It is present so a future panel type (an incidents table, for instance) does not need a new renderer wired in, but nothing on a dashboard uses it today.

Verified against a real dashboard

The panel behaviour above, including the error and empty states, the layout grid, and one failing panel not affecting its neighbours, was walked against a real GitOps-applied dashboard on a running stack (docs/v2/testing/m08-dashboards.md, re-walked 2026-09-04: 17 of 18 cases pass, one N/A for out-of-scope dashboard variables). Every defect that walk found, including panels mounting at zero height and a missing series label, is fixed; nothing described on this page is a known-broken renderer. The one still-open gap is the legend/tooltip callout above.

On this page