Learn  /  What's new

dbt Charts explained: dashboards as code, next to your dbt models

Dashboards written as YAML, versioned in Git, checked against your warehouse and easy for AI agents to edit. What dbt Charts is, how a board is built and where it still falls short.

What's new7 min readUpdated 17 October 2026
dbtAnalytics engineeringWhat's new
All guides and cheat sheets

Analytics engineers already keep their models, tests and documentation as code in dbt. The dashboard has usually been the exception: it lives in a BI tool, built by clicking, with no history and no review. dbt Charts, announced in public beta at dbt Summit 2026 in Las Vegas in September, closes that gap. A dashboard becomes a YAML file in your dbt project, rendered by a small command-line tool and checked against your warehouse before anyone sees a broken chart.

From model to dashboard
dbt modelstested in your warehouse
Board YAMLqueries, charts, layout
dct validatechecks queries and columns
Rendered boardshareable, filterable

Why dashboards as code?

Clicked-together dashboard

Today
  • No history: who changed that filter, and when?
  • Logic copied by hand between dashboards
  • Breaks silently when a column is renamed

Fast to start, slow to maintain.

Dashboard as code

dbt Charts
  • Reviewed in pull requests, with full history and rollback
  • Change one filter across dozens of boards at once
  • Column renames caught before deploy
  • Easy for AI agents to read and write

More setup, much easier to keep correct.

What a board looks like

A board has a title, a data source, named SQL queries, charts that point to those queries, and a layout. Here is a simplified example based on the documented structure:

YAML
# charts/revenue.yml
title: Revenue overview
source: db
queries:
  by_month: |
    select date_trunc('month', order_date) as month,
           sum(revenue) as revenue
    from {{ ref('fct_orders') }}
    group by 1
    order by 1
  by_channel: |
    select channel, sum(revenue) as revenue
    from {{ ref('fct_orders') }}
    group by 1
    order by 2 desc
charts:
  revenue_trend:
    query: queries.by_month
    type: line
    x: month
    y: revenue
  revenue_by_channel:
    query: queries.by_channel
    type: bar
    x: channel
    y: revenue
rows: [revenue_trend, revenue_by_channel]

Two design choices stand out. First, charts never aggregate or reorder rows: the SQL decides the grain and the order, so what you see is exactly what the query returns. Second, ref() calls are checked against your dbt models' columns when dbt parse runs, so a renamed column breaks the build, not the meeting.

The building blocks

Queries
Named SQL, one per grain you need. Charts reference them as queries.name.
Charts
16 types: bar, histogram, spark bar, line, area, scatter, pie, donut, table, heatmap, KPI, callout, map, point map, bubble map and geoshape.
Composed charts
Lollipop, bullet, slope, bump, dot plot and steamgraph, built from the core types.
Variables
Filters shown as dropdowns, multi-selects, date ranges, sliders or checkboxes. Each one is a URL parameter, so a filtered view is a shareable link.
Links
Click a bar or a row to filter the board in place or open another board.
Layout
Rows stack charts, columns place them side by side, with tabs, collapsible sections and markdown text blocks.
Themes
Switch the whole board's look with one line.

Validation: the real reason to care

The command-line tool is called dct, and it reads your existing dbt_project.yml and profiles.yml, so there is no new connection to configure.

Terminal
dct validate              # check the structure of every board
dct validate --warehouse  # run every query against the warehouse
dct impact                # list the boards that read a given column
dct render                # build the boards, with visual warnings

dct impact is the one data teams will love: before you drop or rename a column, you can see every dashboard that depends on it. Put dct validate --warehouse in CI next to dbt build, and broken dashboards stop reaching stakeholders.

Built for AI agents

Because a board is plain text with a small vocabulary, AI agents can read and write it far more reliably than they can click through a BI tool. That is a big part of dbt Labs' pitch. The online playground at play.dbtcharts.com includes an assistant that edits the YAML for you.

Current limits

  • No Semantic Layer link yet: queries are plain SQL, so a metric defined in the dbt Semantic Layer can be calculated differently on a board. Keep logic in your models and keep board SQL thin.
  • Long files: big boards become long YAML files that are hard to navigate. Split them into several boards.
  • Public beta: pricing, plans and a GA date have not been announced. dbt Labs is running virtual sessions on 28 and 29 October.

Should you try it?

Try it now

Good fit
  • Internal dashboards owned by the data team
  • Teams already doing code review for dbt
  • Lots of similar boards that drift apart

Wait

Not yet
  • Executive dashboards that need pixel-perfect design
  • Self-service for business users who do not use Git
  • Metrics that must come from the Semantic Layer

Check your understanding

1/3Where does a dbt Charts board live?

2/3Who decides the grain and order of a chart's data?

3/3Which command lists the boards that depend on a column?

New to dbt? Start with your first dbt project, then read what changed in dbt v2 and what the Fivetran and dbt Labs merger means.

Sources: the dbt Charts language documentation (dbtcharts.com), The Information Lab's "dbt Charts: first look" (21 September 2026) and the dbt Labs blog. dbt Charts is in public beta, so syntax and features may change.

Alessandro Ecclesie AgazziWritten by Alessandro Ecclesie Agazzi, analytics engineer in London. Updated 17 October 2026. About me

Found this useful?

New guides and "what's new" explainers on data and AI land here regularly. Follow along on LinkedIn, or share this one with a colleague.