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 sixteen built-in types

Every chart names one of these with type:. 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

All sixteen 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 Oct2025NovDecJan2026FebMarAprMayJunJul$0$1,000$2,000$3,000Monthly Revenuetype: bar draws vertical columns for a date-based x axis$0$500,000$1,000,000$1,500,000Widget BWidget AGadget YGadget XTool ZWidget CTool AGadget ZTop Products by Revenuestyle.orientation: horizontal ranks long category labels$0$500,000$1,000,000EastNorthSouthWestAccessoriesElectronicsToolsRevenue by Region and Categorya color field with no style.stack groups bars side by side ElectronicsAccessoriesTools$0$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 baselineElectronicsAccessoriesTools0%25%50%75%100%EastNorthSouthWestCategory Mix of Revenue by Regionstyle.stack: normalize shows each category's share of the total−10.0%+0.0%+10.0%+20.0%+30.0%Horizon LabsDelta AnalyticsGranite DataApex TechnologiesBright SolutionsEcho NetworksCascade SystemsFocal Point IncQuarterly Revenue Growth by Companybars run either side of zero once a value turns negative 05001k1.5k2k2.5k3k3.5k02004006008001k1.2k1.4k1.6k1.8k2kCountOrder Revenue Distributiontype: histogram bins a continuous field Lines and Areas Oct2025NovDecJan2026FebMarAprMayJunJul5001,000Active Users Over Timetype: line traces one series across a date-based x axisJan2024FebMarAprMayJun$0$10,000$20,000$30,000$40,000Daily Revenue by Categorycolor: draws one line per category, each named onthe chartElectronicsAccessoriesToolsJan2024FebMarAprMayJun$0$20,000$40,000$60,000$80,000Composition of Daily Revenuestyle.stack: zero shows changing composition overtimeToolsAccessoriesElectronics Points 020406080100Units Sold$0$1,000$2,000$3,000RevenueAccessoriesElectronicsToolsCategoryRevenue vs. Units Soldtype: scatter plots two measures against each other−10%0%10%20%30%Growth rate20%30%40%Margin0200400600800HeadcountAPACAmericasEMEARegionGrowth, Margin, and Headcount by Companysize: maps a third measure to point area Sectors and Grids Revenue Share by Categorytype: pie divides a whole into angular slices 47%Electronics4.1 ​M35%Accessories3.01M18%Tools1.57M 5,000Total Document CountDocuments by Statustype: donut is a pie with a hole in the middle 51%sent2.55K49%completed2.45K 100,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. Revenue Trendtype: spark_bar is a compact inline trend, no axesOct 2025477Nov 2025483Dec 20253102Jan 20261716Feb 20262361Mar 20262400Apr 20262331May 20262490Jun 20262907Jul 20262931 Recent Orderstype: table lists rows with formatted columnsDateProductCategoryRegionRevenueUnits Sold30 Jun 2024Gadget XAccessoriesWest2.86K8430 Jun 2024Widget AElectronicsSouth2.76K9230 Jun 2024Gadget XAccessoriesEast2.18K6430 Jun 2024Gadget XAccessoriesEast2.07K6130 Jun 2024Gadget YAccessoriesEast2.04K6830 Jun 2024Widget BElectronicsEast1.88K6730 Jun 2024Widget BElectronicsWest1.85K6630 Jun 2024Gadget XAccessoriesSouth1.84K54 Maps 2004006008001,000Population DensityPopulation Densitytype: map (also geoshape) fills regions by a valueStore Locationstype: point_map marks exact coordinates200,000400,000600,000800,000RevenueStore Revenuetype: bubble_map sizes each marker by a value Data as of 13:34 UTC on 14 Sep 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 Region ARegion BRegion CRegion DRegion ERegion FRegion GRegion H020406080100Lollipoptype: bar thinned to a stem with a scatter layer on the samemeasure.Unit AUnit BUnit CUnit DUnit E050100ActualGoalGoodSatisfactoryPoorBandBulletstacked qualitative bands, a narrow value bar layer, and astep-band goal marker. Vertical only: the canonical horizontal b…BeforeAfter406080Slopetype: line with a two-category x and color: on theentity.Region ARegion CRegion FRegion ERegion DRegion B 20192020202120222023654321Bumptype: line on a rank measure with a descendingaxis_y.scale.continuous.domain.Region CRegion FRegion DRegion BRegion ARegion E020406080Region 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…Jan2024FebMarAprMayJun0   ​20   ​40   ​60   ​80 KStreamgraphtype: area with style.stack: center, so the bandsshare a centered baseline instead of the axis.ToolsAccessoriesElectronics Data as of 13:34 UTC on 14 Sep 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

There is no custom chart type today. An earlier inline chart type was withdrawn, and a replacement is planned; until then these are the options, roughly in the order to try them.

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 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. That is the constraint a custom type has to respect, and why the replacement is taking its time.