@tanstack/charts
1.1.0 · 9 Oct 2026MIT352.7k / weekRepositoryHomepagenpmAtom feed
36 stable releases, newest first, by release line. Notes are quoted as the maintainers published them.
- 1.x · latest line
1.1.0
9 Oct 2026Add opt-in
fit: 'compress'for crowded dodge layouts andaxis.ticks.linefor styling or hiding tick stubs independently of labels. Preserve existing layout and tick defaults.Pass
brushXformata context naming thestartorendhandle it is labeling, so values that mark boundaries between items can produce correct value text for each handle.Keep the number of selected values when dragging a
brushXselection with explicitvalues, including when the drag stops at the edge of the plot.
@tanstack/charts
Minor Changes
Add opt-in
fit: 'compress'for crowded dodge layouts andaxis.ticks.linefor styling or hiding tick stubs independently of labels. Preserve existing layout and tick defaults.Pass
brushXformata context naming thestartorendhandle it is labeling, so values that mark boundaries between items can produce correct value text for each handle.
Patch Changes
Keep the number of selected values when dragging a
brushXselection with explicitvalues, including when the drag stops at the edge of the plot.Remove built-in card styles from custom tooltip bodies and restore them when returning to the built-in tooltip.
Accept the first resize observer's measurement precision when layout and CSS content dimensions are unchanged, avoiding a spurious resize that cancels entrance motion. Continue responding to actual fractional resizes.
Use the scale returned by its range setter so immutable custom scales receive the chart's pixel range without changing their source.
Look up interaction values by key and snap pointer positions by binary search, so
brushX,zoomX,handleX, and cursors with many explicit values stay responsive while dragging.Mark React chart entries as client components for React Server Component applications. Document where chart definitions belong and how to render a hydration-safe client-only chart.
Avoid repeating focus callbacks after scene updates when the focused datum and group have not changed. Continue repainting updated geometry and notifying changed data or group membership.
1.0.0
3 Oct 2026- breaking
Establish the TanStack Charts 1.0 compatibility contract for documented public
APIs, extension protocols, framework support, and renderer behavior. Keep
optional capabilities behind their existing import boundaries. React Native
remains experimental with its documented validation limits. Allow custom datum groups to own focus paint and transitions with
states.target: 'group', avoiding repeated state styling on every child. Evaluate geometry styles only for the scene kinds that support them.Allow tick-label opacity callbacks to read live focus and pointer state without
re-running layout. Preserve inline states and point-set ownership on decorative
marks without adding interaction targets.
@tanstack/charts
Major Changes
- breaking
Establish the TanStack Charts 1.0 compatibility contract for documented public
APIs, extension protocols, framework support, and renderer behavior. Keep
optional capabilities behind their existing import boundaries. React Native
remains experimental with its documented validation limits.
Minor Changes
Allow custom datum groups to own focus paint and transitions with
states.target: 'group', avoiding repeated state styling on every child. Evaluate geometry styles only for the scene kinds that support them.Allow tick-label opacity callbacks to read live focus and pointer state without
re-running layout. Preserve inline states and point-set ownership on decorative
marks without adding interaction targets.Add opt-in series hover and keyboard emphasis to interactive color legends.
Inline states use an independent legend source while interaction focus,
tooltips, crosshairs, and pinned selection retain their existing owner. Extend
the SVG, Canvas, and motion renderer protocols to support independent state
focus, and export the browser control extension types.Preserve dot series ownership for legend visibility when
zsupplies the
default color channel, without filtering independent per-point colors as series.Support focus states on polar and geographic marks, including polar container defaults, per-mark overrides, and existing renderer-neutral state transitions.
Patch Changes
Preserve server-rendered Angular chart nodes during hydration instead of
replacing them through the initial markup binding. Keep reactive updates and
teardown owned by the mounted chart renderer.Keep the default tooltip template compatible with Angular 19 AOT linking by
placing the structured-content alias on the primary conditional block.Reject focus-filtered marks passed to decorative(), including nested composites,
in TypeScript instead of waiting for the existing runtime error.Order grouped-y keyboard navigation by screen y, top to bottom, with x breaking ties. Horizontal grouped and nearest-point navigation keep their existing order.
Animate mark opacity states from the default opacity when no explicit attribute
is present, and animate restoration before removing the state-owned attribute.Track unmatched SVG children directly during motion updates.
Allow exported marks and inferred chart definitions to emit portable TypeScript declarations by exposing the core type declaration module and exporting its chart-spec interfaces.
Allow
strokeDasharrayin dot, bar, rect, area, and text mark state styles.
Renderers already apply these state dash patterns; the public types now accept them.Avoid a temporary attribute Set for each SVG node during chart updates.
Preserve updated SVG text when switching between direct text and nested text elements, including animated exits.
Track unmatched SVG children directly during updates, preserving keyed identity and exit animations while reducing host bundle size.
- 0.18.x
0.18.0
10 Sep 2026Add renderer-neutral radial gradient resources with SVG and React Native fill
and stroke support, plus exactobjectBoundingBoxCanvas fills. Normalize
linear coordinates and authored stop order consistently across renderers.Allow Cartesian axis titles to configure font size, font weight, fill, and
opacity while retaining automatic guide layout.Allow definitions and themes to configure the built-in focus ring's radius,
stroke width, fill, and stroke while preserving the existing boolean behavior
and defaults.
@tanstack/charts
Minor Changes
Add renderer-neutral radial gradient resources with SVG and React Native fill
and stroke support, plus exactobjectBoundingBoxCanvas fills. Normalize
linear coordinates and authored stop order consistently across renderers.Allow Cartesian axis titles to configure font size, font weight, fill, and
opacity while retaining automatic guide layout.Allow definitions and themes to configure the built-in focus ring's radius,
stroke width, fill, and stroke while preserving the existing boolean behavior
and defaults.Add
lineCapandlineJoinoptions tolineYandlineX. Both options use
the renderer-supportedSceneStylevalues and continue to default toround.Add tree-shakeable, host-measured categorical legend item layouts with
configurable spacing, typography, label paint, built-in indicator shapes, and
custom indicator scene renderers.Add renderer-neutral stroke styling for Cartesian grid rules and axis lines through
gridandaxis.linestyle objects. Authored widths participate in automatic guide margins, and zero-width strokes stay hidden across renderers.Add configurable focus, modifier, and always wheel activation policies to
zoomX.
Patch Changes
Replace XML-invalid control characters and lone surrogates during static SVG serialization.
Apply a retargeted focused mark's motion settings to structural groups emitted
by that mark, including phase callbacks andmotion: false.Reserve the correct gutter for a positioned axis in a right-to-left container.
A y scale withside: 'right'anchored its tick labels for a left-to-right
inline direction, so an RTL host painted them across the plot instead of beside
it. Automatic anchors, fallback measurement, Canvas, native rendering, and SVG
export now agree on logicalstartandendanchors for the host direction.
- 0.17.x
0.17.0
9 Sep 2026Add physical per-corner and semantic value-end radii for Cartesian bar, rect,
and cell marks across SVG, Canvas, and React Native renderers.Relayout DOM charts when a CSS-owned container height changes, including when
the chart uses a fixed width.Support React 18 and React 19 in the web React adapter peer dependencies, and
avoid layout-effect warnings when rendering either React entry point on the
server.
- 0.16.x
0.16.2
9 Sep 2026Reduce chart mounting work by creating default SVG focus indicators only when needed and avoiding duplicate React client rendering. Speed up SVG serialization and categorical domain inference while preserving server rendering, hydration, chart appearance, and interactions.
0.16.1
8 Sep 2026Highlight the active series in grouped tooltips. Custom tooltip content can use
context.primaryPointandrow.activeto show the same highlight when series colors repeat.
0.16.0
26 Aug 2026Move TanStack Charts into official Alpha on the regular
0.xrelease line.Chart definitions now require Cartesian scales under
scales.xandscales.y.
Polar definitions requirescales.angleandscales.radius. The temporary
pre-Alpha root properties, runtime adapters, and development warnings have been
removed. Custom mark types should replaceChartMarkXandChartMarkYwithChartMarkPointXandChartMarkPointY, imported from@tanstack/charts/mark/scale-values. Polar layout callbacks should read the
reserved mappings fromlayout.scales.Reserved scale entries are checked against the marks that use them at the
precise authored type boundary. A materialized dimension requires a configured
scale, while an unused dimension requires an explicitnullentry. Runtime
validation still checks required reserved entries and channels that actually
materialize, but type-only scale ownership cannot be recovered after a custom
mark or stored definition has been erased.Fresh built-in mark option literals now reject unsupported properties while
preserving typed channels, named scale IDs, and generic mark wrappers.Exact-zero cells in diverging stacks now stay on their running positive or
negative baseline instead of drawing false spikes through lower area layers.
Pinned tooltips now dismiss when the pointer is pressed outside the chart and
tooltip, so pointer inspection resumes after focus leaves the chart.
- 0.15.x
0.15.0
26 Aug 2026Add named Cartesian and polar scale registries with multiple axes, guided
legacy scale migration, and opt-in per-mark Canvas rendering that composes with
the default renderer across DOM framework adapters, SSR, focus, and image
export.
- 0.14.x
0.14.0
15 Aug 2026Improve definition-driven inference for optional motion renderers, raw chart specs with separate behaviors, responsive chart factories, and decorative marks.
Inject tooltip motion through a structural renderer capability so motion works across separately bundled package entrypoints.
- 0.13.x
0.13.0
14 Aug 2026Add ShadCN-compatible chart catalog support with renderer-owned tooltip and
entrance motion, composable stagger timing, motion cascade opt-outs, and
expanded polar presentation controls.
- 0.12.x
0.12.0
12 Aug 2026Add angular grouped focus for radial charts and geometry-backed arc tooltips.
- 0.11.x
0.11.2
12 Aug 2026Ship scenario-driven TanStack Charts skills for visualization design, responsive behavior, migration, interaction, accessibility, debugging, extension, and coordination with the TanStack data and application ecosystem.
0.11.1
12 Aug 2026Keep animated SVG arc flags valid throughout path interpolation and prevent the
Angular adapter from mounting its browser host during server rendering.
0.11.0
11 Aug 2026Add controlled sunburst drill-down roots, bounded visible depth, and hierarchy-aware polar motion that keeps animated sectors centered. Add funnel and drillable sunburst catalog examples.
- 0.10.x
0.10.0
11 Aug 2026Let chart containers theme the built-in DOM tooltip surface through inherited
--ts-chart-tooltip-*CSS variables while preserving the existing defaults.
- 0.9.x
0.9.0
9 Aug 2026Install
@tanstack/chartsonce and import compact scales and framework adapters
from exact package subpaths. Existing package names remain supported for
compatibility.
- 0.8.x
0.8.0
9 Aug 2026Harmonize the pre-alpha public API: tighten compact scales, rename responsive,
control, focus, color, SVG animation, export, reducer, and rolling-window
contracts, standardize transform callbacks, type composable views and
host-owned tooltip tokens, share DOM/native interaction policy, and add one
platform-default runtime theme. DOM and React Native definitions now reject
cross-host tooltip tokens, while synchronous text measurement receives the
complete host typography and font scale. Every DOM adapter now exposes the
host-refined definition type at its chart boundary.
- 0.7.x
0.7.2
7 Aug 2026Keep the scatterplot with marginal histograms visible in compact catalog previews by omitting its color legend only in preview mode.
@tanstack/react-charts
@tanstack/react-charts-catalog
Patch Changes
Keep the scatterplot with marginal histograms visible in compact catalog previews by omitting its color legend only in preview mode.
@tanstack/react-native-charts
@tanstack/octane-charts
@tanstack/preact-charts
@tanstack/vue-charts
@tanstack/solid-charts
@tanstack/svelte-charts
@tanstack/angular-charts
@tanstack/lit-charts
@tanstack/alpine-charts
0.7.1
7 Aug 2026Pin packaged documentation and comparison protocol links to the immutable tag
for the same package version. Release automation now advances those tag links
together with every visible release-version reference.
0.7.0
7 Aug 2026Expose pinned state to tooltip content and item callbacks so built-in and
framework-rendered tooltips can expand with additional detail when pinned.
Keep dismissing clicks owned by the tooltip when a framework body unmounts
during event propagation.Standardize public callback parameters as primary data plus a context bag.
TooltipformatandformatGroupnow receive the same content context ascontent; channel accessors use(datum, { index, data }); facet, focus,
legend, and spatial-index extension callbacks move their supporting values
into named context objects. Controlled signals now receive change reasons in{ reason }; keyed-selection keys and focus-guide label formatters receive
their point in{ point }; interactive legend item labels receive{ visible }.ruleXandruleYnow expose axis-specific presentation-only focus anchors, sowhenFocused(..., { match: 'x' })andwhenFocused(..., { match: 'y' })can
reveal focused guide rules without making them interaction or tooltip targets.Update the published pinned-tooltip catalog case to show the energy overview,
compact hover summary, and animated pinned detail.Preserve distinct source rows in the linear-regression, framed-scatter, and
many-point-scatter catalog examples when car names and years repeat.Keep React Native chart-host focusability aligned with the shared definition
contract and toggle sticky activation exactly once per accessibility action.Add renderer-native crosshair rules, categorical cursor bands, labels, and optional intersection markers plus shared focus/free cursor controllers across SVG, Canvas, motion, and React Native rendering. Focus-filtered rule marks now use non-interactive semantic anchors, built-in axis focus modes select the painted mark under the pointer before grouping or snapping, and keyed motion guides remain active through scene updates.
Add native waffle, optional spatial hexbin, Delaunay link, Voronoi,
scalar-grid contour, density contour, responsive treemap and sunburst marks,
responsive Sankey composition, dot dodge layouts, typed wide-to-long fold and
polar pie transforms, and optional static force-layout and tidy-tree
transforms. Polar charts add radius- and angle-extending bar marks, responsive
radius scale ranges, post-scale text and rule offsets, and automatic outside
text anchors. These marks, layouts, and transforms own their data- or
plot-space geometry, so examples no longer need to copy scales, author D3
paths, flip hierarchy coordinates, manually pivot metric fields, calculate
responsive label radii or bar rings, or hide hierarchy and settled network
coordinates in case utilities. The exact Sankey entry accepts semantic graph
rows and composes ordinary child marks over immutable final-pixel node and link
values without exposing D3 mutation cleanup.Resolved dot placement is also extensible through
createDotLayout, which
receives final plot bounds, measured coordinates, and radii while Charts keeps
row identity, interaction, state, and motion ownership. Treemap tiling, Sankey
alignment, and named static-force factories accept D3-compatible callables in
addition to the built-in shorthands; all operate over private layout copies and
retain validation, immutability, and source lineage.Cartesian bars add an orientation-neutral
maxThicknessconstraint that caps
their final painted categorical size after grouping and inset, without asking
definitions to estimate responsive chart bounds. Absolute inline-state inset
overrides retain their existing semantics without escaping the cap.Add eager
boxRowspreparation plus raw-rowboxXandboxYmarks with Tukey
quartiles, observed whiskers, outlier lineage, transposed orientation, and one
summary interaction target per category. The marks reuse the public semantic
rows without exposing presentation keys. AddcompositeMarkfor namespaced
composition of ordinary child marks with preserved datum, channel,
interaction, and motion ownership.Stack layouts add inside-out series order and a zero-origin wiggle policy.
Areas, bars, and row transforms now share D3 inside-out ordering, dense sparse
cell handling, and a single global baseline translation, so streamgraphs can
consume tidy source rows without case-owned pivoting or interval generation.
Anchored stacks additionally translate ordered nonnegative series around a
named series fraction, so diverging Likert charts can keep counts in ordinary
bar definitions without manually materializing signed endpoints.Add an eager
waterfalltransform for ordered signed contributions, cumulative
start/end intervals, increase/decrease classification, optional grouped net
totals, and direct source lineage.Add eager
mosaicYandmosaicXtransforms for two-dimensional proportional
intervals over explicitly aggregated category pairs. They preserve semantic
categories, both normalization totals, stable source order, and direct lineage
for ordinary rectangle and text marks. Mosaic and pie share an overflow-safe
proportional interval allocator; waffle keeps its distinct rounded unit-fragment
and resolved packing policy.Add
lineXas the strict transposed counterpart tolineY, sharing grouping,
keys, gaps, styling, interaction, motion, and renderer-neutral path output.Add eager
linearRegressionRowsYandlinearRegressionRowsXpreparation pluslinearRegressionYandlinearRegressionXcomposite marks with centered
least-squares fits, optional grouped Student-t confidence bands, semantic-domain
sampling, aggregate lineage, transposed geometry, and one interactive fitted
line per group. The marks reuse the public semantic rows without exposing
presentation keys.Add
differenceYanddifferenceXcomposite marks that split two source-row
series at exact interpolated crossings, paint stable positive and negative
lobes, preserve derived lineage, and keep both raw boundary lines interactive.Add semantic
ridgelineY/ridgelineXandviolinY/violinXmarks for
prepared normalized profiles. Both derive responsive displacement from complete
point or band category domains without numeric category surrogates. Ridgelines
own one-sided overlap and optional outlines; violins own mirrored envelopes
while binning, normalization, density estimation, and summaries remain explicit
definition concerns. Tick marks add an optional category-step-relativespan
for responsive summary bars without authored endpoint coordinates.Add exact-subpath focus guide marks with renderer-neutral rules, markers,
measured labels, raw datum identity, and stable retargeting keys. RetargetablewhenFocusedmarks now enter at the active geometry, update through ordinary
mark motion, preserve interrupted spring velocity, and exit on focus clear
across SVG, Canvas, and React Native surfaces. Candidate ownership is
collision-safe for delimiter-containing keys, primitive rows match by value
and source position, and mark-state transitions no longer override another
mark's focus motion.Add an exact-subpath controlled signal and a controlled interactive categorical
legend. Applications retain the visible-series snapshot while Charts owns
domain-ordered toggling, post-domain geometry and focus filtering, responsive
top or bottom layout, stable native browser buttons, and static SVG fallback.
Static color and gradient legends also support top or bottom placement.Add exact-subpath controlled keyed selection with
keyedSelectionandwhenSelected. Host activation maps ordinary chart points to application keys
through a controlled signal. Selected marks keep their complete domain
contribution, then paint only matching point-owned geometry as a decorative
overlay without duplicate focus or activation targets.Add exact-subpath
decorative(mark)composition. It keeps an ordinary or
resolved-layout mark's scale contribution, layout measurement, motion,
post-domain work, and painted geometry while removing interaction ownership and
exposingneverpoint types. This lets one layer in a line-plus-dot composition
own focus, tooltips, and activation without changing pointer affinity.Add exact-subpath
brushXas a controlled chart behavior. It resolves against
the final x scale and plot bounds, owns D3 pointer/touch lifecycle, semantic
snapping, reverse normalization, cancellation, keyboard slider handles, host
teardown, and a renderer-neutral static fallback. Applications retain the
accepted range, fixed-window policy, linked-view layout, and persistence.Add exact-subpath
continuousCursoras a controlled chart behavior for an
unsnapped numeric or temporal x/y position. It resolves both final scales and
plot bounds, paints rules, a marker, and optional axis labels, owns transient
pointer/touch previews, click or tap pinning, leave/cancel cleanup, Escape and
toggle clearing, host teardown, and a renderer-neutral static fallback.
Applications retain semantic sliders, status text, formatting policy, and
persistence.Add exact-subpath
zoomXas a controlled continuous horizontal-window
behavior. It owns focus-gated pointer-anchored wheel zoom, horizontal-wheel and
drag pan, touch and pinch gestures, keyboard zoom/pan/reset, final-scale
inversion, clamping, cancellation, accessibility, and host teardown while D3
Zoom remains private to the optional subpath. Applications retain the accepted
semantic window, visible-row and y-domain policy, status, reset controls, and
persistence.Add exact-subpath
handleXas a controlled, candidate-bound horizontal scale
handle. It owns final-scale track, rule and handle painting, nearest-candidate
snapping, pointer and touch capture, preview, commit and cancellation, keyboard
slider semantics, resize synchronization, and host teardown without a D3
runtime. Applications retain playback or editing state, controls, validation,
status, and persistence.Tooltip definitions add
visibility: 'pinned'for focusable charts whose rich
detail should mount only after activation. Pointer pinning now repaints inline
pinned mark states, and SVG and Canvas restore base paint when tooltip
dismissal clears focus completely.Facet definitions now preserve the datum type and identity emitted by their
child marks, type group rows as nonempty, and apply motion to the child datum.
Facets and the new exact-subpathviewGriddefinition factory share one
full-chart scene adoption kernel with stable point and mark namespaces.viewGridarranges normal child definitions in named fixed/flexible tracks and
can align or strictly share resolved plot ranges without reserved-domain
coordinates or manual scene plotting.Add exact-subpath
composeViewsfor heterogeneous complete chart definitions.
Opaquefill,grid,layer, and anchoredinsetutilities compose responsive
frames, whileshareX,shareY,alignX, andalignYkeep scale coordination
separate from layout.viewGridremains as concise grid syntax over the same
composition engine. Child pointer and cursor settings now fail explicitly
instead of disappearing at the adoption boundary; the outer definition owns
that lifecycle.Controlled brush, cursor, and handle behaviors repaint the application-accepted
snapshot after a rejected terminal proposal. Continuous cursor axes invert the
resolved scale by default while retaining explicit value mapping and
coordinate-only overrides. Keyboard-disabled zoom no longer advertises or
enters focus for keyboard semantics it does not implement.Interrupted motion removes exact stale exit nodes and presentation state while
preserving live replacements. Composite motion inheritance retains authored
path timing, including rolling-path policy.Axis tick labels now accept per-candidate font size, font weight, opacity,
anchor, and x/y offset values. Accessors receive the semantic tick value,
stable pre-thinning index, resolved position, and bandwidth; resolved
presentation participates in thinning, automatic margins, facets, and motion.
@tanstack/charts
Minor Changes
Expose pinned state to tooltip content and item callbacks so built-in and
framework-rendered tooltips can expand with additional detail when pinned.
Keep dismissing clicks owned by the tooltip when a framework body unmounts
during event propagation.Standardize public callback parameters as primary data plus a context bag.
TooltipformatandformatGroupnow receive the same content context ascontent; channel accessors use(datum, { index, data }); facet, focus,
legend, and spatial-index extension callbacks move their supporting values
into named context objects. Controlled signals now receive change reasons in{ reason }; keyed-selection keys and focus-guide label formatters receive
their point in{ point }; interactive legend item labels receive{ visible }.ruleXandruleYnow expose axis-specific presentation-only focus anchors, sowhenFocused(..., { match: 'x' })andwhenFocused(..., { match: 'y' })can
reveal focused guide rules without making them interaction or tooltip targets.Update the published pinned-tooltip catalog case to show the energy overview,
compact hover summary, and animated pinned detail.Preserve distinct source rows in the linear-regression, framed-scatter, and
many-point-scatter catalog examples when car names and years repeat.Keep React Native chart-host focusability aligned with the shared definition
contract and toggle sticky activation exactly once per accessibility action.Add renderer-native crosshair rules, categorical cursor bands, labels, and optional intersection markers plus shared focus/free cursor controllers across SVG, Canvas, motion, and React Native rendering. Focus-filtered rule marks now use non-interactive semantic anchors, built-in axis focus modes select the painted mark under the pointer before grouping or snapping, and keyed motion guides remain active through scene updates.
Add native waffle, optional spatial hexbin, Delaunay link, Voronoi,
scalar-grid contour, density contour, responsive treemap and sunburst marks,
responsive Sankey composition, dot dodge layouts, typed wide-to-long fold and
polar pie transforms, and optional static force-layout and tidy-tree
transforms. Polar charts add radius- and angle-extending bar marks, responsive
radius scale ranges, post-scale text and rule offsets, and automatic outside
text anchors. These marks, layouts, and transforms own their data- or
plot-space geometry, so examples no longer need to copy scales, author D3
paths, flip hierarchy coordinates, manually pivot metric fields, calculate
responsive label radii or bar rings, or hide hierarchy and settled network
coordinates in case utilities. The exact Sankey entry accepts semantic graph
rows and composes ordinary child marks over immutable final-pixel node and link
values without exposing D3 mutation cleanup.Resolved dot placement is also extensible through
createDotLayout, which
receives final plot bounds, measured coordinates, and radii while Charts keeps
row identity, interaction, state, and motion ownership. Treemap tiling, Sankey
alignment, and named static-force factories accept D3-compatible callables in
addition to the built-in shorthands; all operate over private layout copies and
retain validation, immutability, and source lineage.Cartesian bars add an orientation-neutral
maxThicknessconstraint that caps
their final painted categorical size after grouping and inset, without asking
definitions to estimate responsive chart bounds. Absolute inline-state inset
overrides retain their existing semantics without escaping the cap.Add eager
boxRowspreparation plus raw-rowboxXandboxYmarks with Tukey
quartiles, observed whiskers, outlier lineage, transposed orientation, and one
summary interaction target per category. The marks reuse the public semantic
rows without exposing presentation keys. AddcompositeMarkfor namespaced
composition of ordinary child marks with preserved datum, channel,
interaction, and motion ownership.Stack layouts add inside-out series order and a zero-origin wiggle policy.
Areas, bars, and row transforms now share D3 inside-out ordering, dense sparse
cell handling, and a single global baseline translation, so streamgraphs can
consume tidy source rows without case-owned pivoting or interval generation.
Anchored stacks additionally translate ordered nonnegative series around a
named series fraction, so diverging Likert charts can keep counts in ordinary
bar definitions without manually materializing signed endpoints.Add an eager
waterfalltransform for ordered signed contributions, cumulative
start/end intervals, increase/decrease classification, optional grouped net
totals, and direct source lineage.Add eager
mosaicYandmosaicXtransforms for two-dimensional proportional
intervals over explicitly aggregated category pairs. They preserve semantic
categories, both normalization totals, stable source order, and direct lineage
for ordinary rectangle and text marks. Mosaic and pie share an overflow-safe
proportional interval allocator; waffle keeps its distinct rounded unit-fragment
and resolved packing policy.Add
lineXas the strict transposed counterpart tolineY, sharing grouping,
keys, gaps, styling, interaction, motion, and renderer-neutral path output.Add eager
linearRegressionRowsYandlinearRegressionRowsXpreparation pluslinearRegressionYandlinearRegressionXcomposite marks with centered
least-squares fits, optional grouped Student-t confidence bands, semantic-domain
sampling, aggregate lineage, transposed geometry, and one interactive fitted
line per group. The marks reuse the public semantic rows without exposing
presentation keys.Add
differenceYanddifferenceXcomposite marks that split two source-row
series at exact interpolated crossings, paint stable positive and negative
lobes, preserve derived lineage, and keep both raw boundary lines interactive.Add semantic
ridgelineY/ridgelineXandviolinY/violinXmarks for
prepared normalized profiles. Both derive responsive displacement from complete
point or band category domains without numeric category surrogates. Ridgelines
own one-sided overlap and optional outlines; violins own mirrored envelopes
while binning, normalization, density estimation, and summaries remain explicit
definition concerns. Tick marks add an optional category-step-relativespan
for responsive summary bars without authored endpoint coordinates.Add exact-subpath focus guide marks with renderer-neutral rules, markers,
measured labels, raw datum identity, and stable retargeting keys. RetargetablewhenFocusedmarks now enter at the active geometry, update through ordinary
mark motion, preserve interrupted spring velocity, and exit on focus clear
across SVG, Canvas, and React Native surfaces. Candidate ownership is
collision-safe for delimiter-containing keys, primitive rows match by value
and source position, and mark-state transitions no longer override another
mark's focus motion.Add an exact-subpath controlled signal and a controlled interactive categorical
legend. Applications retain the visible-series snapshot while Charts owns
domain-ordered toggling, post-domain geometry and focus filtering, responsive
top or bottom layout, stable native browser buttons, and static SVG fallback.
Static color and gradient legends also support top or bottom placement.Add exact-subpath controlled keyed selection with
keyedSelectionandwhenSelected. Host activation maps ordinary chart points to application keys
through a controlled signal. Selected marks keep their complete domain
contribution, then paint only matching point-owned geometry as a decorative
overlay without duplicate focus or activation targets.Add exact-subpath
decorative(mark)composition. It keeps an ordinary or
resolved-layout mark's scale contribution, layout measurement, motion,
post-domain work, and painted geometry while removing interaction ownership and
exposingneverpoint types. This lets one layer in a line-plus-dot composition
own focus, tooltips, and activation without changing pointer affinity.Add exact-subpath
brushXas a controlled chart behavior. It resolves against
the final x scale and plot bounds, owns D3 pointer/touch lifecycle, semantic
snapping, reverse normalization, cancellation, keyboard slider handles, host
teardown, and a renderer-neutral static fallback. Applications retain the
accepted range, fixed-window policy, linked-view layout, and persistence.Add exact-subpath
continuousCursoras a controlled chart behavior for an
unsnapped numeric or temporal x/y position. It resolves both final scales and
plot bounds, paints rules, a marker, and optional axis labels, owns transient
pointer/touch previews, click or tap pinning, leave/cancel cleanup, Escape and
toggle clearing, host teardown, and a renderer-neutral static fallback.
Applications retain semantic sliders, status text, formatting policy, and
persistence.Add exact-subpath
zoomXas a controlled continuous horizontal-window
behavior. It owns focus-gated pointer-anchored wheel zoom, horizontal-wheel and
drag pan, touch and pinch gestures, keyboard zoom/pan/reset, final-scale
inversion, clamping, cancellation, accessibility, and host teardown while D3
Zoom remains private to the optional subpath. Applications retain the accepted
semantic window, visible-row and y-domain policy, status, reset controls, and
persistence.Add exact-subpath
handleXas a controlled, candidate-bound horizontal scale
handle. It owns final-scale track, rule and handle painting, nearest-candidate
snapping, pointer and touch capture, preview, commit and cancellation, keyboard
slider semantics, resize synchronization, and host teardown without a D3
runtime. Applications retain playback or editing state, controls, validation,
status, and persistence.Tooltip definitions add
visibility: 'pinned'for focusable charts whose rich
detail should mount only after activation. Pointer pinning now repaints inline
pinned mark states, and SVG and Canvas restore base paint when tooltip
dismissal clears focus completely.Facet definitions now preserve the datum type and identity emitted by their
child marks, type group rows as nonempty, and apply motion to the child datum.
Facets and the new exact-subpathviewGriddefinition factory share one
full-chart scene adoption kernel with stable point and mark namespaces.viewGridarranges normal child definitions in named fixed/flexible tracks and
can align or strictly share resolved plot ranges without reserved-domain
coordinates or manual scene plotting.Add exact-subpath
composeViewsfor heterogeneous complete chart definitions.
Opaquefill,grid,layer, and anchoredinsetutilities compose responsive
frames, whileshareX,shareY,alignX, andalignYkeep scale coordination
separate from layout.viewGridremains as concise grid syntax over the same
composition engine. Child pointer and cursor settings now fail explicitly
instead of disappearing at the adoption boundary; the outer definition owns
that lifecycle.Controlled brush, cursor, and handle behaviors repaint the application-accepted
snapshot after a rejected terminal proposal. Continuous cursor axes invert the
resolved scale by default while retaining explicit value mapping and
coordinate-only overrides. Keyboard-disabled zoom no longer advertises or
enters focus for keyboard semantics it does not implement.Interrupted motion removes exact stale exit nodes and presentation state while
preserving live replacements. Composite motion inheritance retains authored
path timing, including rolling-path policy.Axis tick labels now accept per-candidate font size, font weight, opacity,
anchor, and x/y offset values. Accessors receive the semantic tick value,
stable pre-thinning index, resolved position, and bandwidth; resolved
presentation participates in thinning, automatic margins, facets, and motion.
Patch Changes
Add validated rolling path transforms with dynamic y-domain reprojection,
continuous translated viewports with stationary guides, and a controlled focus
controller that follows presentation geometry. Default SVG rendering now
honors scene clips and gradients.
- 0.6.x
0.6.5
5 Aug 2026Publish the complete 109-case conformance catalog as per-case React components that render their complete SVG during SSR. Catalog data parsing is compatible with runtimes that prohibit string code generation, case-local D3 imports are declared runtime dependencies, and bundled datasets include source and license notices.
Add
focus: falsefor charts that should omit generated focus geometry and native focus work. Responsive definitions now retain outer definition options, and catalog descriptors and custom views respond to measured width changes after SSR.d3-scaleis declared as a core runtime dependency.Catalog components accept the same responsive
aspectRatiosizing contract as React Charts while retaining deterministic initial dimensions for SSR. React chart hosts serialize proportional CSS sizing as a unitless value. Legend-heavy preview definitions now dedicate their compact layout to the plot.
0.6.4
3 Aug 2026Accept configured D3 scale instances for union-valued axes.
0.6.3
3 Aug 2026Keep the built-in primary focus ring when authored focus marks are present, and
addfocusRing: falsefor charts that replace the indicator explicitly.
0.6.2
2 Aug 2026Clarify that each chart host has one animation owner: the default SVG renderer
usesanimate, whilemotion()ignores it and uses definition-level motion
declarations.
0.6.1
2 Aug 2026Correct SVG pointer hit testing when the rendered viewport and chart scene use
different aspect ratios.
0.6.0
2 Aug 2026Add the optional
motion()SVG renderer with tween and physical spring
transitions, definition-local chart, mark, datum, guide, and focus timing,
retained interruption velocity, reduced-motion handling, and aligned
presentation geometry. Add the standalonecreateChartSpringsampler.
- 0.5.x
0.5.1
2 Aug 2026Resolve default pointer focus against painted mark geometry before applying a
mark's natural x, y, or two-dimensional fallback. Interaction metadata now
lives on the resolved scene primitive, so built-in and custom marks share the
same rectangle, circle, polygon, line, or area geometry used by renderers after
layout, facets, transforms, clipping, and inline state resolution.Facet-local default markers now stay bound to the primary point even when
another panel has identical channel values; explicit x/y focus marks remain the
opt-in synchronized-cursor path. Animated bar inset states also preserve the
quantitative axis and baseline while changing only categorical width or height.
0.5.0
2 Aug 2026Add the experimental React Native SVG host with responsive scene rendering,
focus, selection, accessibility actions, and an optional native tooltip entry.
Ship compiled ESM and declarations, and verify the packed package in bare React
Native and Expo Metro consumers.
@tanstack/react-charts
@tanstack/react-native-charts
Minor Changes
Add the experimental React Native SVG host with responsive scene rendering,
focus, selection, accessibility actions, and an optional native tooltip entry.
Ship compiled ESM and declarations, and verify the packed package in bare React
Native and Expo Metro consumers.
@tanstack/octane-charts
@tanstack/preact-charts
@tanstack/vue-charts
@tanstack/solid-charts
@tanstack/svelte-charts
@tanstack/angular-charts
@tanstack/lit-charts
@tanstack/alpine-charts
- 0.4.x
0.4.0
1 Aug 2026Order grouped tooltip rows by rendered mark position by default: top-to-bottom
for x groups and left-to-right for y groups. Addvisualas an explicit sort
policy while preserving color-domain, focus, and custom comparator ordering.
- 0.3.x
0.3.1
31 Jul 2026Remove incidental
d3-arrayusage from nearest-point lookup, quantile legend
thresholds, and compact numeric ticks. These paths now use package-owned
implementations with D3 parity coverage, and compact scales no longer have a
production D3 dependency.Numeric-bin and stack transforms, polar and curve features, and geo features
continue to own their tree-shakabled3-array,d3-shape, ord3-geo
implementations as normal dependencies. No peer dependency, caller-supplied
capability, or public API migration is required.
0.3.0
31 Jul 2026Replace the flat axis guide options with composable axis, grid, tick, and
responsive label configuration. Add shared focus-layer marks, animated inline
mark states, coordinate-based tooltip anchoring, and unified stack/group
layouts with inferred stacking.
Add data-first group, numeric/calendar/two-dimensional bin, window, cumulative,
rank, normalize, select, and row-stack transforms. Results use named group
fields, flat row extension, explicit reducers and ordering, source lineage,
object-bag callbacks, ordinary-function escape hatches, and granular entry
points.Allow
linkmarks to resolve stroke width and opacity per datum and configure
their line caps. This supports proportional D3 Sankey links through native mark
composition instead of a custom scene renderer.
- 0.2.x
0.2.0
31 Jul 2026Rename the environment-safe
/portableentry from0.1.0to/universal. Replace@tanstack/charts/portableimports with@tanstack/charts/universal. The/typesentry and browser-oriented root exports remain unchanged. The universal type surface now includes generic tooltip-extension token contracts for non-DOM hosts.
- 0.1.x
0.1.0
31 Jul 2026Add environment-safe
/portableand/typesentry points while preserving the existing browser-oriented root exports.Make native tooltips and tooltip portals explicit extensions. Import
tooltipfrom@tanstack/charts/tooltip; replacetooltip: truewithtooltip, dynamic booleans withenabled ? tooltip : false, and configured objects with{ use: tooltip, ...options }. Complete definition values useChartTooltipInput;ChartTooltipOptionsremains the options-only type.Import
portalfrom@tanstack/charts/tooltip/portal; replaceportal: truewithportal, omitportal: false, and replace dynamic booleans withenabled ? portal : undefinedinside the configured tooltip object.
- 0.0.x
0.0.2
31 Jul 2026Keep long Cartesian axis titles contained on compact charts.
0.0.1
31 Jul 2026- breaking
Remove
inputfrom DOM-host and framework-adapter options. - breaking
Move transforms beside
defineChart, or into the framework memo or computed
primitive that creates the definition. - breaking
Replace
prepare,prepareEqual, andinputEqual. Prepared-data caching
and the preparationAbortSignalno longer exist.
Changelog
0.0.1is the first coordinated update after the public0.0.0release. The
verified0.0.0baseline is58ee1e28e469f8ab28f99877a6e0abc3958977a4, not the initial repository
commit.npm published
@tanstack/charts@0.0.0at2026-07-29T18:42:40Z, followed through18:43:13Zby the React, Octane,
Preact, Vue, Solid, Svelte, Angular, Lit, and Alpine adapters.The published core and React README hashes, and the published core
chart-definitions documentation hash, match commit58ee1e2exactly.No later commit existed before those packages were published.
The audited product implementation range ends at
a91106c34d654ea625a2f540f647222bd72bc0fcand contains exactly nine
commits. Release-preparation corrections in this branch update the
documentation, comparison fixture and baseline, and this changelog after that
implementation range.Compare the audited product range.
Release scope and gates
0.0.1publishes@tanstack/chartsand the React, Octane, Preact, Vue,
Solid, Svelte, Angular, Lit, and Alpine adapters as one versioned set. Every
adapter depends exactly on@tanstack/charts@0.0.1.The comparison bundle review confirmed that basic TanStack line, bar, area,
and scatter consumers now measure 24.19–24.81 KiB gzip. The increase comes
from the reviewed definition-behavior, key-inference, scale-inference, and
portal-tooltip code rather than an accidental dependency. The comparison
fixture now configures behavior on the definition instead of the removed
host boundary, and the refreshed baseline passed the full pull-request
validation, comparison, conformance, and stress workflow.The tanstack.com schema-v4 catalog consumer must be deployed and verified
before the Charts release reachesmain, because the successful main-branch
workflow publishes the schema-v4 artifact tocatalog-dist. Keep schema-v2
compatibility until the production catalog and embed routes are verified.The release commit must pass the same package, documentation, bundle,
comparison, catalog, stress, and conformance gates before its tag, GitHub
release, and npm provenance identify that exact revision.@charts-poc/demo-dataremains private. It is a catalog, example, and
validation fixture package, not a production dependency or release target.@tanstack/charts-d3remains a private superseded experiment and is not a
release target.
Package impact
All product packages in this table already existed at the published baseline.
This range updates them; it does not introduce new adapters.Package 0.0.1 update @tanstack/chartsDefinition-owned reactivity and behavior, inferred keys and scale domains, portal tooltips, typed data @tanstack/react-chartsUpdated definition contract, composed tooltip bodies, portal mounting, and a react-dompeer@tanstack/octane-chartsUpdated definition contract across SVG, Canvas, and renderer entries, plus composed tooltip bodies @tanstack/preact-chartsUpdated definition contract, SVG adoption behavior, and composed tooltip bodies @tanstack/vue-chartsUpdated definition contract, SSR forwarding fixes, and a scoped tooltip-body slot @tanstack/solid-chartsUpdated definition contract, stable SSR IDs, and composed tooltip bodies @tanstack/svelte-chartsUpdated definition contract, hydration behavior, and a tooltip-body snippet @tanstack/angular-chartsUpdated definition contract and a typed projected tooltip template directive @tanstack/lit-chartsUpdated definition contract and composed tooltip rendering through options @tanstack/alpine-chartsUpdated definition contract and DOM tooltip-body rendering Breaking changes and migrations
Definition identity is now the application reactivity boundary
The runtime no longer accepts formal chart input, prepares data, or compares
input values. A definition captures the application values it uses. Recreate
or memoize the complete definition when those values change. A responsive
builder still reruns when its surface size or build-time theme changes.Before:
const definition = defineChart<readonly Row[]>()({ prepare: (rows) => summarize(rows), prepareEqual: Object.is, inputEqual: Object.is, chart: ({ input, prepared, width, height, theme }) => ({ marks: createMarks(input, prepared), x: createXScale(width), y: createYScale(height, theme), }), }) <Chart definition={definition} input={rows} ariaLabel="Revenue" />After:
function createRevenueDefinition(rows: readonly Row[]) { const prepared = summarize(rows) return defineChart({ marks: createMarks(rows, prepared), x: { scale: scaleUtc, nice: true }, y: { scale: scaleLinear, nice: true }, }) } const definition = useMemo(() => createRevenueDefinition(rows), [rows]) <Chart definition={definition} ariaLabel="Revenue" />Migration details:
- breaking
Remove
inputfrom DOM-host and framework-adapter options. - breaking
Move transforms beside
defineChart, or into the framework memo or computed
primitive that creates the definition. - breaking
Replace
prepare,prepareEqual, andinputEqual. Prepared-data caching
and the preparationAbortSignalno longer exist. - breaking
Remove uses of
ChartPrepareContext,chartInputsEqual, andshallowInputEqual. - breaking
Replace
StaticChartHostOptions,DynamicChartHostOptions,StaticChartProps, andDynamicChartPropswith the unified host and adapter
contracts. - breaking
Read only
width,height, andthemefromChartBuildContext. - breaking
Call
runtime.render(definition, size, layout?); the runtime no longer
accepts an input argument. - breaking
Update low-level generic arguments.
ChartDefinition,DynamicChartDefinition,ChartRuntime, hosts, adapters, and points now
describe datum, x-value, and y-value types rather than input and
prepared-data types. - breaking
For vanilla updates, create the next definition and pass it through
host.update. - breaking
For framework updates, memoize the complete definition against every
application value it captures.
DynamicChartConfigremains public. It combines a responsivechart(context)builder with definition-owned behavior options.Chart behavior moved from hosts into definitions
Focus, tooltip, animation, keyboard, focus-distance, and spatial-index policy
are reusable chart behavior. Hosts and framework components no longer acceptfocus,maxFocusDistance,spatialIndex,animate,keyboard, ortooltip.Before:
<Chart definition={definition} focus={focusX} tooltip={{ sticky: true }} animate={{ duration: 180 }} keyboard ariaLabel="Revenue" />After:
const interactiveDefinition = defineChart(definition, { focus: 'nearest-x', tooltip: true, animate: { duration: 180 }, keyboard: true, }) <Chart definition={interactiveDefinition} ariaLabel="Revenue" />Static definitions may declare behavior directly. Responsive definitions place
behavior besidechart.defineChart(existingDefinition, options)creates a
separately configured definition without moving surface policy back into the
adapter.The host still owns:
- breaking
dimensions and aspect ratio;
- breaking
accessible labels and descriptions;
- breaking
surface class names and styles;
- breaking
focus, grouped-focus, selection, render, and tooltip-body callbacks;
- breaking
text measurement;
- breaking
renderer selection.
The
focusoption now acceptsnearest,nearest-x,nearest-y,group-x,
andgroup-y, as well as a custom focus strategy.Enabled tooltips are pinnable by default. Click, Enter, or Space pins the
current tooltip; Escape or a composed body'sdismisscallback clears it. Settooltip: { sticky: false }for transient-only behavior.Resize animation is opt-in
ChartAnimationOptions.resizenow defaults tofalse.- breaking
Definition changes may still animate.
- breaking
Responsive observation and explicit size changes commit immediately unless
animate.resizeistrue. - breaking
Incompatible layout changes never interpolate.
- breaking
Interrupted animations still begin from currently painted geometry.
- breaking
Renderer completion is associated with the render reason so an older
animation cannot overwrite a newer immediate resize.
Applications that deliberately animate size changes must opt in:
const definition = defineChart(chart, { animate: { duration: 180, resize: true, }, })Built-in marks infer stable identity
Built-in marks no longer fall back immediately to row index. Identity resolves
in this order:- breaking
An explicit
key - breaking
A unique primitive
datum.id - breaking
A unique primitive
datum.data.id - breaking
A unique mark-specific positional candidate
- breaking
Row index
Mark-specific candidates:
- breaking
bars use their categorical channel;
- breaking
lines and areas use their independent axis;
- breaking
rects and cells use the complete x/y interval tuple;
- breaking
dots and text try x, then y, then the x/y tuple;
- breaking
polar lines, areas, and rules use angle;
- breaking
D3 pie-backed polar arcs can recover nested source identity.
A candidate must be complete and unique inside its interaction group.
Development builds warn once per mark instance when a positional candidate is
missing or duplicated and identity falls back to row position.Remove redundant keys when an ID or semantic position already identifies the
datum. Keep an explicit key when position can change independently of entity
identity. Usekey: (_datum, index) => indexonly when positional identity is
intentional.D3 scale factories now request domain inference
Positional, color, radius, and polar scale options distinguish a factory from
a configured instance.const inferred = { x: { scale: scaleUtc, nice: true }, y: { scale: scaleLinear, nice: true }, } const configured = { x: { scale: scaleUtc().domain(fixedDateDomain) }, y: { scale: scaleLinear().domain([0, fixedMaximum]) }, }Migration rules:
- breaking
Pass
scaleLinear,scaleUtc, or another zero-argument D3 factory when the
domain should follow mark channels. - breaking
Use a wrapper such as
() => scaleBand<string>().padding(0.2)when the
factory needs pre-domain configuration. - breaking
Continue passing a configured D3 instance when the application owns a fixed
domain. - breaking
Do not pass
scaleLinear()and expect data inference. It is a configured
instance and retains D3's default domain until the application changes it. - breaking
Move nicening for inferred axes to
nice?: boolean | number. - breaking
Keep every granular
d3-*module imported by application source as a direct
application dependency.
Inference behavior:
- breaking
continuous and temporal axes use the finite extent of every materialized
channel on that axis; - breaking
band and point axes retain distinct values in first-seen order;
- breaking
implicit bar and area baselines contribute zero;
- breaking
empty channels retain the scale factory's native domain;
- breaking
configured instances are copied and never mutated;
- breaking
TanStack Charts owns responsive ranges, y orientation, reversal, band
centering, guide layout, and final tick placement.
Validation is stricter:
- breaking
inferred quantitative and temporal scales reject incompatible semantic
values instead of coercing them; - breaking
an inferred log domain rejects zero or a domain that crosses zero;
- breaking
a bar or area with an implicit zero baseline cannot use an inferred log
scale; - breaking
required-axis checks follow each mark's materialized dimensions;
- breaking
configuring an unused phantom axis is rejected.
Color factories now infer ordinal, continuous, quantize, quantile, or threshold
domains and expose semantic scale kind and thresholds to legends. Radius
factories infer[0, maximum]while preserving configured output ranges.
Polar angle and radius scales use the same factory-versus-instance contract.Point and scale types are more precise
- breaking
ChartPoint.xValueandyValuepreserve inferredDate, numeric, or
categorical values. - breaking
ChartMarkPointXandChartMarkPointYdescribe interaction anchors. - breaking
ChartMarkScaleXandChartMarkScaleYdescribe values materialized into
scales. - breaking
ChartMarkXandChartMarkYremain deprecated compatibility aliases. - breaking
Rectangle and cell interval scale values are independent from their
interaction anchors. - breaking
Custom marks whose interaction and scale values differ use
createMarkWithScaleValuesfrom@tanstack/charts/mark/scale-values. - breaking
Positionless polar and geo definitions may omit Cartesian axes.
- breaking
A one-dimensional mark requires only the dimension it materializes.
Core updates
Channel, interval, and layout refinements
Added an independent semantic
colorchannel across existing Cartesian,
polar, and geographic marks.zremains geometry and interaction grouping. It is the color fallback whencoloris omitted.For lines and areas,
colorgroups paths only whenzis absent. When both
exist,zgroups geometry andcolorsupplies scale semantics.Grouped bars use
z, orcolorwhen nozis present.Final
fillandstrokeaccessors remain paint overrides.Interaction-point colors now match the fill or stroke actually painted.
Interval points now expose
x1Value,x2Value,y1Value,y2Value, andxIntervaloryIntervalrange and difference semantics.Channel field types reject datum fields incompatible with the mark channel.
Inference carries datum and coordinate types through focus, tooltip,
spatial-index, selection, adapter, and renderer callbacks.Custom marks may provide
layoutLabels, allowing data-bound labels,
including polar and geographic labels, to contribute to automatic margins.
Tooltip, focus, and interaction refinements
The native tooltip model now provides structured content rather than only
plain text:safe titles;
ordered rows and swatches;
channel and datum items;
derived items;
interval ranges and differences;
content,items,sort,anchor,placement, andoffsetoptions;compatibility with existing
formatandformatGroupcallbacks.
Grouped tooltip rows can sort by color-domain order, focus order, or a custom
comparator. Anchors can follow the point, pointer, group center, or a custom
coordinate. Eight placements and ordered fallbacks support viewport collision
handling.tooltip.portalmoves the native surface out of clipped stacking contexts.
The host uses the browser Popover top layer when available and a fixed
body-level fallback otherwise. Both paths:map scene anchors to client coordinates;
collide against the viewport;
reposition on scroll, viewport resize, chart resize, and tooltip-content
resize;target the chart's owner document;
clean up when the definition, renderer, or chart host changes.
Framework adapters can compose native framework content into the core-owned
tooltip body. The body context containspoints, structuredcontent,defaultBody,pinned, anddismiss. Transient custom bodies remain inert;
pinned bodies become nonmodal dialogs and may contain selectable or
interactive content.The renderer-neutral host exposes
onTooltipBodyChangeandChartTooltipBodyTargetfor lower-level integrations.Additional interaction corrections:
duplicate public keys no longer collapse distinct observations during path
hover or responsive repaint;spatial-index option changes repaint active focus and tooltip state.
Framework adapter updates
Every existing adapter moved to the definition-identity update contract and
removed formal input and host-owned behavior props. Callback types continue to
infer from the complete definition, and committed callbacks remain fresh
without forcing a new definition.Shared adapter prerendering preserves
className; Vue declares and forwards
it on both server and client paths.
Adapter-specific tooltip composition:
React, Octane, Preact, and Solid expose
renderTooltipBody.Vue exposes a scoped
#tooltipBodyslot.Svelte exposes a
tooltipBodysnippet.Angular exports
ChartTooltipBodyDirective, with the definition as its
strict type witness.Lit accepts
options.renderTooltipBody.Alpine accepts
renderTooltipBodyreturning DOM content.
React now declares
react-dom ^19.0.0as a peer because composed tooltip bodies
use React portals. React and Octane preserve the existing default SVG,/canvas, and renderer-neutral/coreentry boundaries.Catalog, demo data, and publication artifact
The catalog already contained 100 cases at the published
0.0.0baseline.
This range changes the data and publication model without claiming a catalog
count expansion.Source-shaped demo data
Added the private
@charts-poc/demo-dataworkspace package with 27 pinned
Observable datasets and a metadata subpath.Every dataset has an exact subpath export and records source URL, upstream
revision, record count, schema, byte size, license note, and SHA-256.Small snapshots are emitted as typed rows.
Large CSV snapshots remain compact and parse only when their exact subpath is
imported. Sibling datasets and the CSV parser stay out of unrelated chunks.All 100 existing catalog cases were migrated away from case-local
data.ts
fixtures and now import source-shaped data through exact subpaths.Case selection, sampling, joins, derived channels, normalization, layout, and
transforms remain visible inselection.ts,transform.ts,layout.ts, or
model modules.Only two authored interaction-state fixtures remain. They are explicitly
namedscenario.ts, not observation data.React, Octane, and sandbox showcases now use pinned source-shaped datasets
instead of synthetic Stats-shaped fixtures.Demo data is externalized from renderer bundle measurement and is not a
production dependency of any Charts package.Deterministic sync, metadata, schema, hash, exact-subpath, and compact-CSV
tests cover the package.
Schema-v4 source and asset closures
The existing generated-content publication pipeline now emits a schema-v4
catalog artifact.The artifact records the exact Charts revision, source repository, route and
embed contracts, renderer module contract, implementation counts, datasets,
authored-source metadata, and asset graph.Each case records TanStack and reference source closures by entry, support,
fixture, and harness role.Authored-source totals include transitive implementation and transform code
while excluding harness code and raw dataset rows.Published modules are recursively allowlisted with SHA-256, byte size, static
imports, and dynamic imports.Validation rejects unsafe paths, oversized or unreferenced assets,
inconsistent closures, and public comparison modules.The catalog source viewer exposes the same closure and dataset provenance
used by artifact validation.Loading checks preserve the existing contract: the normal catalog and embed
routes load only TanStack code; competitor code remains opt-in.
The artifact cannot replace the production schema-v2 feed until tanstack.com
has deployed and verified its schema-v4 consumer.Documentation, comparison, and lineage
Public documentation gaps
Documentation validation now:
Verification added or updated in the audited product range
Runtime, host, renderer, and framework tests cover definition identity,
behavior ownership, resize render reasons, animation interruption, key
inference, duplicate-key focus, tooltip pinning, portal placement, and
cleanup.Type-contract tests cover mark channels, point and scale value separation,
required axes, factory inference, configured instances, callback inference,
and adapter props.Scale tests cover quantitative, temporal, band, point, log, color, radius,
and polar inference, including empty and invalid domains.Packed-consumer tests cover the revised core, DOM, React, Octane, and adapter
declaration contracts without casts or private imports.Documentation checks cover 81 canonical pages, executable examples, public
package entries, exports, links, and generated mirrors.Catalog checks cover all 100 cases, source roles, exact dataset subpaths,
schema-v4 asset closures, source-view parity, and TanStack-only production
loading.The full catalog and interaction evidence completed during this range.
0.0.1 release-preparation corrections
Updated the canonical docs, public READMEs, generated package mirrors, and
llms.txtindexes for the0.0.1API.Replaced temporary unreleased-source warnings with
0.0.1installation
guidance, including the React DOM runtime and type peers required by the
React adapter.Replaced private demo-data imports in public examples with small,
self-contained typed datasets.Fixed the comparison fixture to configure behavior on definitions instead of
the removed host boundary.Refreshed the reviewed bundle baseline and recorded the TanStack workspace
revision separately from pinned competitor package versions.Updated the offline chart-authoring evaluation to target the
0.0.1
definition, behavior, and scale contracts.Added this baseline-verified changelog and the required tanstack.com
consumer-before-catalog deployment order.
Audited product commit inventory
(2026-07-29), Credit grammar-of-graphics lineage:
clarified implementation and conceptual lineage across acknowledgements,
concepts, overview, and marketing.(2026-07-29), Close public documentation gaps:
expanded the canonical reference, added evidence-backed comparison content,
tightened documentation contracts, and fixed public host, focus, export,
scale, and adapter gaps discovered while documenting the API.(2026-07-29), Make definition identity the chart reactivity
boundary: removed formal input, preparation, equality, and cache APIs and
migrated runtimes, hosts, adapters, examples, and all catalog cases to
captured application values.(2026-07-29), Disable chart animation during resize:
classified render reasons, made responsive and explicit resize immediate by
default, and addedanimate.resizeopt-in.(2026-07-29), Move chart behavior into definitions:
moved focus, tooltip, animation, keyboard, focus distance, and spatial
indexing out of hosts; added focus presets, pinnable tooltips, and richer
structured tooltip behavior.(2026-07-29), Infer stable chart keys:
added ID and mark-specific positional identity inference, development
diagnostics, and reconciliation, animation, and focus coverage.(2026-07-29), Infer scale domains from marks:
added direct D3 factories, domain inference, axis nicening, strict value
validation, and corresponding positional, color, radius, and polar scale
behavior.(2026-07-30), Add composable portal tooltips:
added top-layer and fixed portal positioning, framework-native tooltip
bodies, pinned dialog behavior, and adapter-specific composition APIs.(2026-07-30), Improve chart inference and catalog data:
completed point and scale typing, required-axis inference, independent color
channels, interval metadata, source-shaped demo data, visible transform
roles, source closures, and the schema-v4 catalog artifact.
0.0.0
29 Jul 2026- breaking
Remove
inputfrom DOM-host and framework-adapter options. - breaking
Move transforms beside
defineChart, or into the framework memo or computed
primitive that creates the definition. - breaking
Replace
prepare,prepareEqual, andinputEqual. Prepared-data caching
and the preparationAbortSignalno longer exist.
Changelog
0.0.1is the first coordinated update after the public0.0.0release. The
verified0.0.0baseline is58ee1e28e469f8ab28f99877a6e0abc3958977a4, not the initial repository
commit.npm published
@tanstack/charts@0.0.0at2026-07-29T18:42:40Z, followed through18:43:13Zby the React, Octane,
Preact, Vue, Solid, Svelte, Angular, Lit, and Alpine adapters.The published core and React README hashes, and the published core
chart-definitions documentation hash, match commit58ee1e2exactly.No later commit existed before those packages were published.
The audited product implementation range ends at
a91106c34d654ea625a2f540f647222bd72bc0fcand contains exactly nine
commits. Release-preparation corrections in this branch update the
documentation, comparison fixture and baseline, and this changelog after that
implementation range.Compare the audited product range.
Release scope and gates
0.0.1publishes@tanstack/chartsand the React, Octane, Preact, Vue,
Solid, Svelte, Angular, Lit, and Alpine adapters as one versioned set. Every
adapter depends exactly on@tanstack/charts@0.0.1.The comparison bundle review confirmed that basic TanStack line, bar, area,
and scatter consumers now measure 24.19–24.81 KiB gzip. The increase comes
from the reviewed definition-behavior, key-inference, scale-inference, and
portal-tooltip code rather than an accidental dependency. The comparison
fixture now configures behavior on the definition instead of the removed
host boundary, and the refreshed baseline passed the full pull-request
validation, comparison, conformance, and stress workflow.The tanstack.com schema-v4 catalog consumer must be deployed and verified
before the Charts release reachesmain, because the successful main-branch
workflow publishes the schema-v4 artifact tocatalog-dist. Keep schema-v2
compatibility until the production catalog and embed routes are verified.The release commit must pass the same package, documentation, bundle,
comparison, catalog, stress, and conformance gates before its tag, GitHub
release, and npm provenance identify that exact revision.@charts-poc/demo-dataremains private. It is a catalog, example, and
validation fixture package, not a production dependency or release target.@tanstack/charts-d3remains a private superseded experiment and is not a
release target.
Package impact
All product packages in this table already existed at the published baseline.
This range updates them; it does not introduce new adapters.Package 0.0.1 update @tanstack/chartsDefinition-owned reactivity and behavior, inferred keys and scale domains, portal tooltips, typed data @tanstack/react-chartsUpdated definition contract, composed tooltip bodies, portal mounting, and a react-dompeer@tanstack/octane-chartsUpdated definition contract across SVG, Canvas, and renderer entries, plus composed tooltip bodies @tanstack/preact-chartsUpdated definition contract, SVG adoption behavior, and composed tooltip bodies @tanstack/vue-chartsUpdated definition contract, SSR forwarding fixes, and a scoped tooltip-body slot @tanstack/solid-chartsUpdated definition contract, stable SSR IDs, and composed tooltip bodies @tanstack/svelte-chartsUpdated definition contract, hydration behavior, and a tooltip-body snippet @tanstack/angular-chartsUpdated definition contract and a typed projected tooltip template directive @tanstack/lit-chartsUpdated definition contract and composed tooltip rendering through options @tanstack/alpine-chartsUpdated definition contract and DOM tooltip-body rendering Breaking changes and migrations
Definition identity is now the application reactivity boundary
The runtime no longer accepts formal chart input, prepares data, or compares
input values. A definition captures the application values it uses. Recreate
or memoize the complete definition when those values change. A responsive
builder still reruns when its surface size or build-time theme changes.Before:
const definition = defineChart<readonly Row[]>()({ prepare: (rows) => summarize(rows), prepareEqual: Object.is, inputEqual: Object.is, chart: ({ input, prepared, width, height, theme }) => ({ marks: createMarks(input, prepared), x: createXScale(width), y: createYScale(height, theme), }), }) <Chart definition={definition} input={rows} ariaLabel="Revenue" />After:
function createRevenueDefinition(rows: readonly Row[]) { const prepared = summarize(rows) return defineChart({ marks: createMarks(rows, prepared), x: { scale: scaleUtc, nice: true }, y: { scale: scaleLinear, nice: true }, }) } const definition = useMemo(() => createRevenueDefinition(rows), [rows]) <Chart definition={definition} ariaLabel="Revenue" />Migration details:
- breaking
Remove
inputfrom DOM-host and framework-adapter options. - breaking
Move transforms beside
defineChart, or into the framework memo or computed
primitive that creates the definition. - breaking
Replace
prepare,prepareEqual, andinputEqual. Prepared-data caching
and the preparationAbortSignalno longer exist. - breaking
Remove uses of
ChartPrepareContext,chartInputsEqual, andshallowInputEqual. - breaking
Replace
StaticChartHostOptions,DynamicChartHostOptions,StaticChartProps, andDynamicChartPropswith the unified host and adapter
contracts. - breaking
Read only
width,height, andthemefromChartBuildContext. - breaking
Call
runtime.render(definition, size, layout?); the runtime no longer
accepts an input argument. - breaking
Update low-level generic arguments.
ChartDefinition,DynamicChartDefinition,ChartRuntime, hosts, adapters, and points now
describe datum, x-value, and y-value types rather than input and
prepared-data types. - breaking
For vanilla updates, create the next definition and pass it through
host.update. - breaking
For framework updates, memoize the complete definition against every
application value it captures.
DynamicChartConfigremains public. It combines a responsivechart(context)builder with definition-owned behavior options.Chart behavior moved from hosts into definitions
Focus, tooltip, animation, keyboard, focus-distance, and spatial-index policy
are reusable chart behavior. Hosts and framework components no longer acceptfocus,maxFocusDistance,spatialIndex,animate,keyboard, ortooltip.Before:
<Chart definition={definition} focus={focusX} tooltip={{ sticky: true }} animate={{ duration: 180 }} keyboard ariaLabel="Revenue" />After:
const interactiveDefinition = defineChart(definition, { focus: 'nearest-x', tooltip: true, animate: { duration: 180 }, keyboard: true, }) <Chart definition={interactiveDefinition} ariaLabel="Revenue" />Static definitions may declare behavior directly. Responsive definitions place
behavior besidechart.defineChart(existingDefinition, options)creates a
separately configured definition without moving surface policy back into the
adapter.The host still owns:
- breaking
dimensions and aspect ratio;
- breaking
accessible labels and descriptions;
- breaking
surface class names and styles;
- breaking
focus, grouped-focus, selection, render, and tooltip-body callbacks;
- breaking
text measurement;
- breaking
renderer selection.
The
focusoption now acceptsnearest,nearest-x,nearest-y,group-x,
andgroup-y, as well as a custom focus strategy.Enabled tooltips are pinnable by default. Click, Enter, or Space pins the
current tooltip; Escape or a composed body'sdismisscallback clears it. Settooltip: { sticky: false }for transient-only behavior.Resize animation is opt-in
ChartAnimationOptions.resizenow defaults tofalse.- breaking
Definition changes may still animate.
- breaking
Responsive observation and explicit size changes commit immediately unless
animate.resizeistrue. - breaking
Incompatible layout changes never interpolate.
- breaking
Interrupted animations still begin from currently painted geometry.
- breaking
Renderer completion is associated with the render reason so an older
animation cannot overwrite a newer immediate resize.
Applications that deliberately animate size changes must opt in:
const definition = defineChart(chart, { animate: { duration: 180, resize: true, }, })Built-in marks infer stable identity
Built-in marks no longer fall back immediately to row index. Identity resolves
in this order:- breaking
An explicit
key - breaking
A unique primitive
datum.id - breaking
A unique primitive
datum.data.id - breaking
A unique mark-specific positional candidate
- breaking
Row index
Mark-specific candidates:
- breaking
bars use their categorical channel;
- breaking
lines and areas use their independent axis;
- breaking
rects and cells use the complete x/y interval tuple;
- breaking
dots and text try x, then y, then the x/y tuple;
- breaking
polar lines, areas, and rules use angle;
- breaking
D3 pie-backed polar arcs can recover nested source identity.
A candidate must be complete and unique inside its interaction group.
Development builds warn once per mark instance when a positional candidate is
missing or duplicated and identity falls back to row position.Remove redundant keys when an ID or semantic position already identifies the
datum. Keep an explicit key when position can change independently of entity
identity. Usekey: (_datum, index) => indexonly when positional identity is
intentional.D3 scale factories now request domain inference
Positional, color, radius, and polar scale options distinguish a factory from
a configured instance.const inferred = { x: { scale: scaleUtc, nice: true }, y: { scale: scaleLinear, nice: true }, } const configured = { x: { scale: scaleUtc().domain(fixedDateDomain) }, y: { scale: scaleLinear().domain([0, fixedMaximum]) }, }Migration rules:
- breaking
Pass
scaleLinear,scaleUtc, or another zero-argument D3 factory when the
domain should follow mark channels. - breaking
Use a wrapper such as
() => scaleBand<string>().padding(0.2)when the
factory needs pre-domain configuration. - breaking
Continue passing a configured D3 instance when the application owns a fixed
domain. - breaking
Do not pass
scaleLinear()and expect data inference. It is a configured
instance and retains D3's default domain until the application changes it. - breaking
Move nicening for inferred axes to
nice?: boolean | number. - breaking
Keep every granular
d3-*module imported by application source as a direct
application dependency.
Inference behavior:
- breaking
continuous and temporal axes use the finite extent of every materialized
channel on that axis; - breaking
band and point axes retain distinct values in first-seen order;
- breaking
implicit bar and area baselines contribute zero;
- breaking
empty channels retain the scale factory's native domain;
- breaking
configured instances are copied and never mutated;
- breaking
TanStack Charts owns responsive ranges, y orientation, reversal, band
centering, guide layout, and final tick placement.
Validation is stricter:
- breaking
inferred quantitative and temporal scales reject incompatible semantic
values instead of coercing them; - breaking
an inferred log domain rejects zero or a domain that crosses zero;
- breaking
a bar or area with an implicit zero baseline cannot use an inferred log
scale; - breaking
required-axis checks follow each mark's materialized dimensions;
- breaking
configuring an unused phantom axis is rejected.
Color factories now infer ordinal, continuous, quantize, quantile, or threshold
domains and expose semantic scale kind and thresholds to legends. Radius
factories infer[0, maximum]while preserving configured output ranges.
Polar angle and radius scales use the same factory-versus-instance contract.Point and scale types are more precise
- breaking
ChartPoint.xValueandyValuepreserve inferredDate, numeric, or
categorical values. - breaking
ChartMarkPointXandChartMarkPointYdescribe interaction anchors. - breaking
ChartMarkScaleXandChartMarkScaleYdescribe values materialized into
scales. - breaking
ChartMarkXandChartMarkYremain deprecated compatibility aliases. - breaking
Rectangle and cell interval scale values are independent from their
interaction anchors. - breaking
Custom marks whose interaction and scale values differ use
createMarkWithScaleValuesfrom@tanstack/charts/mark/scale-values. - breaking
Positionless polar and geo definitions may omit Cartesian axes.
- breaking
A one-dimensional mark requires only the dimension it materializes.
Core updates
Channel, interval, and layout refinements
Added an independent semantic
colorchannel across existing Cartesian,
polar, and geographic marks.zremains geometry and interaction grouping. It is the color fallback whencoloris omitted.For lines and areas,
colorgroups paths only whenzis absent. When both
exist,zgroups geometry andcolorsupplies scale semantics.Grouped bars use
z, orcolorwhen nozis present.Final
fillandstrokeaccessors remain paint overrides.Interaction-point colors now match the fill or stroke actually painted.
Interval points now expose
x1Value,x2Value,y1Value,y2Value, andxIntervaloryIntervalrange and difference semantics.Channel field types reject datum fields incompatible with the mark channel.
Inference carries datum and coordinate types through focus, tooltip,
spatial-index, selection, adapter, and renderer callbacks.Custom marks may provide
layoutLabels, allowing data-bound labels,
including polar and geographic labels, to contribute to automatic margins.
Tooltip, focus, and interaction refinements
The native tooltip model now provides structured content rather than only
plain text:safe titles;
ordered rows and swatches;
channel and datum items;
derived items;
interval ranges and differences;
content,items,sort,anchor,placement, andoffsetoptions;compatibility with existing
formatandformatGroupcallbacks.
Grouped tooltip rows can sort by color-domain order, focus order, or a custom
comparator. Anchors can follow the point, pointer, group center, or a custom
coordinate. Eight placements and ordered fallbacks support viewport collision
handling.tooltip.portalmoves the native surface out of clipped stacking contexts.
The host uses the browser Popover top layer when available and a fixed
body-level fallback otherwise. Both paths:map scene anchors to client coordinates;
collide against the viewport;
reposition on scroll, viewport resize, chart resize, and tooltip-content
resize;target the chart's owner document;
clean up when the definition, renderer, or chart host changes.
Framework adapters can compose native framework content into the core-owned
tooltip body. The body context containspoints, structuredcontent,defaultBody,pinned, anddismiss. Transient custom bodies remain inert;
pinned bodies become nonmodal dialogs and may contain selectable or
interactive content.The renderer-neutral host exposes
onTooltipBodyChangeandChartTooltipBodyTargetfor lower-level integrations.Additional interaction corrections:
duplicate public keys no longer collapse distinct observations during path
hover or responsive repaint;spatial-index option changes repaint active focus and tooltip state.
Framework adapter updates
Every existing adapter moved to the definition-identity update contract and
removed formal input and host-owned behavior props. Callback types continue to
infer from the complete definition, and committed callbacks remain fresh
without forcing a new definition.Shared adapter prerendering preserves
className; Vue declares and forwards
it on both server and client paths.
Adapter-specific tooltip composition:
React, Octane, Preact, and Solid expose
renderTooltipBody.Vue exposes a scoped
#tooltipBodyslot.Svelte exposes a
tooltipBodysnippet.Angular exports
ChartTooltipBodyDirective, with the definition as its
strict type witness.Lit accepts
options.renderTooltipBody.Alpine accepts
renderTooltipBodyreturning DOM content.
React now declares
react-dom ^19.0.0as a peer because composed tooltip bodies
use React portals. React and Octane preserve the existing default SVG,/canvas, and renderer-neutral/coreentry boundaries.Catalog, demo data, and publication artifact
The catalog already contained 100 cases at the published
0.0.0baseline.
This range changes the data and publication model without claiming a catalog
count expansion.Source-shaped demo data
Added the private
@charts-poc/demo-dataworkspace package with 27 pinned
Observable datasets and a metadata subpath.Every dataset has an exact subpath export and records source URL, upstream
revision, record count, schema, byte size, license note, and SHA-256.Small snapshots are emitted as typed rows.
Large CSV snapshots remain compact and parse only when their exact subpath is
imported. Sibling datasets and the CSV parser stay out of unrelated chunks.All 100 existing catalog cases were migrated away from case-local
data.ts
fixtures and now import source-shaped data through exact subpaths.Case selection, sampling, joins, derived channels, normalization, layout, and
transforms remain visible inselection.ts,transform.ts,layout.ts, or
model modules.Only two authored interaction-state fixtures remain. They are explicitly
namedscenario.ts, not observation data.React, Octane, and sandbox showcases now use pinned source-shaped datasets
instead of synthetic Stats-shaped fixtures.Demo data is externalized from renderer bundle measurement and is not a
production dependency of any Charts package.Deterministic sync, metadata, schema, hash, exact-subpath, and compact-CSV
tests cover the package.
Schema-v4 source and asset closures
The existing generated-content publication pipeline now emits a schema-v4
catalog artifact.The artifact records the exact Charts revision, source repository, route and
embed contracts, renderer module contract, implementation counts, datasets,
authored-source metadata, and asset graph.Each case records TanStack and reference source closures by entry, support,
fixture, and harness role.Authored-source totals include transitive implementation and transform code
while excluding harness code and raw dataset rows.Published modules are recursively allowlisted with SHA-256, byte size, static
imports, and dynamic imports.Validation rejects unsafe paths, oversized or unreferenced assets,
inconsistent closures, and public comparison modules.The catalog source viewer exposes the same closure and dataset provenance
used by artifact validation.Loading checks preserve the existing contract: the normal catalog and embed
routes load only TanStack code; competitor code remains opt-in.
The artifact cannot replace the production schema-v2 feed until tanstack.com
has deployed and verified its schema-v4 consumer.Documentation, comparison, and lineage
Public documentation gaps
Documentation validation now:
Verification added or updated in the audited product range
Runtime, host, renderer, and framework tests cover definition identity,
behavior ownership, resize render reasons, animation interruption, key
inference, duplicate-key focus, tooltip pinning, portal placement, and
cleanup.Type-contract tests cover mark channels, point and scale value separation,
required axes, factory inference, configured instances, callback inference,
and adapter props.Scale tests cover quantitative, temporal, band, point, log, color, radius,
and polar inference, including empty and invalid domains.Packed-consumer tests cover the revised core, DOM, React, Octane, and adapter
declaration contracts without casts or private imports.Documentation checks cover 81 canonical pages, executable examples, public
package entries, exports, links, and generated mirrors.Catalog checks cover all 100 cases, source roles, exact dataset subpaths,
schema-v4 asset closures, source-view parity, and TanStack-only production
loading.The full catalog and interaction evidence completed during this range.
0.0.1 release-preparation corrections
Updated the canonical docs, public READMEs, generated package mirrors, and
llms.txtindexes for the0.0.1API.Replaced temporary unreleased-source warnings with
0.0.1installation
guidance, including the React DOM runtime and type peers required by the
React adapter.Replaced private demo-data imports in public examples with small,
self-contained typed datasets.Fixed the comparison fixture to configure behavior on definitions instead of
the removed host boundary.Refreshed the reviewed bundle baseline and recorded the TanStack workspace
revision separately from pinned competitor package versions.Updated the offline chart-authoring evaluation to target the
0.0.1
definition, behavior, and scale contracts.Added this baseline-verified changelog and the required tanstack.com
consumer-before-catalog deployment order.
Audited product commit inventory
(2026-07-29), Credit grammar-of-graphics lineage:
clarified implementation and conceptual lineage across acknowledgements,
concepts, overview, and marketing.(2026-07-29), Close public documentation gaps:
expanded the canonical reference, added evidence-backed comparison content,
tightened documentation contracts, and fixed public host, focus, export,
scale, and adapter gaps discovered while documenting the API.(2026-07-29), Make definition identity the chart reactivity
boundary: removed formal input, preparation, equality, and cache APIs and
migrated runtimes, hosts, adapters, examples, and all catalog cases to
captured application values.(2026-07-29), Disable chart animation during resize:
classified render reasons, made responsive and explicit resize immediate by
default, and addedanimate.resizeopt-in.(2026-07-29), Move chart behavior into definitions:
moved focus, tooltip, animation, keyboard, focus distance, and spatial
indexing out of hosts; added focus presets, pinnable tooltips, and richer
structured tooltip behavior.(2026-07-29), Infer stable chart keys:
added ID and mark-specific positional identity inference, development
diagnostics, and reconciliation, animation, and focus coverage.(2026-07-29), Infer scale domains from marks:
added direct D3 factories, domain inference, axis nicening, strict value
validation, and corresponding positional, color, radius, and polar scale
behavior.(2026-07-30), Add composable portal tooltips:
added top-layer and fixed portal positioning, framework-native tooltip
bodies, pinned dialog behavior, and adapter-specific composition APIs.(2026-07-30), Improve chart inference and catalog data:
completed point and scale typing, required-axis inference, independent color
channels, interval metadata, source-shaped demo data, visible transform
roles, source closures, and the schema-v4 catalog artifact.