v0.3 · MIT · zero runtime dependencies
39 chart types, one accessible canvas engine, and nothing else in your node_modules.
A framework-agnostic charting core with thin React, Vue, Svelte and Angular wrappers. Every chart ships a screen-reader data table, full keyboard navigation and a colorblind-safe palette — before you configure anything.
npm install @chartcraft/core
Performance figures come from npm run bench -w @chartcraft/core — 129 measurements of the library's own work (ingest, model, layout, draw calls), not of rasterization. The numbers, and their caveats, are published in the quality audit.
The catalogue
Every type ships with tooltips, keyboard navigation, a data table and export — there is no "advanced" tier. Each example page is also opinionated about when not to use its type, because picking the wrong form is the most expensive mistake in data visualization.
Accessibility
A canvas is one opaque rectangle to assistive technology. So every ChartCraft chart maintains a parallel DOM beside the pixels — generated from the same model, on every update, with zero configuration.
The table below the chart is the a11y.table fallback, shown here instead of visually hidden. It is what a screen reader reads, and what exportData() writes to CSV — the same rows, always.
Performance
LTTB downsampling reduces a series to the plot width once, and the retained model stays reduced — so a resize at one million points costs the same as a resize at one thousand. Then it re-runs inside the zoom window, so detail comes back when you go looking for it.
Colour
Eight categorical slots, validated pairwise under CVD simulation in both schemes. Colour follows series identity, never rank, so a series keeps its slot when you filter, sort or toggle it. Dark mode is a second designed scheme, not an inversion.
Frameworks
Every feature lives in @chartcraft/core. The wrappers own lifecycle, resize observation and event bridging — and nothing else, so there is no feature that exists in one framework and not another, and nothing to port when the next one lands.
Code to result
Axes are inferred from the data. The legend appears because there are two series. Tooltips, keyboard navigation and the data table are already on. Nothing below is abbreviated for the pitch — it is the whole thing.
import { createChart } from '@chartcraft/core';
const chart = createChart(el, {
type: 'bar',
title: 'Revenue by quarter',
subtitle: 'FY2026, USD millions',
data: {
categories: ['Q1', 'Q2', 'Q3', 'Q4'],
series: [
{ name: 'Product', data: [12.4, 13.1, 14.8, 16.2] },
{ name: 'Services', data: [6.1, 6.4, 7.0, 7.9] },
],
},
});No plugin registry, no license key, no runtime dependencies. Add the core, import a wrapper if you use one, and every chart type on this site is available to you.
npm install @chartcraft/coreMIT licensed. React 18+, Vue 3 and Svelte 4/5 wrappers ship alongside the core; Angular and Solid are on the roadmap.