Skip to content

Chart types and extensibility

dbt Charts ships a fixed set of chart types, and many more shapes compose from them. This page lists both, then covers what to do when the shape you want is not there.


The seventeen chart types

Every chart names one of these with type:. Sixteen are built in; custom is your own, drawn by a template. An unknown name fails validation.

Type What it draws Docs
bar Bars, vertical or horizontal, grouped or stacked Bar charts
histogram Auto-binned bars More chart types
line Lines over an ordered axis Line graphs
area Filled lines, stacked or not Area charts
scatter Points, with optional size and color Point charts
heatmap A color-coded matrix More chart types
pie Sectors of a whole Sector charts
donut Sectors with a hole Sector charts
kpi One value, large Chart types
callout An annotated value card Chart types
table Rows and columns Tables
geoshape Geographic shapes Maps
map Filled regions Maps
point_map Location markers Maps
bubble_map Sized location markers Maps
spark_bar An inline mini bar chart More chart types
custom Draws your own template; ready-made templates for Sankey, funnel, gauge, and more Custom charts, Custom chart examples

All sixteen built-in types on one board, grouped by family, from the Playground's chart families example:

Chart Families dbt Charts draws every chart type below from the same small set of typed fields, x, y, color, theta, value, and a typed style block. All sixteen built-in types are here, each in a natural business use, grouped by family. Bars type: bar draws vertical columns for a date-based x axisOct2025NovDecJan2026FebMarAprMayJunJul0$1,000$2,000$3,000Monthly Revenuetype: bar draws vertical columns for a date-based x axisstyle.orientation: horizontal ranks long category labels0$500,000$1,000,000$1,500,000Widget BWidget AGadget YGadget XTool ZWidget CTool AGadget ZTop Products by Revenuestyle.orientation: horizontal ranks long category labelsa color field with no style.stack groups bars side by side0$500,000$1,000,000EastNorthSouthWestAccessoriesElectronicsToolsRevenue by Region and Categorya color field with no style.stack groups bars side by side style.stack: zero stacks bars from one shared baselineElectronicsAccessoriesTools0$500,000$1,000,000$1,500,000$2,000,000$2,500,000EastNorthSouthWestRevenue by Region, Stacked by Categ…style.stack: zero stacks bars from one shared baselinestyle.stack: normalize shows each category's share of the totalElectronicsAccessoriesTools0%25%50%75%100%EastNorthSouthWestCategory Mix of Revenue by Regionstyle.stack: normalize shows each category's share of the totalbars run either side of zero once a value turns negative−10%+0%+10%+20%+30%Horizon LabsDelta AnalyticsGranite DataApex TechnologiesBright SolutionsEcho NetworksCascade SystemsFocal Point IncQuarterly Revenue Growth by Companybars run either side of zero once a value turns negative type: histogram bins a continuous field05001k1.5k2k2.5k3k3.5k02004006008001k1.2k1.4k1.6k1.8k2k#Order Revenue Distributiontype: histogram bins a continuous field Lines and Areas type: line traces one series across a date-based x axisOct2025NovDecJan2026FebMarAprMayJunJul05001,000Active Users Over Timetype: line traces one series across a date-based x axiscolor: draws one line per category, each named on the chartJan2024FebMarAprMayJun$50,000$100,000$150,000$200,000Weekly Revenue by Categorycolor: draws one line per category, each named onthe chartElectronicsAccessoriesToolsstyle.stack: zero shows changing composition over timeJan2024FebMarAprMayJun0$100,000$200,000$300,000$400,000Composition of Weekly Reve…style.stack: zero shows changing composition overtimeToolsAccessoriesElectronics Points type: scatter plots two measures against each other020406080100Units Sold0$1,000$2,000$3,000RevenueAccessoriesElectronicsToolsCategoryRevenue vs. Units Soldtype: scatter plots two measures against each othersize: maps a third measure to point area−10%0%10%20%30%Growth rate20%30%40%MarginAPACAmericasEMEARegion0200400600800HeadcountGrowth, Margin, and Headcount by Companysize: maps a third measure to point area Sectors and Grids type: pie divides a whole into angular slicesRevenue Share by Categorytype: pie divides a whole into angular slices47%Electronics4,098,27635%Accessories3,008,06818%Tools1,565,154type: donut is a pie with a hole in the middleDocuments by Statustype: donut is a pie with a hole in the middle51%sent2,54149%completed2,459color: encodes the value as a shaded cell instead of a bar100,000200,000300,000400,000500,000RevenueRevenue by Region and Productcolor: encodes the value as a shaded cell instead of a barEastNorthSouthWestGadget XGadget YGadget ZTool ATool ZWidget AWidget BWidget C Values and Tables 8.7mn Total revenue Read with care Units are shipped, not ordered. Returns are netted out the following month, so the latest month reads low until it closes.type: spark_bar is a compact inline trend, no axes Revenue Trendtype: spark_bar is a compact inline trend, no axesOct 2025348Nov 2025816Dec 20252694Jan 20262496Feb 20263291Mar 20261506Apr 20262727May 20262148Jun 20263006Jul 20262355 type: table lists rows with formatted columnsRecent Orderstype: table lists rows with formatted columnsDateProductCategoryRegionRevenueUnits sold30 Jun 2024Gadget XAccessoriesWest2,8568430 Jun 2024Widget AElectronicsSouth2,7609230 Jun 2024Gadget XAccessoriesEast2,1766430 Jun 2024Gadget XAccessoriesEast2,0746130 Jun 2024Gadget YAccessoriesEast2,0406830 Jun 2024Widget BElectronicsEast1,8766730 Jun 2024Widget BElectronicsWest1,8486630 Jun 2024Gadget XAccessoriesSouth1,83654 Maps type: map (also geoshape) fills regions by a value2004006008001,000Population densityPopulation Densitytype: map (also geoshape) fills regions by a valuetype: point_map marks exact coordinatesStore Locationstype: point_map marks exact coordinatestype: bubble_map sizes each marker by a value200,000400,000600,000800,000RevenueStore Revenuetype: bubble_map sizes each marker by a value Data as of 14:30 UTC on 20 Oct 2026 made withdbt Charts
▶

Composed charts

A composed chart is a shape you ask for by name that has no type: of its own. Each is built from the types above plus layers, overlays and styling, and each stays a plain, typed board file. The composed chart shapes example in the Playground shows these side by side:

Shape Built from
Lollipop A thin bar with a point layered on its end
Bullet A bar measure over banded target bars
Slope A line with two ordered categories on the x axis
Bump A line of ranks over time
Dot plot A scatter with a category on one axis
Streamgraph An area with style.stack: center, a shared centered baseline
Composed Chart Shapes type: bar thinned to a stem with a scatter layer on the same measure.Region ARegion BRegion CRegion DRegion ERegion FRegion GRegion H020406080100Lollipoptype: bar thinned to a stem with a scatter layer on the samemeasure.stacked qualitative bands, a narrow value bar layer, and a step-band goal marker. Vertical only: the canonical horizontal bullet cannot draw the goal marker, because the step band is measured along the horizontal axis.Unit AUnit BUnit CUnit DUnit E050100ActualGoalGoodSatisfactoryPoorBandBulletstacked qualitative bands, a narrow value bar layer, and astep-band goal marker. Vertical only: the canonical horizontal b…type: line with a two-category x and color: on the entity.BeforeAfter406080Slopetype: line with a two-category x and color: on theentity.Region ARegion CRegion FRegion ERegion DRegion B type: line on a rank measure with a descending axis_y.scale.continuous.domain.20192020202120222023654321Bumptype: line on a rank measure with a descendingaxis_y.scale.continuous.domain.Region CRegion FRegion DRegion BRegion ARegion Etype: scatter over long-format rows with color: on the series, no layers, so the measure axis stays the measure axis when the chart is rotated.020406080Region ERegion BRegion HRegion ARegion FRegion DRegion CRegion G201920242029SeriesDot Plottype: scatter over long-format rows with color: on the series, nolayers, so the measure axis stays the measure axis when the ch…type: area with style.stack: center, so the bands share a centered baseline instead of the axis.Jan2024AprJulOct05001,000Streamgraphtype: area with style.stack: center, so thebands share a centered baseline instead of…Holiday RushNew ArrivalBackground NoiseSummer FlingSlow BleedWord of MouthSteady Staples Data as of 14:30 UTC on 20 Oct 2026 made withdbt Charts
▶

The building blocks are documented on their own pages: layered charts for stacking marks on one chart, small multiples for repeating one chart across a dimension, and interactions for the controls around them.


When a shape is missing

Try these roughly in order.

Compose it. Most editorial shapes are a known type plus a layer or a style. Start from the closest built-in type and read layered charts before assuming you need something new.

Draw it with a template. type: custom draws a chart from a Jinja SVG template that reads the query rows and the board's style. Sankey diagrams, funnels, gauges, radial bars, XmR charts, pictograms, waffles, and radar charts all have ready-made templates. See Custom charts and Custom chart examples.

Draw it in a text block. A text: block is Markdown, so it can carry an image, including an SVG you rendered elsewhere:

text: |
  ![Sankey of signups to paid](assets/signup-sankey.svg)

See Images.

Turn on raw HTML. On boards you host yourself, html_policy: trusted-raw at the board root lets a text: block carry raw HTML through a tag allowlist. The allowlist covers structure, headings, inline text, lists, tables and images. <svg>, <canvas>, <script> and <style> are dropped. dbt Charts Cloud caps the policy below this tier, so raw HTML does not render there. See HTML policy.

Render it somewhere else. dct render exports a board to SVG, PNG, PDF or HTML, so a board can be one piece of a larger page. See Output formats.

Ask for the type. If a shape keeps coming up, open an issue at dbt-labs/dbt-charts with a sketch of it. The list above grows from those requests.

Arbitrary Vega-Lite (spec, mark, encoding, transform, and the composition operators) is rejected on the authored surface on purpose: every board stays a typed, reviewable file that renders the same everywhere. A custom chart keeps that promise: its template is a file in the project, its channels and options are declared and validated, and its output is checked SVG.