Every dvt dashboard (its theme, layout, panels, and visual properties) lives as a versioned JSON spec in dvt's database. Update it via API or MCP call. No deploy pipeline for a chart color change.
Edit the raw JSON and watch it render, like Slack's Block Kit Builder, for dashboards. Bring your own AI: the skill teaches any harness to write dvt specs.
Edit the spec, watch it render
Left is the source of truth. Right is what ships.
The whole dashboard is the JSON on the left: flip between examples and see the same engine dvt ships render it live.
Dashboard specs are database records: update one via REST API or MCP and it's live instantly. dvt tracks every revision server-side. Export to git if you want GitOps; it's never required.
⚡
AI-authored
Claude can POST a valid spec to the dvt MCP server and the dashboard appears: no GUI clicks, no screenshots, no copy-pasting JSON by hand.
⊞
Fully customizable
Every visual property, down to the gap between an axis and its title, is a named, storable parameter in the spec. Nothing is locked by the tool.
✓
Deterministic
Same spec → same pixels, every time. Validate a spec before saving it. Preview changes before applying them. AI agents get a preview loop before persisting.
One format, 36+ visual types
Every chart is a few lines of spec.
From a bar chart to an animated chart race, from sankey flows to cohort heat tables: the same declarative JSON describes them all. No imperative drawing code in the authoring surface.
chart:bar:racing
Bar chart race
Animated ranking over time: temporal storytelling that moves.
chart:area
Area
Volume and trend together: baseline must be zero.
chart:funnel
Funnel
Sequential stages where volume narrows at each step.
chart:heatmap
Heatmap
Two categories × a value as color: activity grids, matrices.
chart:sankey
Sankey
"Where does it go?" Flows with width ∝ quantity.
chart:line:racing
Racing line
A progressive line that draws itself along the time axis.
chart:radar
Radar
Compare entities across 5–10 dimensions: profiles, scorecards.
36 chart & table types shown. Every one is a few lines of declarative spec. Try them in the builder →
Tables are a first-class visual
A table in dvt is not just rows and columns.
The table element carries a full presentation vocabulary: all of it declared in the spec, all of it dvt Core, all computed client-side over rows you already fetched.
Conditional formatting
A real predicate grammar (eq / gt / between / in / topN / bottomN, cross-column references, and any/all combinators) styling a cell or a whole row.
Colour-scale heatmaps
Continuous per-column encoding: numeric, quantile, or binned, over named ramps (blues, viridis, rdbu…) with an auto or fixed domain.
In-cell visualizations
Sparklines, data bars, bullet bars, win/loss strips, dots, icons, and images, rendered inside the cell, driven by sibling columns.
Grouping & subtotals
Nested row groups with per-group subtotals and a grand total, collapsible from the header. No pivot required.
Pivot / cross-tab
Rows × columns cross-tabs with sum / weighted-average aggregation, generated value columns, and row/column/grand totals.
Spanning headers
Multi-row grouped column headers so a wide cross-tab reads as "FY26 revenue → Q1 · Q2 · Q3", not a flat wall of columns.
Resizable, wrapping columns
Drag a column border to resize (40–1200px); wrap long text over multiple lines with a show-more toggle. Sort and filter per column.
Warehouse-comment headers
Pull column headers and tooltips straight from your warehouse COMMENT metadata: the table documents itself from the source.
Interactive, not just rendered
Filters, cross-filtering, drill-downs, and context menus. Declared in the spec, no imperative event code.
The spec carries everything a dashboard needs. Not just the picture.
◑
Themes & tokens
Every visual property, down to the gap between an axis and its title, is a named, storable token. Org and dashboard themes cascade.
⊞
Metric KPIs
Stat panels with currency/percent formatting, period comparisons, deltas, and inline sparklines. Declared, not configured by hand.
⚡
AI authoring via MCP
Claude POSTs a valid spec through the dvt MCP server and the dashboard appears: no GUI clicks, no screenshots, no pasted JSON.
✓
Validate → preview → apply
Validate any spec before saving, preview changes before applying. Same spec → same pixels, deterministically, every time.
◉
Geo & maps
Choropleths and geographic flows over bundled boundaries — world, US states and counties, Canada / UK / EU regions — or drive geography straight from a GeoJSON column.
❝
Built-in doc layer
Panels carry their own intent, assumptions, and the exact query that built them: the documentation travels inside the spec.
Schema in design
A published JSON Schema is on the way, enabling validation, editor autocompletion, and AI self-correction without needing to query a running server. A spec that stays within the Core profile is portable across compliant renderers; the ECharts escape hatch trades that neutrality for deeper customization.
The schema is in active design. The examples above reflect the current working draft: field names and structure may shift before v1.
You've already tried the format in the builder above. Early access is how it runs on your own warehouse, arranged directly with us.