● Trading-grade · WCAG-ready

Financial charts that are fast and pass the audit.

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

Live · NDX intraday 120,000 ticks rendered render: DOM-overlay

Drag to pan · scroll to zoom · click the chart and use — every value is announced aloud, and Ctrl+F finds the axis & data text.

The gap

Every financial chart makes you pick two.

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.

TradingView · uPlot · ECharts

Fast canvas/WebGL. The fintech default.
fast at 100k+no keyboardno screen reader

Highcharts Stock

SVG with a real accessibility module.
accessibleslows at scaleheavy DOM

Roll your own (D3 / visx)

Total control, total cost.
months of worka11y is on you

fcharts

Both, by default — no trade-off.
fast at 100k+keyboard + SRaudit-ready
What's at stake

An inaccessible chart costs deals, not just goodwill.

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:

📄

No VPAT, no contract

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.

🚫

Charts are where the audit fails

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.

⏱️

Found late, fixed expensive

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'

Proof, not promises

Measured head-to-head, in three browsers.

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).

120 fps
sustained pan/zoom
0.07 ms
per frame at 100k pts
0
serious axe violations
LibraryRender100k+ ptsKeyboardScreen readerFind-in-page
TradingViewcanvasfastnonono
uPlotcanvasfastnonono
Highcharts StockSVGslowsyesyesyes
EChartscanvasfastpartialpartialno
fchartscanvas + DOMfastyesyesyes
Accessible = agent-readable

Charts your AI agents can actually read.

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.

A canvas chart TradingView · uPlot
<canvas>

What an agent (or screen reader) extracts: nothing. It's a bitmap — the agent must screenshot and guess. No values, no trend, not findable.

fcharts read live from the DOM

Exact values, no vision model required — embedded as <script type="application/json" data-fcharts> and in the accessibility tree.

Why now

Accessible finance stopped being optional.

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.

⌨️

Keyboard data cursor

Arrow through every sample, switch series, jump to extremes — announced via a polite live region.

🔍

Real text, not pixels

Axis ticks and a hidden data table are real DOM — screen-reader-readable and Ctrl+F-findable.

📄

Audit-ready

Zero serious axe-core violations out of the box. The conformance evidence comes with it.

O(viewport) rendering

A min/max pyramid keeps frame cost flat from 10k to 250k+ points. No WebGL required.

🪶

~21 KB core, zero deps

No supply-chain surface, no framework lock-in. Drop it into anything.

🌐

Works today

Stock Chrome, Firefox and Safari — no experimental flags, verified in all three.

🧩

Any stack

React, Vue and Svelte adapters, a <f-chart> web component, and a CLI that renders SVG from JSON — one engine underneath.

🖥️

SSR → interactive

Render an accessible SVG on the server, then hydrate() upgrades it in place — no layout shift, content before JavaScript.

🗣️

Tested on a real screen reader

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.

Early access

Make your charts fast and compliant — without choosing.

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.