Accessibility is part of the chart contract, not a final annotation pass. TanStack Charts provides named SVG and Canvas surfaces plus shared focus primitives; the application still owns the surrounding explanation, controls, and exact-value alternative.
Every DOM host and framework adapter requires ariaLabel:
<Chart
definition={definition}
ariaLabel="Weekly downloads for three packages"
/>Use ariaDescription when the reader needs context that is not already visible nearby:
<Chart
definition={definition}
ariaLabel="Weekly downloads for three packages"
ariaDescription="Values are seven-day totals. Missing weeks are rendered as gaps."
/>The SVG renderer emits an image role, a chart roledescription, and a <desc> when a description is supplied. The Canvas renderer places the same image role, name, roledescription, description, and tab index on its root while keeping its two paint canvases aria-hidden. Do not put instructions, conclusions, and all underlying data into one enormous accessible name.
A chart should usually be accompanied by:
Use normal HTML for this content. It is easier to navigate, select, translate, and print than text embedded in SVG.
Native focus supports pointer and keyboard navigation over chart points. Leave keyboard enabled when a chart is interactive. Focus callbacks expose the same typed ChartPoint data regardless of input method.
If the application replaces native focus with a brush, zoom, editor, or rich overlay:
The Interactions and Selections guide defines the ownership boundary.
Pair semantic color with at least one other signal:
Check contrast against the actual application background in both light and dark modes. The theme cannot infer whether an arbitrary data color is accessible.
Animation respects prefers-reduced-motion by default. Keep respectReducedMotion: true unless an application has a stronger accessible motion policy.
Motion should explain continuity between states. It should not:
See Dynamic Data and Animation for transition semantics.
The native tooltip exposes its structured rows through a polite status region. It is not a replacement for a label, axis, legend, or data table. Essential information must remain available without hovering.
For complex content, render an application-owned tooltip and manage focus, dismissal, and reading order as ordinary HTML.
For analytical and operational charts, a linked table gives readers exact values and a familiar navigation surface. Selection state should be shared semantically, rather than inferred from DOM nodes.
Test the finished application, not only the SVG or Canvas element:
Automated checks can catch missing names and invalid roles, but they cannot decide whether the representation communicates the right thing.