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 axisMonthly Revenuetype: bar draws vertical columns for a date-based x axisOct2025NovDecJan2026FebMarAprMayJunJul0$1,000$2,000$3,000style.orientation: horizontal ranks long category labelsTop Products by Revenuestyle.orientation: horizontal ranks long category labels0$500,000$1,000,000$1,500,000Widget BWidget AGadget YGadget XTool ZWidget CTool AGadget Za color field with no style.stack groups bars side by sideRevenue by Region and Categorya color field with no style.stack groups bars side by sideAccessoriesElectronicsTools0$500,000$1,000,000EastNorthSouthWest style.stack: zero stacks bars from one shared baselineRevenue by Region, Stacked by Categ…style.stack: zero stacks bars from one shared baselineElectronicsAccessoriesTools0$1,000,000$2,000,000EastNorthSouthWeststyle.stack: normalize shows each category's share of the totalCategory Mix of Revenue by Regionstyle.stack: normalize shows each category's share of the totalElectronicsAccessoriesTools0%25%50%75%100%EastNorthSouthWestbars run either side of zero once a value turns negativeQuarterly Revenue Growth by Companybars run either side of zero once a value turns negative−10%+10%+30%Horizon LabsDelta AnalyticsGranite DataApex TechnologiesBright SolutionsEcho NetworksCascade SystemsFocal Point Inc type: histogram bins a continuous fieldOrder Revenue Distributiontype: histogram bins a continuous field05001k1.5k2k2.5k3k3.5k02004006008001k1.2k1.4k1.6k1.8k2k# Lines and Areas type: line traces one series across a date-based x axisActive Users Over Timetype: line traces one series across a date-based x axisOct2025NovDecJan2026FebMarAprMayJunJul05001,000color: draws one line per category, each named on the chartWeekly Revenue by Categorycolor: draws one line per category, each namedon the chartJan2024FebMarAprMayJun$50,000$100,000$150,000$200,000$203,840Electronics$178,490Accessories$53,410 Toolsstyle.stack: zero shows changing composition over timeComposition of Weekly Reve…style.stack: zero shows changing composition overtimeJan2024FebMarAprMayJun0$100,000$200,000$300,000$400,000ToolsAccessoriesElectronics Points type: scatter plots two measures against each otherRevenue vs. Units Soldtype: scatter plots two measures against each other020406080100Units Sold0$1,000$2,000$3,000RevenueCategoryAccessoriesElectronicsToolssize: maps a third measure to point areaGrowth, Margin, and Headcount by Companysize: maps a third measure to point area−10%0%10%20%30%Growth rate20%30%40%MarginRegionAPACAmericasEMEAHeadcount0200400600800 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 barRevenue by Region and Productcolor: encodes the value as a shaded cell instead of a barEastNorthSouthWestGadget XGadget YGadget ZTool ATool ZWidget AWidget BWidget CRevenue100,000200,000300,000400,000500,000 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 valuePopulation Densitytype: map (also geoshape) fills regions by a valuePopulation density05001,0001,500type: point_map marks exact coordinatesStore Locationstype: point_map marks exact coordinatestype: bubble_map sizes each marker by a valueStore Revenuetype: bubble_map sizes each marker by a valueRevenue200,000400,000600,000800,000 Data as of 14:49 UTC on 29 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.Lollipoptype: bar thinned to a stem with a scatter layer on the samemeasure.Region ARegion BRegion CRegion DRegion ERegion FRegion GRegion H020406080100stacked 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.Bulletstacked qualitative bands, a narrow value bar layer, and astep-band goal marker. Vertical only: the canonical horizontal b…BandActualGoalGoodSatisfactoryPoorUnit AUnit BUnit CUnit DUnit E050100type: line with a two-category x and color: on the entity.Slopetype: line with a two-category x and color: on theentity.BeforeAfter40608084 Region A79 Region C78 Region F68 Region E67 Region D52 Region B type: line on a rank measure with a descending axis_y.scale.continuous.domain.Bumptype: line on a rank measure with a descendingaxis_y.scale.continuous.domain.201920202021202220236543216 Region C5 Region F4 Region D3 Region B2 Region A1 Region 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.Dot Plottype: scatter over long-format rows with color: on the series, nolayers, so the measure axis stays the measure axis when the ch…020406080Region ERegion BRegion HRegion ARegion FRegion DRegion CRegion GSeries201920242029type: area with style.stack: center, so the bands share a centered baseline instead of the axis.Streamgraphtype: area with style.stack: center, so thebands share a centered baseline instead of…Q12024Q2Q3Q405001,000Holiday RushNew ArrivalBackground NoiseSummer FlingSlow BleedWord of MouthSteady Staples Data as of 14:49 UTC on 29 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.