The React bar chart you don't have to fight.
Drop a production-ready bar chart into your React app in minutes. Grouped, stacked, or 100% stacked — just your data and a single typed config.

Why this bar chart library
The fiddly parts of a bar chart, already handled.
How it works
Data in, bar chart out in three steps.
step 1
Install the SDK
One command, private npm package, TypeScript-first. Works with npm, yarn, pnpm, and bun.
step 2
Define your bar config
Set type: 'bar', pass your rows, and pick grouped, stacked, or 100% stacked — all fully typed.
step 3
Render anywhere in your tree
Wrap in GraphProvider and drop in the Graph component. That's it.
Agents
Don't want to write the config? Let an agent build the bar.
Graphy's agents read your dataset, decide grouped, stacked, or 100% stacked, and ship a validated bar chart — deterministic math, not LLM guesswork.
ask mode
Ask for a bar chart. Get a good one.
explore mode
Drop in your data. Get the chart.
Hand the agent a raw dataset and it finds what matters, picks grouped vs. stacked with scoring rules, and proves the comparison with a clean bar chart.
Use cases
Great for comparing categories side by side.

Quarterly comparison
Compare Q1 vs Q2 revenue by region with side-by-side grouped bars.

Team composition
Stack full-time, part-time, and contract headcount to show totals per department.

Channel mix
Normalize each bar to 100% to show the relative split across channels.
Compare
Side by side with the usual options.
FAQ
Bar chart questions, answered.
How do I make a bar chart in React?
Install the SDK, define a config object with type: 'bar' and your data rows, then render <GraphProvider config={config}><Graph /></GraphProvider>. The chart, labels, and legend are handled for you — no manual SVG or canvas work.
Do I need a separate charting library?
No. The bar chart, tooltips, legend, and data labels ship in one package. You pass data in and get a production-ready chart out, rather than assembling primitives yourself.
How do I stack multiple series?
Set type: 'barStacked' with the same columns and rows shape. Each series renders as a segment of one bar, end-to-end, showing both parts and the total.
Can I show percentages instead of raw values?
Yes. Use type: 'barStackedFill' to normalize each bar to 100%, and set dataLabels: { showDataLabels: true, dataLabelFormat: 'percentage' } to label each segment's share.
How do I sort bars by value?
Set options.sortBars: true. It ranks bars from highest to lowest automatically — this only applies to single-series grouped bar charts.
How is this different from MUI X Charts or Chart.js?
Those are capable libraries, but you own most visual decisions and wiring. This is a config-first chart API: polished defaults, an optional end-user editor, and fine-grained overrides only when you want them.






















