Render 100k+ ticks at 60fps on a canvas — while staying fully keyboard-navigable, screen-reader-announced, and find-in-page-able. The combination no charting library has shipped. Built for regulated fintech.
npm install fcharts-js — the MIT renderer is on npm today · Zero runtime dependencies · ~21 KB gzip core · Chrome, Firefox & Safari, no flags
Drag to pan · scroll to zoom · click the chart and use ← → ↑ ↓ — every value is announced aloud, and Ctrl+F finds the axis & data text.
Fast, accessible, or shipped this quarter. The fast canvas libraries throw away accessibility; the accessible ones fall over at tick-data scale. So teams ship something inaccessible and hope no one files a complaint.
The EU Accessibility Act has covered consumer banking and financial services since June 2025, US ADA web-accessibility lawsuits keep climbing, and public-sector buyers require Section 508 conformance. And roughly 1 in 4 US adults lives with a disability — your customers, and the analysts reading your internal dashboards. Here's where that actually lands on a fintech team:
Enterprise and government procurement ask for an accessibility conformance report (VPAT/ACR) before they sign. If your data views can't produce one, the deal stalls in security review or you're cut from the RFP. Accessibility is a sales gate now, not just an ethics one.
Teams make their nav and forms accessible, then a single canvas price chart sinks the report: to a screen reader it's a blank bitmap — no values, no keyboard path, nothing find-in-page can reach. Data-heavy views are the failing line item.
When accessibility surfaces weeks before close, it's emergency remediation or a dropped feature. Built in from the start it's nearly free — fcharts ships it by default, with the conformance evidence attached.
Every chart ships with its conformance evidence — a per-criterion VPAT/ACR for the chart layer, generated from the committed audit on every build, not hand-written. Machine-readable JSON included, and fcharts-audit --compare diffs two reports so procurement sees exactly what changed between versions.
View a sample report →Wondering where your current charts stand? Point the audit at any live page —
it runs the functional checks (keyboard, screen-reader wiring, contrast) an axe scan
skips, on charts from any library:
npx -p fcharts-js -p playwright fcharts-audit --target https://your.app --selector '#chart'
Same 100k-point × 3-series dataset, a 5-second automated pan/zoom, axe-core scoped to each chart, real keyboard + find-in-page assertions. Numbers from the committed benchmark (Chromium).
| Library | Render | 100k+ pts | Keyboard | Screen reader | Find-in-page |
|---|---|---|---|---|---|
| TradingView | canvas | fast | no | no | no |
| uPlot | canvas | fast | no | no | no |
| Highcharts Stock | SVG | slows | yes | yes | yes |
| ECharts | canvas | fast | partial | partial | no |
| fcharts | canvas + DOM | fast | yes | yes | yes |
The same real-DOM layer that serves screen readers makes the data legible to LLM agents and crawlers. A canvas chart is an opaque bitmap; fcharts exposes exact values and trend in the accessibility tree and as embedded JSON. Below is live data pulled straight from the chart at the top of this page.
What an agent (or screen reader) extracts: nothing. It's a bitmap — the agent must screenshot and guess. No values, no trend, not findable.
…
…
Exact values, no vision model required — embedded as <script type="application/json" data-fcharts> and in the accessibility tree.
The EU Accessibility Act took effect in June 2025 and names banking and financial services explicitly. ADA web lawsuits keep climbing, and procurement increasingly demands a VPAT. An inaccessible price chart is now a compliance liability — but ripping out your fast canvas charts for slow SVG isn't an option either. fcharts is the way out of that bind.
Arrow through every sample, switch series, jump to extremes — announced via a polite live region.
Axis ticks and a hidden data table are real DOM — screen-reader-readable and Ctrl+F-findable.
Zero serious axe-core violations out of the box. The conformance evidence comes with it.
A min/max pyramid keeps frame cost flat from 10k to 250k+ points. No WebGL required.
No supply-chain surface, no framework lock-in. Drop it into anything.
Stock Chrome, Firefox and Safari — no experimental flags, verified in all three.
React, Vue and Svelte adapters, a <f-chart> web component, and a CLI that renders SVG from JSON — one engine underneath.
Render an accessible SVG on the server, then hydrate() upgrades it in place — no layout shift, content before JavaScript.
CI drives an actual NVDA over a live chart and asserts on the phrases it speaks — name, values, legend state — green on every push, not just ARIA attributes.
The renderer is MIT and on npm today (npm install fcharts-js). Early access is for the Compliance Pack — the generated VPAT/ACR and the CI gate that keeps it current. We're working with a handful of regulated fintech and data-platform teams who've failed an accessibility audit on data-heavy views. If that's you, get in.