TanStack
Getting Started

Compare Libraries

The latest published TanStack Charts release is 0.13.0, while this page measures unreleased workspace source against pinned competitor packages. This comparison records architectural differences and reproducible evidence without turning untested behavior into a checkmark.

Tested versions

LibraryPackageMeasured source
TanStack Charts@tanstack/chartsworkspace 56567ec
Chart.jschart.jsnpm 4.5.1
Apache EChartsechartsnpm 6.1.0
Rechartsrechartsnpm 3.10.1
Observable Plot@observablehq/plotnpm 0.6.17

The competitor versions are exact package pins, not latest versions inferred at page render time. The measured TanStack workspace revision is 56567ec.

Capability matrix

  • ✅ Documented first-party component or API
  • 🟡 Requires application composition, an external package, or explicit lifecycle work
  • 🔴 No documented first-party path

“Measured” libraries are installed at the pinned versions above and exercised by the controlled suite. “Docs” entries are reviewed against the linked official documentation and carry no bundle or performance claim. Library rows are sorted by GitHub repository stars read on 2026-07-31, with TanStack Charts pinned first. Stars are an ordering key, not an adoption measure.

LibraryAxes and gridLegendPointer tooltipMulti-seriesSelectionAnimationResponsive resizeEvidence
TanStack Charts✅ Built in✅ Built in✅ Built in✅ Built inonSelect✅ Built in✅ ObservedMeasured
D3✅ Modules🟡 Authored🟡 Authored✅ Primitives✅ Brush and events✅ Transitions🟡 Host layoutDocs
Chart.js✅ Built in✅ Plugin✅ Plugin✅ Datasets✅ Event API✅ Built in✅ ObservedMeasured
Apache ECharts✅ Components✅ Component✅ Component✅ Series✅ Event API✅ Built in🟡 Explicit resize()Measured
Recharts✅ Components✅ Component✅ Component✅ Components✅ Event props✅ Built inResponsiveContainerMeasured
visx✅ Components✅ Component✅ Component✅ Primitives✅ Brush🟡 ExternalParentSizeDocs
Plotly.js✅ Built in✅ Built in✅ Built in✅ Traces and subplots✅ Box and lasso✅ Built in✅ Responsive configDocs
Lightweight Charts✅ Built in🟡 Host🟡 Host✅ Series🟡 Events and host🔴 No transitionsautoSizeDocs
ApexCharts✅ Built in✅ Built in✅ Built in✅ Series✅ Point and range✅ Built in✅ BreakpointsDocs
Nivo✅ Components✅ Component✅ Component✅ Series✅ Event props✅ React Spring✅ Responsive componentsDocs
Highcharts✅ Built in✅ Built in✅ Built in✅ Series✅ Point and range✅ Built in✅ ReflowDocs
Victory✅ Components✅ Component✅ Component✅ Components✅ Events and containersanimate✅ Responsive containerDocs
uPlot✅ Built in✅ Built in🟡 Plugin or host✅ Series✅ Cursor and select🔴 No transitions🟡 setSize()Docs
Vega-Lite✅ Guides✅ Built in✅ Encoding✅ Layers and views✅ Parameters🟡 Vega or host✅ Container sizingDocs
Observable Plot✅ Marks and scales✅ Legend API✅ Tip mark✅ Marks and transforms🟡 Host composition🟡 Host-owned🟡 Host rerenderMeasured
Bklit UI✅ Components✅ Component✅ ComponentComposedChart✅ Brush✅ Motion✅ Container measureDocs
AG Charts✅ Components✅ Component✅ Component✅ Series✅ Enterprise✅ Enterprise✅ Auto-sizeDocs

License color:

  • 🟢 Permissive open source; commercial use allowed
  • 🟡 Open core or mixed open/proprietary offering
  • 🟠 Commercial use is conditional or revenue-limited
  • 🔴 Paid license required for commercial use
LibrarySVG outputCanvas or WebGL outputFramework-neutral coreLicense / paid tier
TanStack Charts✅ Default✅ Optional renderer✅ Core + adapters🟢 MIT
D3✅ Yes✅ Yes✅ Yes🟢 ISC
Chart.js🔴 Canvas only✅ Default✅ Yes🟢 MIT
Apache ECharts✅ Optional renderer✅ Default✅ Yes🟢 Apache-2.0
Recharts✅ Default🔴 No first-party renderer🔴 React only🟢 MIT
visx✅ Default🔴 No renderer🔴 React only🟢 MIT
Plotly.js✅ Common traces✅ WebGL traces✅ Yes🟢 MIT
Lightweight Charts🔴 No renderer✅ Default✅ Yes🟢 Apache-2.0
ApexCharts✅ Default🔴 No renderer✅ Yes🟠 Free under $2M revenue; commercial or OEM otherwise
Nivo✅ Default✅ Selected charts🔴 React only🟢 MIT
Highcharts✅ Default✅ Boost WebGL✅ Yes🔴 Commercial; separate non-commercial terms
Victory✅ Web✅ Native Skia🔴 React only🟢 MIT
uPlot🔴 No renderer✅ Default✅ Yes🟢 MIT
Vega-Lite✅ Yes✅ Canvas✅ Yes🟢 BSD-3-Clause
Observable Plot✅ Default🔴 No first-party renderer✅ Yes🟢 ISC
Bklit UI✅ Default🔴 No renderer🔴 React only🟡 MIT components; proprietary Studio
AG Charts🔴 No renderer✅ Default✅ Yes🟡 MIT Community; paid Enterprise

A checkmark means the named path exists; it does not claim identical defaults, accessibility, output, or performance.

The standard suite exercises axes, guides, tooltips, legends, and multi-series composition. Selection, animation, and resize paths are recorded but excluded from timing. Renderer and framework rows follow each package's documented output model.

Bundle snapshot

Baseline date: 2026-08-14.

Controlled ranges cover 12 independently built, minified browser consumers: line, bar, area, and scatter at basic, interactive, and advanced tiers. Only Recharts has a separate incremental result because that lane externalizes React and React DOM.

External figures are not comparable to the controlled cold-page ranges. Most come from a Bundlephobia main-export snapshot published on July 7, 2026. The Vega-Lite, AG Charts, and uPlot main exports were read from Bundlephobia on July 31, 2026. Modular imports can be smaller, especially for AG Charts.

LibraryBundle sizeReact externalizedEvidence
TanStack Charts37.63–43.59 KiBControlled suite
D390 KB gzipExternal main export
Chart.js44.70–58.21 KiBControlled suite
Apache ECharts153.10–173.18 KiBControlled suite
Recharts153.08–168.27 KiB94.96–109.96 KiBControlled suite
visx49 KB gzipExternal @visx/xychart main export
Plotly.js~250 kB partial; ~3.6 MB full min+gzipVendor distribution figures
Lightweight Charts60 KB gzipExternal main export
ApexCharts164 KB gzipExternal main export
Nivo143 KB gzipExternal main export
Highcharts100 KB gzipExternal main export
Victory105 KB gzipExternal main export
uPlot22 KB gzipExternal uplot@1.6.32 main export
Vega-Lite87 KB gzipExternal vega-lite@6.4.3; excludes the peer Vega runtime
Observable Plot83.34–91.94 KiBControlled suite
Bklit UIRegistry-installed source; no fixed package bundle
AG Charts367 KB gzipExternal ag-charts-community@14.0.2 main export

The tracked baseline distinguishes the TanStack workspace revision from competitor package versions and records the complete chart/tier matrix; the deterministic bundle gate rejects either kind of drift.

The table does not report install size or runtime speed. The controlled comparison builds the current TanStack workspace source and the pinned competitor packages. Browser timing is meaningful only within one machine and browser run, so this page does not publish a cross-machine timing leaderboard.

Broader conformance

The catalog corpus contains 117 TanStack/reference pairs: 79 sourced from Observable Plot, 27 from Recharts, and 11 from Apache ECharts. Twenty-two pairs carry executable interaction scenarios. Those counts describe selected reference coverage, not each library's feature ceiling or a list of built-in TanStack chart types. Chart.js participates in the standard and stress suites, not the catalog corpus.

The catalog displays each renderer entry, its transitive support and transform files, and provenance for imported demo datasets. Its report counts the complete authored source closure and publishes the source-line ratio for every pair; moving a transform or layout into a support module does not remove it from the comparison, while raw snapshot rows are not treated as chart authoring.

TanStack deliberately keeps several responsibilities outside the default runtime:

ResponsibilityOwner
Binning, grouping, stacking, and statisticsHoistable TanStack transforms or granular D3 modules
Spatial layoutsApplication code using a suitable layout library
Brush and zoomControlled application state plus an exact behavior
Scrubber and editor stateApplication state and optional direct manipulation
Data fetching, cleaning, filtering, and persistenceThe application's data and state layers

Choose Chart.js when Canvas-first standard charts and its plugin ecosystem fit the application. Choose Apache ECharts for a broad built-in controller and chart catalog with Canvas or SVG output. Choose Recharts for a React-native SVG component model. Choose Observable Plot for concise exploratory marks and transforms. Choose TanStack Charts when one typed, framework-independent definition must grow from standard charts into application-specific SVG or Canvas composition while keeping D3 and state ownership explicit.

Evidence and reproduction

shell
pnpm benchmark:size
pnpm benchmark:check
pnpm benchmark:stress:quick
pnpm conformance:quick

The browser-backed commands require the pinned Playwright browser. Read the bundle and performance guide before interpreting results, and use the migration guide to establish application-specific parity before replacing an existing library.