Chart Compiler Gap Analysis For The Data Visualisation Catalogue
Date: 2026-05-12
Source context:
- Catalogue review universe: README.md, which records 60 Data Visualisation Catalogue methods reviewed for this gallery pass.
- Current implementation tracker: implementation-tracker.md.
- Current compiler implementation:
app/src/lib/viz/compiler/*. - Current gallery specs:
app/src/lib/viz/compiler/gallery-specs.ts.
This document catalogues the major compiler gaps that prevent faithful implementations of the full Data Visualisation Catalogue. It focuses on reusable compiler capabilities, not one-off gallery polish.
Living Update Log
2026-05-12 Scatterplot Matrix And Mixed-Axis Jitter Pass
Implemented:
- Added focused compiler-owned
layoutexecution forjitteredPoints, deriving point coordinates for quantitative, temporal, categorical, ordinal, boolean, and text axes. Categorical axes use deterministic jitter inside band cells so repeated values remain visible without leaving the category band. - Added focused compiler-owned
layoutexecution forscatterplotMatrixPanels,scatterplotMatrixPoints, andscatterplotMatrixDistributions. - Scatterplot matrix rows now expand into generated panel cells, off-diagonal mixed-type scatter points, and diagonal distribution summaries. Numeric/temporal diagonal cells render histogram bars; categorical/ordinal/boolean/text diagonal cells render horizontal row charts.
- Added a mixed-field Scatterplot Matrix gallery route and focused compiler tests for SPLOM expansion plus standalone categorical-axis jitter.
Implementation evidence:
- Compiler surface:
app/src/lib/viz/compiler/spec.ts,app/src/lib/viz/compiler/matrix-layouts.ts,app/src/lib/viz/compiler/matrix-distribution-layouts.ts,app/src/lib/viz/compiler/transforms.ts, andapp/src/lib/viz/compiler/compiler.test.ts. - Gallery specs/pages:
app/src/lib/viz/compiler/gallery-specs/scatterplot-matrix.ts,app/src/lib/viz/compiler/gallery-specs.ts, andapp/src/lib/viz/compiler/gallery-specs/types.ts.
2026-05-12 Layout Primitive And Authored Grid Pass
Implemented:
- Added additive compiler-owned layout primitives for frames, margin boxes, grid cells, stacks, and insets.
compileChart()now exposes resolved generated boxes throughcompiled.layoutsandcompiled.spec.layouts, so layer params, scales, axes, grids, legends, and inspectors can reference derived boxes consistently. - Added a focused compiler test fixture proving layout-derived scale ranges and glyph params preserve inspectable layout lineage.
- Added persisted authored-chart layout state with a 12-column grid contract, default packing, sanitization, duplication placement, size-to-layout reconciliation, and desktop drag/resize handles in the workspace builder.
Implementation evidence:
- Compiler surface:
app/src/lib/viz/compiler/spec.ts,app/src/lib/viz/compiler/layouts.ts,app/src/lib/viz/compiler/compile-chart.ts,app/src/lib/viz/compiler/scales.ts,app/src/lib/viz/compiler/index.ts, andapp/src/lib/viz/compiler/compiler.test.ts. - Authored dashboard surface:
app/src/lib/viz/retail-chart-layout.ts,app/src/lib/viz/retail-types.ts,app/src/lib/viz/retail-analysis/settings.ts,app/src/components/data-viz/retail-dashboard/useRetailDashboardWorkspace.ts, andapp/src/components/data-viz/workspace-authoring/*.
2026-05-12 Polar-Axis And Arc Layout Pass
Implemented:
- Added focused compiler-owned
layoutexecution forradarAxes,radarRings,radarPolygons, andradarPoints, deriving radial guide axes, closed guide-ring paths, closed series polygons, vertex coordinates, labels, values, tooltips, and lineage-preserving source rows from raw series/metric observations. - Added focused compiler-owned
layoutexecution forradialBars, deriving concentric annular tracks and value sweep arcs from raw ordered category values. - Added focused compiler-owned
layoutexecution forarcDiagramNodesandarcDiagramLinks, deriving ordered node positions, node radii, weighted cubic arc paths, and source-row lineage from raw source-target edge rows. - Added the previously missing Data Visualisation Catalogue Arc Diagram, Radar Chart, and Radial Bar Chart gallery routes.
Implementation evidence:
- Compiler surface:
app/src/lib/viz/compiler/spec.ts,app/src/lib/viz/compiler/polar-layouts.ts,app/src/lib/viz/compiler/network-layouts.ts,app/src/lib/viz/compiler/transforms.ts, andapp/src/lib/viz/compiler/compiler.test.ts. - Gallery specs/pages:
app/src/lib/viz/compiler/gallery-specs/arc-diagram.ts,app/src/lib/viz/compiler/gallery-specs/radar-chart.ts,app/src/lib/viz/compiler/gallery-specs/radial-bar-chart.ts, andapp/src/lib/viz/compiler/gallery-specs.ts. - Catalogue docs:
docs/chart-catalogue-gallery/arc-diagram.md,docs/chart-catalogue-gallery/radar-chart.md,docs/chart-catalogue-gallery/radial-bar-chart.md,docs/chart-catalogue-gallery/README.md,docs/chart-catalogue-gallery/implementation-tracker.md, and this document.
2026-05-11 Hierarchy Layout Pass
Implemented:
- Added compiler-owned
hierarchytransform execution for flat parent-child rows, deriving stable node ids, parent ids, depths, child counts, aggregate values, path labels, formatted values, tooltips, and lineage-preserving source rows. - Added focused compiler-owned
layoutexecution fortreeNodesandtreeLinks, deriving tidy left-to-right node positions and generated cubic parent-child link paths. - Added focused compiler-owned
layoutexecution forsunburstSectors, deriving radial hierarchy partition sectors with generated annularpathDdata, angles, radii, shares, and label anchors. - Added focused compiler-owned
layoutexecution forcirclePack, deriving first-pass nested circle positions and radii from hierarchy rows. - Added the previously missing Data Visualisation Catalogue Circle Packing, Sunburst Diagram, and Tree Diagram gallery routes.
Implementation evidence:
- Compiler surface:
app/src/lib/viz/compiler/spec.ts,app/src/lib/viz/compiler/catalogue-layouts.ts,app/src/lib/viz/compiler/transforms.ts, andapp/src/lib/viz/compiler/compiler.test.ts. - Gallery specs/pages:
app/src/lib/viz/compiler/gallery-specs/circle-packing.ts,app/src/lib/viz/compiler/gallery-specs/sunburst-diagram.ts,app/src/lib/viz/compiler/gallery-specs/tree-diagram.ts, andapp/src/lib/viz/compiler/gallery-specs.ts. - Catalogue docs:
docs/chart-catalogue-gallery/circle-packing.md,docs/chart-catalogue-gallery/sunburst-diagram.md,docs/chart-catalogue-gallery/tree-diagram.md,docs/chart-catalogue-gallery/README.md,docs/chart-catalogue-gallery/implementation-tracker.md, and this document.
2026-05-11 Near-Fit Layout Pass
Implemented:
- Added focused compiler-owned
layoutexecution forbulletRanges,bulletMeasure, andbulletTarget, deriving qualitative range bands, actual measure bars, and target marker rows from raw metric thresholds. - Added focused compiler-owned
layoutexecution forparallelAxes,parallelAxisTicks, andparallelCoordinates, deriving per-dimension guide axes, tick rows, and grouped polyline points from raw multivariate observations. - Added focused compiler-owned
layoutexecution fortimetableGrid,timetableDayHeaders, andtimetableEvents, deriving timetable grid cells, day labels, and duration-aware event blocks from raw schedule rows. - Added the previously missing Data Visualisation Catalogue Bullet Graph, Parallel Coordinates Plot, and Timetable gallery routes.
Implementation evidence:
- Compiler surface:
app/src/lib/viz/compiler/spec.ts,app/src/lib/viz/compiler/catalogue-layouts.ts,app/src/lib/viz/compiler/transforms.ts, andapp/src/lib/viz/compiler/compiler.test.ts. - Gallery specs/pages:
app/src/lib/viz/compiler/gallery-specs/bullet-graph.ts,app/src/lib/viz/compiler/gallery-specs/parallel-coordinates.ts,app/src/lib/viz/compiler/gallery-specs/timetable.ts, andapp/src/lib/viz/compiler/gallery-specs.ts. - Catalogue docs:
docs/chart-catalogue-gallery/bullet-graph.md,docs/chart-catalogue-gallery/parallel-coordinates-plot.md,docs/chart-catalogue-gallery/timetable.md,docs/chart-catalogue-gallery/README.md,docs/chart-catalogue-gallery/implementation-tracker.md, and this document.
2026-05-11 Stream And Violin Pass
Implemented:
- Added explicit
pathinterpolation policies forlinear,smooth, andsteppath generation. Existing density and stacked-area gallery specs now use smooth paths where the catalogue form expects curves. - Added
stacktransformmode: "stream", which centers each period's stacked total around a moving baseline and emits regularstart/endboundaries for area-band rendering. - Added focused compiler-owned
layoutexecution forviolin, deriving mirrored density silhouettes, medians, quartiles, guide coordinates, bandwidth, and lineage-preserving source rows from grouped raw observations. - Added the previously missing Data Visualisation Catalogue Stream Graph and Violin Plot gallery routes.
Implementation evidence:
- Compiler surface:
app/src/lib/viz/compiler/spec.ts,app/src/lib/viz/compiler/glyphs.ts,app/src/lib/viz/compiler/compile-chart/path-glyphs.ts,app/src/lib/viz/compiler/transforms.ts, andapp/src/lib/viz/compiler/compiler.test.ts. - Gallery specs/pages:
app/src/lib/viz/compiler/gallery-specs/stream-graph.ts,app/src/lib/viz/compiler/gallery-specs/violin-plot.ts,app/src/lib/viz/compiler/gallery-specs/density-plot.ts,app/src/lib/viz/compiler/gallery-specs/stacked-area-graph.ts,app/src/lib/viz/compiler/gallery-specs.ts, andapp/src/components/data-viz/compiler-gallery/chart-compiler-gallery/StagePanel.tsx. - Catalogue docs:
docs/chart-catalogue-gallery/stream-graph.md,docs/chart-catalogue-gallery/violin-plot.md,docs/chart-catalogue-gallery/README.md,docs/chart-catalogue-gallery/implementation-tracker.md, and this document.
2026-05-11 Polar-Sector Path Pass
Implemented:
- Added a direct
dpath parameter so compiler-generated SVG path data can render through the existing path glyph with inspectable field lineage. - Added focused compiler-owned
layoutexecution forpolarSectors, with proportional-angle sectors for pie/donut charts and equal-angle, value-radius sectors for radial column and Nightingale rose charts. polarSectorsconverts raw category/value rows intopathD, start/end/mid angles, inner/outer radii, share labels, label anchors, tooltips, and source-row lineage.- Added the previously missing Data Visualisation Catalogue Pie Chart, Donut Chart, Nightingale Rose Chart, and Radial Column Chart gallery routes.
Implementation evidence:
- Compiler surface:
app/src/lib/viz/compiler/spec.ts,app/src/lib/viz/compiler/transforms.ts,app/src/lib/viz/compiler/compile-chart/path-glyphs.ts, andapp/src/lib/viz/compiler/compiler.test.ts. - Gallery specs/pages:
app/src/lib/viz/compiler/gallery-specs/pie-chart.ts,app/src/lib/viz/compiler/gallery-specs/donut-chart.ts,app/src/lib/viz/compiler/gallery-specs/nightingale-rose-chart.ts,app/src/lib/viz/compiler/gallery-specs/radial-column-chart.ts, andapp/src/lib/viz/compiler/gallery-specs.ts. - Catalogue docs:
docs/chart-catalogue-gallery/pie-chart.md,docs/chart-catalogue-gallery/donut-chart.md,docs/chart-catalogue-gallery/nightingale-rose-chart.md,docs/chart-catalogue-gallery/radial-column-chart.md,docs/chart-catalogue-gallery/README.md,docs/chart-catalogue-gallery/implementation-tracker.md, and this document.
2026-05-11 Calendar, Mosaic, And Dot-Matrix Layout Pass
Implemented:
- Added focused compiler-owned
layoutexecution forcalendarMonth,mosaic, anddotMatrix. calendarMonthconverts raw date/value rows into weekday/week month-grid cells with derived cell bounds, labels, and tooltips.mosaicconverts raw category/series/value rows into Marimekko-style variable-width columns with stacked segment bounds and category centers.dotMatrixexpands raw category counts into repeated point rows with generated dot coordinates, radius, represented value, and source-row lineage.- Added the previously missing Data Visualisation Catalogue Calendar, Marimekko Chart, and Dot Matrix Chart gallery routes.
Implementation evidence:
- Compiler surface:
app/src/lib/viz/compiler/spec.ts,app/src/lib/viz/compiler/transforms.ts, andapp/src/lib/viz/compiler/compiler.test.ts. - Gallery specs/pages:
app/src/lib/viz/compiler/gallery-specs/calendar.ts,app/src/lib/viz/compiler/gallery-specs/marimekko-chart.ts,app/src/lib/viz/compiler/gallery-specs/dot-matrix-chart.ts, andapp/src/lib/viz/compiler/gallery-specs.ts. - Catalogue docs:
docs/chart-catalogue-gallery/calendar.md,docs/chart-catalogue-gallery/marimekko-chart.md,docs/chart-catalogue-gallery/dot-matrix-chart.md,docs/chart-catalogue-gallery/README.md,docs/chart-catalogue-gallery/implementation-tracker.md, and this document.
2026-05-11 Compiler Pass
Implemented:
- Focused transform execution in
compileChart()foridentity,aggregate,bin,stack, andsummary. - Generated transform output tables are now added to the compiled spec, so gallery specs no longer have to ship precomputed histogram bins, stacked segments, or box-plot summaries.
- First-class
AxisSpecandGridSpecdeclarations generate axis lines, tick marks, tick labels, and gridlines from resolved scale ticks. - Linear scales now support
nicedomains, and the scale system includessqrtfor area-correct circle radius mapping. - Declarative arithmetic param expressions now cover
add,subtract,multiply,divide,sqrt,min,max,midpoint, andclamp. - The compiler gallery now includes the previously missing Data Visualisation Catalogue box and whisker plot, backed by the new
summarytransform and generated guides.
2026-05-11 Interval And Grouped Layout Pass
Implemented:
- Added a compiler-owned
intervaltransform that normalizes raw start/end fields intostart,end,duration,center,durationLabel, and tooltip fields for interval charts. - Added focused
layouttransform execution forgroupedBandandgroupCenters, so grouped categorical bars can derivex,width, and group-label centers from raw category/series rows. - Updated the histogram gallery spec to render bins as true continuous intervals on a linear x scale using compiler-produced
minandmaxfields. - Updated the multi-set bar chart gallery spec to remove precomputed bar x/width fields from source rows.
- Added the previously missing Data Visualisation Catalogue Gantt chart, backed by the new
intervaltransform and generated Cartesian guides.
Implementation evidence:
- Compiler surface:
app/src/lib/viz/compiler/spec.ts,app/src/lib/viz/compiler/transforms.ts, andapp/src/lib/viz/compiler/compiler.test.ts. - Gallery specs:
app/src/lib/viz/compiler/gallery-specs/histogram.ts,app/src/lib/viz/compiler/gallery-specs/multi-set-bar.ts,app/src/lib/viz/compiler/gallery-specs/gantt-chart.ts, andapp/src/lib/viz/compiler/gallery-specs.ts. - Catalogue docs:
docs/chart-catalogue-gallery/gantt-chart.md,docs/chart-catalogue-gallery/implementation-tracker.md, and the updated per-chart notes for histogram, multi-set bar, and bubble chart.
2026-05-11 Diverging Domain Pass
Implemented:
- Numeric and sequential scale domains now support
padding,symmetric, andreversecontrols before tick generation. - Generated axis tick labels now support explicit numeric formatting, including absolute-value labels with prefixes/suffixes for diverging axes.
- Added a compiler-owned
divergingBarslayout transform that turns raw positive left/right measures into signedstart,end,value, andsignedValuesegment rows. - Updated the compiler gallery detail stage panel to expose transform options, scale domain controls, and axis tick-format settings.
- Added the previously missing Data Visualisation Catalogue population pyramid, backed by the new diverging layout transform, symmetric x domain, and absolute x-axis tick labels.
Implementation evidence:
- Compiler surface:
app/src/lib/viz/compiler/spec.ts,app/src/lib/viz/compiler/scales.ts,app/src/lib/viz/compiler/guides.ts,app/src/lib/viz/compiler/transforms.ts, andapp/src/lib/viz/compiler/compiler.test.ts. - Gallery specs/pages:
app/src/lib/viz/compiler/gallery-specs/population-pyramid.ts,app/src/lib/viz/compiler/gallery-specs.ts, andapp/src/components/data-viz/compiler-gallery/chart-compiler-gallery/StagePanel.tsx. - Catalogue docs:
docs/chart-catalogue-gallery/population-pyramid.md,docs/chart-catalogue-gallery/README.md,docs/chart-catalogue-gallery/implementation-tracker.md, and this document.
2026-05-11 Generated Legend Pass
Implemented:
- Added first-class
LegendSpecdeclarations for generatedcolorandsizelegends. - Materialized legend item/title data sources plus rect, point, and text guide layers from resolved scale domains, explicit legend values, and shared tick formatting.
- Updated the compiler gallery stage panel to show legend declarations alongside transforms, axes, grids, scales, and layers.
- Replaced manual legend fixture rows in selected gallery specs with generated color legends, and added generated sequential/color and size legends where useful.
- Added the previously missing Data Visualisation Catalogue proportional area chart, backed by the
sqrtradius scale and generated size legend.
Implementation evidence:
- Compiler surface:
app/src/lib/viz/compiler/spec.ts,app/src/lib/viz/compiler/guides.ts,app/src/lib/viz/compiler/legend-guides.ts,app/src/lib/viz/compiler/guide-format.ts, andapp/src/lib/viz/compiler/compiler.test.ts. - Gallery specs/pages:
app/src/lib/viz/compiler/gallery-specs/proportional-area-chart.ts,app/src/lib/viz/compiler/gallery-specs/bubble-chart.ts,app/src/lib/viz/compiler/gallery-specs/heatmap.ts,app/src/lib/viz/compiler/gallery-specs/multi-set-bar.ts,app/src/lib/viz/compiler/gallery-specs/population-pyramid.ts,app/src/lib/viz/compiler/gallery-specs/stacked.ts,app/src/lib/viz/compiler/gallery-specs.ts, andapp/src/components/data-viz/compiler-gallery/chart-compiler-gallery/StagePanel.tsx. - Catalogue docs:
docs/chart-catalogue-gallery/proportional-area-chart.md,docs/chart-catalogue-gallery/README.md,docs/chart-catalogue-gallery/implementation-tracker.md, and this document.
2026-05-11 Area-Band Path Pass
Implemented:
- Added
y0/y1path-layer geometry so a path can render a filled band between two derived boundaries, not only a line closed to one constant baseline. - Updated the existing Area Graph gallery spec to use the area-band primitive for its zero-baseline fill.
- Added the previously missing Data Visualisation Catalogue Stacked Area Graph, backed by the existing
stacktransform plus area-band path rendering. - Updated the compiler gallery stage panel to expose path geometry mode, including area-band and baseline-closure flags.
Implementation evidence:
- Compiler surface:
app/src/lib/viz/compiler/spec.ts,app/src/lib/viz/compiler/glyphs.ts,app/src/lib/viz/compiler/compile-chart/path-glyphs.ts, andapp/src/lib/viz/compiler/compiler.test.ts. - Gallery specs/pages:
app/src/lib/viz/compiler/gallery-specs/area-graph.ts,app/src/lib/viz/compiler/gallery-specs/stacked-area-graph.ts,app/src/lib/viz/compiler/gallery-specs.ts, andapp/src/components/data-viz/compiler-gallery/chart-compiler-gallery/StagePanel.tsx. - Catalogue docs:
docs/chart-catalogue-gallery/stacked-area-graph.md,docs/chart-catalogue-gallery/README.md,docs/chart-catalogue-gallery/implementation-tracker.md, and this document.
2026-05-11 Statistical And Financial Interval Pass
Implemented:
- Added compiler-owned
errorIntervaltransform execution for grouped raw observations, deriving count, mean, standard deviation, standard error, selected interval error, lower bound, upper bound, tooltip, and lineage-preserving source rows. - Added compiler-owned
financialIntervaltransform execution for ordered raw price ticks, deriving open, high, low, close, change, change percent, gain/loss/flat direction, range, tooltip, and lineage-preserving source rows. - Added explicit numeric scale domain
min/maxcontrols so charts with multiple derived numeric fields can pin a shared axis without precomputing separate domain rows. - Added the previously missing Data Visualisation Catalogue Error Bars, Candlestick Chart, Open-high-low-close Chart, and Span Chart gallery routes.
- Updated the compiler gallery chart set and tests so the data-flow panel shows raw observations/ticks flowing through the new transforms instead of precomputed support tables.
Implementation evidence:
- Compiler surface:
app/src/lib/viz/compiler/spec.ts,app/src/lib/viz/compiler/scales.ts,app/src/lib/viz/compiler/transforms.ts, andapp/src/lib/viz/compiler/compiler.test.ts. - Gallery specs/pages:
app/src/lib/viz/compiler/gallery-specs/error-bars.ts,app/src/lib/viz/compiler/gallery-specs/candlestick-chart.ts,app/src/lib/viz/compiler/gallery-specs/open-high-low-close.ts,app/src/lib/viz/compiler/gallery-specs/span-chart.ts, andapp/src/lib/viz/compiler/gallery-specs.ts. - Catalogue docs:
docs/chart-catalogue-gallery/error-bars.md,docs/chart-catalogue-gallery/candlestick-chart.md,docs/chart-catalogue-gallery/open-high-low-close-chart.md,docs/chart-catalogue-gallery/span-chart.md,docs/chart-catalogue-gallery/README.md,docs/chart-catalogue-gallery/implementation-tracker.md, and this document.
2026-05-11 Temporal, Density, Regression, And Treemap Pass
Implemented:
- Added a first-class
timescale with UTC date parsing, padded/nice temporal domains, generated date ticks, and date/month/date-time guide formatting. - Updated Gantt, Candlestick, and Open-high-low-close gallery specs to use date fields and generated date axes instead of ordinal/numeric period surrogates.
- Added compiler-owned
regressiontransform execution for scatterplot trend rows, including slope/intercept/r-squared output and lineage back to raw points. - Added compiler-owned
densitytransform execution for kernel-density samples from raw observations. - Added compiler-owned squarified
treemaptransform execution, replacing the gallery-only recursive split helper and removing precomputed tile rows from the Treemap spec. - Added previously missing Data Visualisation Catalogue Density Plot and Timeline gallery routes, backed by the new density transform and time scale respectively.
Implementation evidence:
- Compiler surface:
app/src/lib/viz/compiler/spec.ts,app/src/lib/viz/compiler/scales.ts,app/src/lib/viz/compiler/guide-format.ts,app/src/lib/viz/compiler/transforms.ts, andapp/src/lib/viz/compiler/compiler.test.ts. - Gallery specs/pages:
app/src/lib/viz/compiler/gallery-specs/density-plot.ts,app/src/lib/viz/compiler/gallery-specs/timeline.ts,app/src/lib/viz/compiler/gallery-specs/gantt-chart.ts,app/src/lib/viz/compiler/gallery-specs/candlestick-chart.ts,app/src/lib/viz/compiler/gallery-specs/open-high-low-close.ts,app/src/lib/viz/compiler/gallery-specs/scatterplot.ts,app/src/lib/viz/compiler/gallery-specs/treemap.ts, andapp/src/lib/viz/compiler/gallery-specs.ts. - Catalogue docs:
docs/chart-catalogue-gallery/density-plot.md,docs/chart-catalogue-gallery/timeline.md,docs/chart-catalogue-gallery/README.md,docs/chart-catalogue-gallery/implementation-tracker.md, and this document.
Remaining high-value gaps:
- Transform coverage is broader but still focused: density, regression, OHLC, error intervals, bins, normal/normalized/stream stacks, summaries, intervals, hierarchy normalization, calendar month layout, mosaic layout, dot-matrix expansion, grouped/diverging layouts, bullet layouts, parallel-coordinate layouts, timetable layouts, radar/radial-bar layouts, arc-diagram layouts, tree/sunburst/circle-pack hierarchy layouts, polar sectors, violin silhouettes, mixed-axis jittered points, scatterplot-matrix panels/points/distributions, and flat squarified treemaps are covered; general graph and flow transforms are still missing, and hierarchy support is first-pass.
- Guide generation covers the common Cartesian cases, basic color/size legends, and focused parallel-coordinate axes, but not general multiple axes, axis titles, collision/density policies, continuous color ramps, or radial/geographic guides.
sqrt,time,log,point,quantile,threshold,nice, symmetric, padded, reversed, and explicit min/max domains are implemented, but diverging scales, nested band scales, and continuous gradient scales are still missing.- Path generation now supports linear, smooth, and step polylines, zero-baseline closure,
y0/y1area bands, and direct compiler-generated path data for polar sectors, radial bars, radar polygons/rings, arc links, sunburst sectors, tree links, and violin silhouettes, but still lacks ribbons, generalized mirrored bands, and general-purpose arc/ribbon generators. - Arithmetic expressions are available for mark params, and the compiler now has focused grouped, bullet, polar-axis, arc-diagram, hierarchy, parallel-coordinate, timetable, mixed-axis jitter, and scatterplot-matrix layout modes plus broad rectangular layout primitives for frames, margins, grids, stacks, and insets. Generalized nested band scales and richer collision/label layout policies remain missing.
Scope And Context
The current compiler can faithfully cover a broader Cartesian subset plus first polar-sector, polar-axis, arc-diagram, and hierarchy subsets:
- Flat data sources with rows and typed fields.
- Executed raw-to-derived transforms for identity, aggregate/distinct rows, bins, numeric/temporal intervals, density samples, regression lines, error intervals, financial OHLC intervals, hierarchy rows, normal/normalized/stream stacks, calendar month cells, mosaic rectangles, dot-matrix points, grouped bars, group centers, bullet bands/markers, parallel-coordinate axes/points/ticks, timetable cells/events, radar axes/rings/polygons/points, radial-bar arcs/tracks, arc-diagram nodes/links, tree nodes/links, sunburst sectors, circle-pack circles, polar sectors, violin silhouettes, mixed-axis jittered points, scatterplot-matrix panels/points/distributions, flat squarified treemaps, and summary statistics.
- Layout rectangles with named properties.
- Linear, sqrt, log, time, band, point, ordinal, stepped sequential, threshold, and quantile scales, with numeric/temporal domain controls for explicit min/max, nice, padded, symmetric, and reversed domains where applicable.
- Generated Cartesian axes and grids from resolved scale ticks, with basic tick formatting.
- Generated color and size legends from resolved scales or explicit legend values.
- Declarative arithmetic expressions for mark geometry.
- Path geometry for linear, smooth, and step lines, baseline area fills, area bands between
y0/y1, and direct generated path data. rect,point,path,line, andtextglyphs.- SVG scene rendering with inspectable glyph lineage.
That is enough for the current first-pass gallery targets: arc diagram, area graph, bar chart, box and whisker plot, bubble chart, bullet graph, calendar, candlestick chart, circle packing, density plot, donut chart, dot matrix chart, error bars, Gantt chart, heatmap, histogram, line graph, Marimekko chart, multi-set bar chart, Nightingale rose chart, open-high-low-close chart, parallel coordinates plot, pie chart, population pyramid, proportional area chart, radar chart, radial bar chart, radial column chart, scatterplot, span chart, stacked area graph, stacked bar graph, stream graph, sunburst diagram, timeline, timetable, tree diagram, treemap, and violin plot. Some of those are still partially faithful because they rely on simplified math, limited label policies, or first-pass layout contracts.
The limiting pattern is clear: the compiler can render primitive marks once coordinates are already present, but it does not yet own enough of the data transformation, scale, layout, and geometry generation work needed by the wider catalogue.
Major Gaps
1. Transform Execution Is Partial
Current state:
TransformSpecincludesidentity,aggregate,stack,treemap,bin,density,errorInterval,financialInterval,hierarchy,interval,layout,regression,sample, andsummary.compileChart()now executesidentity,aggregate,bin,density,errorInterval,financialInterval,hierarchy,interval,regression,stack,summary,treemap, and focused arc-diagram, bullet, calendar, circle-pack, dot-matrix, grouped, diverging, mosaic, mixed-axis jitter, parallel-coordinate, polar-sector, radar, radial-bar, scatterplot-matrix, sunburst, timetable, tree, and violinlayoutmodes before resolving scales.- Transform output tables are addressable by data id in the compiled spec and visible in the gallery data pane.
- Unsupported
layoutmodes remain metadata-only unless a gallery helper precomputes their outputs before compilation.
Why this blocks fidelity:
- Many catalogue charts are defined by derived data: bins, stacks, interval starts/ends, quantiles, densities, hierarchies, graph layouts, and flow widths.
- If those derived rows are hand-authored per example, the chart can look right once but the compiler is not actually capable of reproducing the chart type from input data.
Current transform ownership:
| Current spec | Compiler-owned now | Remaining gap |
|---|---|---|
histogram | Executed bin transform creates bin rows and counts, rendered with linear min/max interval geometry. | Needs richer interval tick labels and density/frequency options. |
stacked | Executed stack transform creates segment start and end; mode: "stream" now creates centered stream boundaries. | Needs richer ordering/baseline policies and 100 percent mode gallery coverage. |
boxWhisker | Executed summary transform creates quartiles and whiskers. | Needs separate outlier extraction and richer statistical policies. |
errorBars | Executed errorInterval transform creates group means and lower/upper uncertainty bounds from raw observations. | Needs asymmetric/external interval policies and richer statistical labels. |
candlestickChart | Executed financialInterval transform creates open, high, low, close, range, and direction rows from ordered raw prices; time scale renders dated sessions. | Needs market-session formatting and minimum body policies. |
calendar | Executed calendar-month layout transform creates weekday/week cell bounds and labels from raw dated rows. | Needs multi-month/year policies, week-start options, and blank-cell output. |
dotMatrixChart | Executed dot-matrix layout transform expands raw category counts into repeated point rows. | Needs richer symbol templates and responsive packing policies. |
openHighLowClose | Reuses executed financialInterval rows for high-low stems and open/close ticks on a time scale. | Needs configurable tick orientation/width. |
marimekkoChart | Executed mosaic layout transform creates variable-width category columns and stacked segment rectangles. | Needs percentage guides, ordering policies, and label hiding for small segments. |
multiSetBar | Executed grouped layout transform creates bar x, width, and group centers; the color legend is generated. | Needs generalized nested band scales. |
pieChart | Executed polar-sector layout transform creates proportional wedge pathD, angles, shares, and label anchors from raw category/value rows. | Needs polar label collision, callouts, and guide policies. |
donutChart | Executed polar-sector layout transform creates annular sector pathD, angles, shares, and label anchors from raw category/value rows. | Needs center-content policies and small-slice label handling. |
nightingaleRoseChart | Executed polar-sector layout transform creates equal-angle, value-radius sector paths from raw category/value rows. | Needs radial grid rings and polar axis guides. |
radarChart | Executed polar-axis layout transforms create radial guide axes, guide rings, closed profile polygons, and vertex points from raw series/metric rows. | Needs generalized polar coordinate systems and label collision policies. |
radialBarChart | Executed radial-bar layout transform creates concentric tracks and value arc paths from raw ordered category rows. | Needs polar guide presets and richer start/end angle policies. |
radialColumnChart | Executed polar-sector layout transform creates equal-angle annular columns with a visible inner baseline. | Needs radial grid rings and linear-radius mode coverage. |
arcDiagram | Executed arc-diagram layout transforms create ordered node positions, node radii, weighted cubic arc paths, and lineage from raw edge rows. | Needs richer node ordering, directed edge styling, and generalized graph layouts. |
ganttChart | Executed interval transform creates temporal start, end, duration, and labels; time scale renders date ticks. | Needs dependency/milestone policies and label collision handling. |
populationPyramid | Executed diverging layout transform creates signed left/right segment rows from raw positive cohort values; the side legend is generated. | Needs richer demographic axis policies. |
stackedAreaGraph | Executed stack transform creates start/end boundaries, and smooth path layers render filled bands between y0 and y1. | Needs 100 percent mode coverage and richer interpolation/baseline variants. |
streamGraph | Executed stack transform with mode: "stream" creates centered start/end boundaries, and smooth area-band paths render the flows. | Needs stream-specific ordering and wiggle/minimum-change baseline policies. |
circlePacking | Executed hierarchy transform creates aggregate parent-child rows, and focused circlePack layout creates nested circle positions/radii. | Needs optimal packing, clipping, and richer label policies. |
sunburstDiagram | Executed hierarchy transform creates aggregate parent-child rows, and focused sunburstSectors layout creates annular sector paths. | Needs radial guide, curved text, and collision-aware label policies. |
treeDiagram | Executed hierarchy transform creates aggregate parent-child rows, and focused treeNodes/treeLinks layouts create node positions and link paths. | Needs radial/orthogonal variants and overlap policies. |
treemap | Executed squarified treemap transform creates tile x, y, width, height, labels, values, and shares from raw metric rows. | Needs hierarchy-aware treemap input/output, depth policies, and label hiding. |
smallMultiples | Facet panel coordinates and sparkline coordinates | Facet layout plus per-panel scales. |
overview | Bar intervals and brush selection geometry | Interval layout and interaction-derived geometry. |
spanChart | Executed interval transform creates start/end ranges rendered as line spans with endpoint symbols. | Needs time scale support for date spans. |
table | Row centers, formatted values, header positions | Table layout and formatting transforms. |
scatterplot | Executed regression transform creates trend path endpoints from raw points. | Needs robust regression/smoothing options and label collision. |
scatterplotMatrix | Executed scatterplot-matrix layout transforms create panel rows, off-diagonal mixed-type scatter point coordinates, and diagonal histogram/horizontal-row distribution rows. | Needs first-class composition scopes, per-cell guides, shared/independent scale policies, and large-matrix renderer strategy. |
densityPlot | Executed density transform creates sampled value/density rows from raw observations, and the path layer now smooths the filled distribution. | Needs grouped/multiple-density policies and bandwidth controls in UI. |
violinPlot | Executed violin layout estimates grouped densities, emits mirrored direct path data, median/IQR coordinates, and source lineage from raw observations. | Needs normalization/bandwidth policy options and optional raw-point overlays. |
timeline | Dated event rows render through a time scale and generated date axis. | Needs collision-aware labels and event layout policies. |
bubbleChart | sqrt scale maps raw size to radius and generated size legends can use the same scale. | Needs overlap/collision policies for dense bubbles. |
bulletGraph | Executed bullet layout transforms create qualitative range, actual measure, and target marker rows from raw metric thresholds. | Needs richer benchmark/label policies. |
parallelCoordinates | Executed parallel-coordinate layout transforms create axis rows, tick rows, and grouped point rows from raw multivariate observations. | Needs brushing, categorical dimensions, and generalized multi-axis guide policies. |
timetable | Executed timetable layout transforms create grid cells, day headers, and duration-aware event rectangles from raw schedule rows. | Needs overlapping-event placement, all-day rows, and richer time labels. |
Catalogue methods affected:
- Histogram, stacked bar graph, stacked area graph, stream graph.
- Box and whisker plot, violin plot, density plot.
- Kagi chart, point and figure chart.
- Marimekko chart, Gantt chart, population pyramid, bullet graph.
- Treemap, circle packing, sunburst, tree diagram.
- Radar chart, radial bar chart, arc diagram.
- Sankey diagram, parallel sets, chord diagrams, flow map.
- Word cloud, timeline, calendar, timetable.
Recommended compiler work:
- Add remaining transform executors: generalized hierarchy policies, graph, flow, rolling windows, and richer statistical variants.
- Expand output contracts so one transform can emit related tables when needed, such as summaries plus outliers.
- Add tests that prove raw input rows do not need derived geometry fields for each newly covered chart family.
- Generalize focused calendar, mosaic, dot-matrix, polar-axis, arc-diagram, hierarchy, and timetable layouts once a second chart needs each layout family.
- Keep transform lineage in the scene graph so inspector flows remain truthful.
Priority: P0 remaining, partially addressed on 2026-05-12.
2. Axes And Guides Are Manual Layers, Not Compiler Concepts
Current state:
AxisSpecandGridSpecnow generate common Cartesian guides from resolved scale ticks or band domains.LegendSpecnow generates basic color and size legends from resolved scales or explicit legend values.- Generated guide tick rows are added to the compiled spec and rendered through normal
lineandtextlayers. - Axis tick labels now support simple formatter declarations for number, absolute, percent, and currency styles.
- Several gallery specs now use generated x/y axes and x/y grids instead of manual tick tables.
- Manual guide layers still exist where the chart needs custom labels, complex legends, continuous ramps, or non-axis annotations.
Why this blocks fidelity:
- Cartesian catalogue charts need consistent axes, ticks, gridlines, tick labels, baselines, axis labels, and sometimes multiple axes.
- Parallel coordinates, timelines, financial charts, and dense plots require many coordinated axes.
- Manual guide data creates repeat bug risk whenever domains, ticks, or labels are edited independently.
Catalogue methods affected:
- All Cartesian charts.
- Parallel coordinates plot.
- Error bars, box and whisker plot, candlestick chart, OHLC chart.
- Timeline, Gantt chart, span chart.
- Population pyramid, bullet graph, marimekko chart.
Recommended compiler work:
- Add axis titles, side-specific styling, and reusable presets for common Cartesian guide configurations.
- Support richer tick formatting and label density/collision policies.
- Add continuous color ramps, better legend layout policies, and collision handling for generated legends.
- Support multiple axes and per-facet axes.
- Preserve generated axis glyph lineage back to the source scale.
Priority: P0 remaining, partially addressed on 2026-05-11.
3. Scale System Is Broader But Still Not Complete
Current state:
- Scale types:
linear,sqrt,log,time,band,point,ordinal,sequential,threshold, andquantile. nice?: booleanis implemented for numeric scales.- Numeric and sequential domains support explicit min/max, padding, symmetric expansion, and reversed domains. Time domains support UTC date parsing, field-union domains, padding, nice bounds, and generated temporal ticks.
- Sequential color can interpolate hex ranges, but tokenized theme ranges still resolve as stepped values.
- No diverging, nested band, or continuous gradient scale model.
Why this blocks fidelity:
- Bubble and proportional area charts should use area-correct radius scales.
- Calendar charts need calendar-aware layout beyond a basic date axis.
- Histograms and numeric span charts use numeric interval geometry; financial charts and Gantt now use temporal scales but still need richer date/session formatting.
- Heatmaps, choropleths, density plots, and diverging displays need better color scales.
- Grouped bars now have a focused layout transform; nested band scales are still needed for reusable categorical composition.
Catalogue methods affected:
- Proportional area chart, bubble map.
- Calendar, timeline, Gantt chart.
- Histogram, candlestick chart, OHLC chart.
- Heatmap, choropleth map, density plot.
- Gantt chart, span chart, multi-set bar chart, marimekko chart, population pyramid.
Recommended compiler work:
- Improve tick generation for awkward numeric domains and expand explicit tick formatting.
- Add
point,log,quantile, andthresholdscales. - Add nested/grouped categorical scales.
- Add continuous color interpolation for sequential and diverging palettes.
- Add remaining scale domain controls: per-facet domains.
Priority: P0/P1, partially addressed on 2026-05-11.
4. Param Expressions Cannot Do Arithmetic
Current state:
- Param sources can read constants, fields, scales, layouts, context, theme tokens, and interaction state.
- Param sources now include declarative arithmetic expressions:
add,subtract,multiply,divide,sqrt,min,max,midpoint, andclamp. - Expression lineage is visible in the data-flow graph and glyph data tree.
- Workarounds still precompute larger layout operations, such as facet panel coordinates and table cell positions.
Why this blocks fidelity:
- Many chart layouts need simple arithmetic even when the core mark primitive exists.
- Without expressions, examples leak compiler geometry into data rows.
Current workarounds:
- Generalized grouped/faceted layouts beyond the focused grouped-bar transform.
- Small multiple point coordinates.
- Table cell coordinates.
- Facet and table label positions.
- Bubble radius square root.
- Label offsets for scatter/outlier annotations.
Catalogue methods affected:
- Multi-set bar chart, bullet graph, span chart, Gantt chart.
- Error bars, candlestick chart, OHLC chart.
- Dot matrix chart, pictogram chart, tally chart.
- Small multiples style layouts used by several analytical views.
Recommended compiler work:
- Use expressions to remove more one-off label/cap/offset fields from gallery specs.
- Add higher-level layout transforms for cases where expressions would become repeated chart-specific math.
- Avoid general arbitrary JavaScript in specs; keep expressions declarative and typed.
Priority: P1, partially addressed on 2026-05-11.
5. Path Geometry Is Still Missing Radial Lines, Arcs, And Ribbons
Current state:
pathmarks are generated from sorted points withlinear,smooth, orstepinterpolation.- A path can optionally close to one constant y baseline with
closedToY. - A path can now render an area band between
y0andy1, which covers range-area and stacked-area families when paired with the right transform. - A path can now render direct compiler-generated
ddata, and focused layouts can generate wedge, annular-sector, radar-polygon, radar-ring, radial-bar, arc-link, sunburst-sector, tree-link, and silhouette paths. - There is no ribbon generator or general-purpose arc/ribbon path library.
Why this blocks fidelity:
- Many catalogue charts are defined by specialized shapes, not just points connected with straight lines.
Catalogue methods affected:
- Stream graph, density plot, violin plot.
- Chord diagram, non-ribbon chord diagram.
- Sankey diagram, parallel sets, flow map.
- Pie chart, donut chart, richer radial bar chart, radial column chart, nightingale rose chart, sunburst diagram.
- Richer radar chart and spiral plot.
- Kagi chart and point-and-figure chart need specialized path/symbol generation.
Recommended compiler work:
- Add path generators: radial line, generalized arc, annular sector, ribbon.
- Extend interpolation options where needed beyond the current smooth/step pass.
- Reuse
y0/y1area bands for range areas and stream/stacked area variants; keep direct path rows for silhouette cases until generalized mirrored bands exist. - Preserve generated path parameters and source lineage.
Priority: P1/P2, partially addressed on 2026-05-12.
6. Coordinate Systems Are Cartesian Only
Current state:
- Layouts are rectangular.
- Scales map to x/y screen coordinates.
- Focused
polarSectors,radialBars,radar*, andsunburstSectorslayouts can emit pie, donut, Nightingale rose, radial-column, radial-bar, radar, and sunburst path geometry from raw rows. - There is no general polar/radial coordinate system, spiral layout, or geographic projection system.
Why this blocks fidelity:
- A large part of the catalogue is non-Cartesian.
- The compiler now owns first-pass sector path generation for flat and hierarchical sectors plus first-pass radar/radial-bar geometry, but broader radial charts still need reusable angle/radius scales, generalized guide rings, and coordinate-system lineage.
Catalogue methods affected:
- Richer variants of radar chart, radial bar chart, pie, donut, radial column, and nightingale rose chart.
- Spiral plot and richer sunburst diagram.
- Choropleth map, bubble map, dot map, connection map, flow map.
Recommended compiler work:
- Add coordinate systems:
cartesian,polar,radial,geo. - Add polar scale mapping for angle/radius.
- Add projection support for geographic coordinates and GeoJSON shapes.
- Make coordinate systems participate in lineage and guide generation.
Priority: P2 for polar/radial, P3 for geo.
7. No Geographic Shape Or Projection Support
Current state:
symbolMapcan place points using longitude/latitude as simple x/y scales.- There is no projection math, basemap, topology/GeoJSON support, path clipping, or geographic feature rendering.
Why this blocks fidelity:
- Geographic catalogue charts require map boundaries and projections, not just numeric scatter coordinates.
Catalogue methods affected:
- Choropleth map.
- Dot map.
- Bubble map.
- Connection map.
- Flow map.
Recommended compiler work:
- Add a
geoFeatureor generatedpathlayer fed by projected GeoJSON. - Add projection configuration: at minimum Mercator/Albers/equirectangular.
- Add geographic fit-to-bounds layout.
- Add point projection helpers for lon/lat symbol layers.
Priority: P3.
8. Hierarchical, Network, And Flow Layout Engines Are Partial
Current state:
- Treemap now has compiler-owned flat squarified tiling for metric rows.
- The compiler now has a first-pass
hierarchytransform for flat parent-child rows, including aggregate values, depth, child counts, labels, and source lineage. - Focused tree, sunburst, and circle-pack layout modes can derive first-pass node/link, annular-sector, and nested-circle geometry from normalized hierarchy rows.
- Focused arc-diagram layout modes can derive first-pass node positions, node radii, weighted cubic links, and source lineage from raw edge rows.
- No first-class edge/link data model.
- No force, radial tree, chord, Sankey, alluvial, or production-grade packing layout.
Why this blocks fidelity:
- Catalogue diagram-like methods are layout-driven. Marks are the easy part after layout exists.
Catalogue methods affected:
- Treemap, richer circle packing, richer sunburst diagram.
- Richer tree diagram, network diagram, flow chart, richer arc diagram.
- Sankey diagram, parallel sets.
- Chord diagram, non-ribbon chord diagram.
Recommended compiler work:
- Add typed hierarchy inputs and edge-list inputs.
- Generalize hierarchy transforms: stratify, tidy/radial tree, production pack, partition, and hierarchy-aware squarified treemap.
- Add flow transforms: Sankey/alluvial, chord matrix layout.
- Add link/ribbon path generation.
Priority: P2/P3.
9. Statistical Transforms Are Narrow
Current state:
- The compiler now has a
summarytransform for grouped quartiles, medians, IQR, and whiskers. - The compiler now has an
errorIntervaltransform for grouped means and uncertainty bounds. - The compiler now has a
financialIntervaltransform for ordered OHLC summaries from raw price ticks. - The compiler now has a
regressiontransform for simple linear trend endpoints from raw paired observations. - The compiler now has a
densitytransform for sampled kernel-density rows from raw observations. - The compiler now has a focused
violinlayout mode for grouped density silhouettes, medians, and quartile guides from raw observations. - Histogram binning is compiler-owned by the
bintransform. - There is no rolling-window, robust-regression, grouped-density policy, or outlier-table transform yet.
Why this blocks fidelity:
- Statistical charts must compute their anatomy from raw observations.
Catalogue methods affected:
- Box and whisker plot.
- Violin plot.
- Density plot.
- Scatterplot trend lines, first-pass density plots, and first-pass violin plots are compiler-owned; richer density policies remain.
Recommended compiler work:
- Add transforms for outliers, rolling windows, robust regression, grouped density policy, and density bandwidth strategies.
- Define output schemas for each transform.
- Add tests that compile from raw rows to expected derived rows.
Priority: P1.
10. Text, Symbols, Icons, And Collision Layout Are Limited
Current state:
- Text glyphs render simple labels at explicit coordinates.
- There is no collision avoidance, text wrapping, text along path, icon glyph, reusable symbol template, or repeated-symbol layout.
Why this blocks fidelity:
- Several catalogue charts depend on text/symbol layout more than numeric mark geometry.
Catalogue methods affected:
- Word cloud.
- Pictogram chart.
- Tally chart.
- Point and figure chart.
- Stem and leaf plot.
- Timeline annotations.
- Calendar and timetable labels.
- Dense scatterplot labels.
Recommended compiler work:
- Add symbol/icon glyph support or symbol templates.
- Add text measurement and collision-aware placement.
- Add repeated-symbol layout for pictograms and tally marks.
- Add text wrapping/truncation policies.
Priority: P3/P4.
11. Styling Features Are Basic
Current state:
- Marks support fill, stroke, stroke width, opacity, and rect radius.
- There is no gradient fill, clip path, mask, blend mode, pattern fill, dashed line, stroke cap/join, or semantic legend generation.
Why this blocks fidelity:
- Many catalogue examples can be recognizable without these features, but faithful reproduction often needs them.
Catalogue methods affected:
- Stream graph and density styles.
- Venn diagram overlaps.
- Choropleth and heatmap legends.
- Sankey and chord ribbons.
- Financial charts and error bars with tick caps/dashes.
- Pictogram/pattern-heavy displays.
Recommended compiler work:
- Add style params for dash arrays, line caps, joins, patterns, gradients, clips, and masks.
- Add legend guide generation from color/size scales.
- Keep style params static or tokenized unless they are truly data driven.
Priority: P2/P3.
12. Data Model Is Too Flat For Some Chart Families
Current state:
DataSourceSpecis a flat row table.- Rows can carry ids and source rows, and the
hierarchytransform can interpret flat parent-child tables. - There is still no first-class dataset role/schema for hierarchy, graph edges, geographic features, or matrix data.
Why this blocks fidelity:
- Rich catalogue charts often need relationships, parent/child nesting, edge weights, topology, or multidimensional matrices.
Catalogue methods affected:
- Network diagram, richer tree diagram, arc diagram.
- Chord diagram, Sankey diagram, parallel sets.
- Richer circle packing, richer sunburst, treemap.
- Choropleth map and other map methods.
- Heatmap can work now, but a matrix abstraction would make it cleaner.
Recommended compiler work:
- Add typed dataset roles:
table,matrix,hierarchy,edgeList,geoFeatures. - Add validators for transform input/output contracts.
- Preserve stable internal ids separately from display labels and source names.
Priority: P2.
Catalogue Method Coverage By Primary Missing Capability
This table assigns each catalogue method from the review to the main compiler gap that prevents a faithful general implementation. Some methods have multiple blockers; the primary blocker is the first one to solve.
| Catalogue method | Current status | Primary gap | Notes |
|---|---|---|---|
| Arc Diagram | Partial | Edge-list ordering and richer link policy | First-pass arc layout derives ordered node positions and weighted cubic arc paths from raw edge rows. |
| Area Graph | Covered | Richer interpolation polish | Baseline area now uses y0/y1 area-band geometry; smooth/step path policies exist for examples that need them. |
| Bar Chart | Covered | Axis/legend polish | Core marks work and generated axes/grids are available. |
| Box & Whisker Plot | Mostly covered | Outlier extraction/statistical policy | Quartiles and whiskers are compiler-owned; outlier table generation is still missing. |
| Brainstorm | Out of scope | Diagram layout | More freeform diagramming than chart grammar. |
| Bubble Chart | Mostly covered | Dense overlap/collision policy | Raw size maps through a sqrt scale and the size legend is generated. |
| Bubble Map | Blocked | Geographic projection | Also needs area scale. |
| Bullet Graph | Mostly covered | Benchmark/label policy | Bullet layout now derives range bands, actual bars, and target markers from raw thresholds. |
| Calendar | Mostly covered | Calendar policy breadth | Raw dated rows compile through calendar-month layout; multi-month/year and week-start policies remain. |
| Candlestick Chart | Covered | Financial formatting polish | Raw ordered prices compile through financialInterval into OHLC rows; a time scale renders dated sessions. |
| Chord Diagram | Blocked | Radial chord layout and ribbons | Needs matrix layout and ribbon paths. |
| Choropleth Map | Blocked | Geographic shapes/projection | Needs GeoJSON rendering and color legend. |
| Circle Packing | Partial | Packing and label policy | First-pass hierarchy plus circlePack layout derives nested circles; production packing remains. |
| Connection Map | Blocked | Geographic projection and curved routes | Needs projected point links. |
| Density Plot | Covered | Bandwidth policy polish | Raw observations compile through the density transform; smooth baseline-closed path rendering fills the distribution. |
| Donut Chart | Mostly covered | Polar guide/label policies | Annular sector paths are generated by polarSectors; callouts and center-content layout remain. |
| Dot Map | Blocked | Geographic projection | Dot marks exist after projection. |
| Dot Matrix Chart | Mostly covered | Symbol-template policy | Raw counts compile through dot-matrix expansion into repeated point rows. |
| Error Bars | Covered | Statistical policy breadth | Raw grouped observations compile through errorInterval; line caps and point marks render the intervals. |
| Flow Chart | Blocked | Node-link layout | Diagram layout rather than scale-driven chart. |
| Flow Map | Blocked | Geographic projection and flow paths | Also needs variable-width link geometry. |
| Gantt Chart | Mostly covered | Dependency/milestone semantics and label policies | Temporal interval transform creates dated start/end rows for rect bars on a time scale. |
| Heatmap | Mostly covered | Continuous color ramps | Matrix rects and generated stepped legends work now. |
| Histogram | Covered | Tick formatting/frequency policies | Bins are compiler-owned and render on a linear interval x scale. |
| Illustration Diagram | Out of scope | Freeform illustration system | Not a structured chart target. |
| Kagi Chart | Blocked | Financial/reversal transform and custom path generation | Needs threshold/reversal semantics. |
| Line Graph | Covered | Axis abstraction | Path ordering and axes now work for simple line charts. |
| Marimekko Chart | Mostly covered | Mosaic guide/label policy | Raw category/series values compile through mosaic layout into variable-width stacked rectangles. |
| Multi-set Bar Chart | Mostly covered | Nested band scale and generated legend | Grouped layout now derives x offsets and widths from raw rows. |
| Network Diagram | Blocked | Graph layout | Needs nodes, links, and force/static graph layout. |
| Nightingale Rose Chart | Mostly covered | Polar guide policies | Equal-angle value-radius sectors are generated by polarSectors; radial rings/axes remain. |
| Non-ribbon Chord Diagram | Blocked | Radial node/link layout | Needs circular node order and links. |
| Open-high-low-close Chart | Covered | Tick styling polish | Reuses financialInterval OHLC rows for high-low stems and open/close ticks on a time scale. |
| Parallel Coordinates Plot | Mostly covered | Brushing and generalized multi-axis policies | Focused layout now derives per-axis guides, ticks, and grouped polyline points from raw observations. |
| Parallel Sets | Blocked | Alluvial layout/ribbon geometry | Needs category flow layout. |
| Pictogram Chart | Blocked | Icon/symbol templates | Needs repeated icons and layout. |
| Pie Chart | Mostly covered | Polar label policies | Proportional wedge paths are generated by polarSectors; small-slice labels/callouts remain. |
| Point & Figure Chart | Blocked | Symbol grid transform | Text/symbol marks exist only in primitive form. |
| Population Pyramid | Mostly covered | Dense-axis policies | Diverging layout, symmetric x domain, absolute tick labels, and generated side legend cover the core chart. |
| Proportional Area Chart | Covered | Label collision polish | Point/circle radius uses a sqrt scale and size legend generation is available. |
| Radar Chart | Mostly covered | Polar coordinate and label policy | First-pass radar layout derives radial axes, guide rings, closed profile polygons, and vertex points from raw metric rows. |
| Radial Bar Chart | Mostly covered | Polar guide and angle policies | First-pass radial-bar layout derives concentric tracks and value sweep arcs from raw category rows. |
| Radial Column Chart | Mostly covered | Polar guide policies | Equal-angle annular columns are generated by polarSectors; radial rings/axes and linear-radius mode remain. |
| Sankey Diagram | Blocked | Flow layout and ribbons | Needs node/link widths and Bezier/ribbon paths. |
| Scatterplot | Covered | Label collision and trend policy polish | Core point chart works; regression trend rows are compiler-owned. |
| Span Chart | Covered | Time/interval formatting polish | Numeric interval transform renders span lines and endpoint marks. |
| Spiral Plot | Blocked | Spiral coordinate system | Needs custom polar/spiral mapping. |
| Stacked Area Graph | Covered | 100 percent and richer interpolation variants | Stack boundaries now render through smooth area-band path geometry. |
| Stacked Bar Graph | Mostly covered | 100 percent stack mode coverage | Segment starts/ends are compiler-owned for normal stacks. |
| Stem & Leaf Plot | Blocked | Text/statistical table transform | Needs text layout from numeric decomposition. |
| Stream Graph | Covered | Stream ordering/baseline policies | stack stream mode derives centered boundaries and smooth area-band paths render the flow. |
| Sunburst Diagram | Partial | Radial hierarchy polish | First-pass hierarchy plus sunburstSectors layout derives annular paths; curved labels/guides remain. |
| Tally Chart | Blocked | Repeated tally symbol templates | Needs repeated angled strokes or symbol glyph. |
| Timeline | Covered | Label collision and event layout policies | Lines/points/text render dated events on a generated time axis. |
| Timetable | Mostly covered | Overlap and time-label policies | Timetable layout now derives grid cells, day headers, and duration-aware event blocks from raw schedule rows. |
| Tree Diagram | Partial | Hierarchical node-link polish | First-pass hierarchy, treeNodes, and treeLinks derive tidy nodes and generated link paths. |
| Treemap | Partial | Nested hierarchy layout | Flat metric rows now compile through a squarified treemap transform; nested parent/child hierarchy remains missing. |
| Venn Diagram | Blocked | Circle overlap layout and blend/clip styles | Needs overlap math and compositing controls. |
| Violin Plot | Covered | Density normalization/bandwidth policies | Focused violin layout estimates grouped densities and emits mirrored direct path silhouettes with summary guides. |
| Word Cloud | Blocked | Text packing/collision layout | Needs measuring and placement. |
Recommended Implementation Roadmap
P0: Make The Current Cartesian Core Trustworthy
Done on 2026-05-11:
- Execute focused transform specs instead of hand-authoring every transform output.
- Add first-class axis/grid generation from scales.
- Implement linear
nicedomains and add tests for generated guide spacing/domain safety. - Add explicit tick formatting plus padded, reversed, and symmetric numeric domains.
- Add a diverging-bar layout transform for population-pyramid style Cartesian charts.
- Add basic color and size legend generation from resolved scales.
- Add
y0/y1area-band paths and use them for Area Graph plus Stacked Area Graph. - Add explicit numeric min/max domain controls.
- Add
errorIntervalandfinancialIntervaltransforms and use them for Error Bars, Candlestick Chart, and OHLC Chart. - Add
timescales and date tick formatting, then move Gantt, Candlestick, OHLC, and Timeline onto dated axes. - Add
regressionanddensitytransforms, then use them for Scatterplot and Density Plot. - Execute squarified
treemaplayout in the compiler instead of a gallery helper. - Add focused
calendarMonth,mosaic, anddotMatrixlayout modes, then use them for Calendar, Marimekko Chart, and Dot Matrix Chart. - Add direct generated path data plus focused
polarSectorslayout, then use them for Pie Chart, Donut Chart, Nightingale Rose Chart, and Radial Column Chart. - Add smooth/step path interpolation, stream stack mode, and focused
violinlayout, then use them for Stream Graph and Violin Plot. - Add focused bullet, parallel-coordinate, and timetable layout modes, then use them for Bullet Graph, Parallel Coordinates Plot, and Timetable.
- Add hierarchy normalization plus focused tree, sunburst, and circle-pack layout modes, then use them for Tree Diagram, Sunburst Diagram, and Circle Packing.
- Add focused polar-axis/radial-bar and arc-diagram layout modes, then use them for Radar Chart, Radial Bar Chart, and Arc Diagram.
Remaining:
- Expand transform execution beyond the current Cartesian/statistical/layout set into generalized hierarchy, graph, and flow families.
- Generalize beyond focused parallel-coordinate axes into multiple axes, axis titles, richer legend layouts, and label density policies.
- Add per-facet domains.
Expected impact:
- Removes the class of bugs that caused the compressed top y interval.
- Makes arc diagram, bar, line, scatter, bubble, bullet, calendar, circle packing, Gantt, histogram, dot matrix, Marimekko, parallel coordinates, pie, donut, Nightingale rose, radar, radial bar, radial column, stacked bar, grouped bar, stream graph, sunburst diagram, tree diagram, violin plot, population pyramid, proportional area, error bars, candlestick, OHLC, span, density, timetable, timeline, treemap, and heatmap examples more compiler-owned.
P1: Add Interval, Grouped, Area, And Statistical Building Blocks
- Generalize grouped layout into nested band scales and reusable categorical layout modes.
- Generalize focused calendar, mosaic, dot-matrix, bullet, parallel-coordinate, and timetable layouts into reusable policy-rich layout families.
- Use arithmetic param expressions broadly; the primitive expression layer now exists.
- Add quantile policy options, outlier outputs, robust regression, grouped density, and rolling-window transforms.
- Extend the first smooth/step path interpolation pass with richer curve, monotone, and stream-specific ordering/baseline policies.
Expected impact:
- Unlocks richer Gantt, histogram, multi-set bar, Calendar, Marimekko, Dot Matrix, Bullet Graph, Parallel Coordinates Plot, Timetable, box plot, stacked area graph, stream graph, grouped density variants, and violin plot. Error bars, candlestick/OHLC, density plot, timeline, and span chart now have first-pass gallery coverage.
P2: Add Polar/Radial And Hierarchy Families
- Generalize the focused
polarSectors,radialBars, andradar*layouts into reusable polar/radial coordinate systems. - Add broader arc/annular sector, radial line, and ribbon path generators.
- Generalize the focused hierarchy layouts into reusable stratify, squarified treemap, pack, partition, and tree families.
- Add radial axes and labels.
Expected impact:
- Unlocks richer radial bar, richer radar, richer sunburst, richer circle packing, and better treemap/tree support. Pie, donut, Nightingale rose, radar, radial bar, radial column, sunburst, circle packing, and tree diagram now have first-pass gallery coverage.
P3: Add Geo, Graph, And Flow Layouts
- Add geographic projection and GeoJSON feature rendering.
- Generalize beyond focused arc-diagram layout into broader graph layouts and curved link paths.
- Add Sankey/alluvial/chord transforms and ribbon geometry.
Expected impact:
- Unlocks maps, richer network/arc diagrams, Sankey, parallel sets, chord diagrams, and flow maps.
P4: Add Text/Icon Packing And Rich Styling
- Add icon/symbol glyph templates.
- Add text measurement and collision placement.
- Add word-cloud packing.
- Add gradients, masks, clipping, blend modes, pattern fills, stroke caps/joins/dashes, continuous color-ramp legends, and richer size legend placement.
Expected impact:
- Unlocks pictograms, tally charts, word clouds, point-and-figure charts, Venn diagrams, and higher-fidelity styling across all families.
Design Decisions And Tradeoffs
- Keep chart types as layer presets, not separate renderer components. This preserves the compiler direction already documented in
AGENTS.md. - Prefer declarative transforms and path generators over arbitrary callback code. This keeps charts inspectable and serializable.
- Preserve manual precomputed examples only as fixtures while the compiler lacks the needed transform. Do not let them become the final chart-type implementation.
- Add guide-generation tests before adding more chart examples. Axis and guide drift is easy to miss visually and should be caught mechanically.
Problems Encountered And Resolutions
| Problem | Resolution |
|---|---|
| Manual tick rows drifted from data-derived domains, causing clamped gridlines and compressed top intervals. | Round tick domains were made explicit for affected examples; tests now check guide spacing and guide input domain membership. |
| X axes had labels/baselines but no vertical gridlines or tick marks. | Added reusable x-grid and tick-mark guide layers for numeric x-axis examples. |
| Symbol-map guide values could sit outside data-derived domains and clamp to the frame. | Changed map x/y domains to explicit values that include guide lines. |
| Several examples look faithful only because derived geometry is embedded in rows. | Moved histogram intervals, grouped bar offsets, Gantt intervals, scatterplot regression, density samples, and treemap tiles into compiler-owned transforms; remaining fixture geometry is tracked above. |
Stacked area needed two changing boundaries, but path only supported one y plus optional constant baseline closure. | Added y0/y1 area-band path generation and reused the existing stack transform to produce boundaries from raw period/series rows. |
| Polar charts needed generated SVG paths but the path layer only knew how to build point-connected paths. | Added a direct d path param and a focused polarSectors layout that generates wedge and annular sector paths from raw rows. |
| Stream and violin charts needed curved or mirrored silhouettes beyond straight point paths. | Added smooth/step path interpolation, stack stream mode, and focused violin layout output with direct path data and summary guides. |
| Hierarchy charts needed related rows without adding a new dataset primitive. | Added a hierarchy transform that normalizes flat parent-child rows, then focused tree, sunburst, and circle-pack layouts consume those rows. |
| Calendar cells rendered black during browser smoke testing. | One sequential color token in the new Calendar spec was not available in the theme; replaced the ad-hoc range with the existing heatPalette. |
| The sandboxed Vinxi dev server could not allocate its random internal port. | Restarted the same local dev server on explicit port 3004 outside the sandbox for browser smoke testing, then stopped it after verification. |
Verification And Validation
Recent verification from the implementation pass:
pnpm -C app type-check: passed after the hierarchy layout pass.pnpm -C app test: passed with compiler regression coverage for hierarchy normalization, circle-pack output, sunburst sector paths, tree node/link layouts, and the new Circle Packing, Sunburst Diagram, and Tree Diagram gallery ids.- Browser smoke test at
http://localhost:3000/_internal/chart-compiler/*: passed for Circle Packing, Sunburst Diagram, and Tree Diagram detail routes; each rendered the route title, SVG chart marks, and no browser console warnings or errors. pnpm -C app type-check: passed after the near-fit layout pass.pnpm -C app test: passed with compiler regression coverage for bullet range/measure/target rows, parallel-coordinate axes/ticks/points, timetable grid/header/event rows, and the new Bullet Graph, Parallel Coordinates Plot, and Timetable gallery ids.- Browser smoke test at
http://localhost:3000/_internal/chart-compiler/*: passed for Bullet Graph, Parallel Coordinates Plot, and Timetable detail routes; each rendered one chart SVG with expected data-layer marks and no console warnings or errors. pnpm -C app type-check: passed after the stream/violin pass.pnpm -C app test: passed with compiler regression coverage for smooth path output, stream stack boundaries, violin layout output, and the new Stream Graph and Violin Plot gallery ids.- Browser smoke test at
http://localhost:3006/_internal/chart-compiler/*: passed for Stream Graph and Violin Plot detail routes. Stream Graph rendered 4 smooth SVG paths and exposedcurve: "smooth"in the stage panel; Violin Plot rendered 3 direct path silhouettes plus guide lines and exposeddirectD; browser console reported no warnings or errors. pnpm -C app type-check: passed after the polar-sector path pass.pnpm -C app test: passed with compiler regression coverage for direct generated path lineage, polar-sector output rows, and the new Pie Chart, Donut Chart, Nightingale Rose Chart, and Radial Column Chart gallery ids.- Browser smoke test at
http://localhost:3005/_internal/chart-compiler/*: passed for Pie Chart, Donut Chart, Nightingale Rose Chart, and Radial Column Chart detail routes; each rendered 5 sector paths, exposeddirectDin the stage panel, and reported no console errors. pnpm -C app type-check: passed after the calendar/mosaic/dot-matrix layout pass.pnpm -C app test: passed with compiler regression coverage forcalendarMonth,mosaic, anddotMatrixlayout output rows plus the new Calendar, Marimekko Chart, and Dot Matrix Chart gallery ids.- Browser smoke test at
http://localhost:3002/_internal/chart-compiler/*: passed for Calendar, Dot Matrix Chart, and Marimekko Chart detail routes; each rendered expected SVG marks/stage metadata and no browser console errors were reported. A visual pass caught an invalid Calendar color token, which was replaced with the existingheatPalette. pnpm -C app type-check: passed after the temporal/density/regression/treemap pass.pnpm -C app test: passed with compiler regression coverage for time scales/date tick formatting, density output rows, scatterplot regression rows, executable treemap rows, and the new Density Plot/Timeline gallery ids.- Browser smoke test at
http://localhost:3002/_internal/chart-compiler/*: passed for Density Plot, Timeline, Gantt, Candlestick, OHLC, Scatterplot, and Treemap detail routes; each rendered expected SVG marks/stage metadata and no browser console errors were reported. pnpm -C app type-check: passed after the area-band/stacked-area pass.pnpm -C app test: passed with compiler regression coverage fory0/y1area-band lineage, generated stacked-area segment boundaries, and the new gallery id.- Browser smoke test at
http://localhost:3000/_internal/chart-compiler/stackedAreaGraph: passed; the route rendered the Stacked Area Graph, the stage panel exposedareaBand, and the SVG contained 3 area-band paths plus 3 upper-edge paths. pnpm -C app type-check: passed after the generated-legend/proportional-area pass.pnpm -C app test: passed with compiler regression coverage for generated color and size legends plus the new proportional-area gallery id.- Browser smoke test at
http://192.168.1.125:3000/_internal/chart-compiler/proportionalAreaChart: passed; the route rendered the Proportional Area Chart, 3 generated size-legend symbols, and no browser console errors. The sandboxedlocalhostURL was blank from the browser/shell context, but the Vinxi-reported network URL worked. pnpm -C app type-check: passed after the diverging-domain/population-pyramid pass.pnpm -C app test: passed with compiler regression coverage for diverging layout output, symmetric x domains, and absolute axis tick labels.- Browser smoke test at
http://localhost:3004/_internal/chart-compiler/populationPyramid: passed; the route rendered 36 population bar rects, one centerline, and absoluteMx-axis labels with no browser console errors. pnpm -C app type-check: passed after the interval/grouped-layout/Gantt pass.pnpm -C app test: passed with compiler regression coverage for grouped layout output, interval output, x-grid ticks, and guide domain safety.- Browser smoke test at
http://localhost:3004/_internal/chart-compiler: passed for the index, Gantt, histogram, and multi-set bar detail routes with no console errors. pnpm -C app test: passed with compiler regression coverage for y-grid spacing, x-axis presence, x-grid/tick layers, and guide inputs inside linear domains.pnpm -C app type-check: passed.- Browser visual check: bubble chart showed vertical x-gridlines, x tick marks, x labels, y gridlines, and corrected y spacing.
Process Improvements
Add a "derived geometry audit" step whenever a new catalogue chart is added.
- Pain: precomputed rows can hide missing compiler capabilities.
- Change: identify fields such as
x,y,x0,x1,width,height,start,end,radiusValue, and decide whether they are raw data or compiler output. - Benefit: chart examples stay aligned with the compiler roadmap.
- Place to encode:
AGENTS.mdData Visualization Charting section or a dedicated chart-compiler skill.
Require guide-domain tests for new guide layers.
- Pain: manually authored tick and grid tables can drift from scale domains.
- Change: add tests whenever guide layers use scaled values.
- Benefit: catches compressed or clamped axes without relying only on screenshots.
- Place to encode: compiler test helper.
Prefer one helper per repeated guide pattern.
- Pain: manual axes duplicate x/y gridline logic and increase drift risk.
- Change: use reusable guide helpers until first-class
AxisSpecexists. - Benefit: improves consistency now and makes migration to generated axes easier.
- Place to encode:
gallery-specs.tshelpers, then compiler guide module.
Agent/System Prompt Or Skill Improvements
Suggested addition to repo guidance:
When adding a chart compiler gallery example, document every non-source field in the example data and classify it as raw data, transform output, layout output, or temporary fixture geometry. If it is temporary fixture geometry, add a tracker follow-up for the compiler feature that should generate it.
Why:
- It prevents polished examples from masking missing compiler features.
- It keeps future chart additions useful as compiler capability tests instead of isolated demos.
Follow-ups And Open Risks
| Priority | Follow-up | Risk if delayed |
|---|---|---|
| P0 | Expand transform specs beyond the current focused executors. | Generalized hierarchy, graph, and flow charts remain blocked or first-pass only. |
| P0 | Generalize focused parallel-coordinate axes into axis titles, richer tick-density/collision policies, and reusable multiple-axis support. | Axis labels stay brittle and visually inconsistent outside the focused parallel-coordinate path. |
| P0 | Improve generated legends with continuous ramps, collision policies, and placement presets. | Legends work for simple swatches/symbols but dense or continuous encodings remain visually brittle. |
| P1 | Generalize grouped, calendar, mosaic, dot-matrix, bullet, parallel-coordinate, and timetable layout policies. | Richer timetable, Marimekko variants, pictogram-style grids, and reusable categorical composition remain partial. |
| P1 | Use arithmetic param expressions broadly and extend the first smooth/step interpolation policies. | Simple offsets and advanced line/area variants keep leaking geometry or style policy into data rows. |
| P1 | Add richer statistics transforms. | Box plot outliers, rolling-window charts, robust trend lines, and grouped density variants remain blocked or simplified. |
| P2 | Add arcs, ribbons, and polar/radial coordinates. | Radial and flow charts remain impossible without precomputed SVG paths. |
| P2 | Generalize hierarchy layouts beyond the first-pass tree, sunburst, and circle-pack modes. | Hierarchy examples render, but production packing, radial trees, depth policies, and hierarchy-aware treemaps remain partial. |
| P3 | Add geo projections and feature paths. | Map families remain blocked. |
| P3 | Add graph and flow layout engines. | Network, Sankey, chord, parallel sets, and flow charts remain blocked. |
| P4 | Add text/icon packing and richer styling. | Word clouds, pictograms, tally charts, and overlap-heavy charts remain blocked. |