Charts, beautifully composed
Composable React chart primitives with spring-animated interactions. Open source, built on shadcn patterns.
<Chart data={data} xDataKey="month"><LineMarkdataKey="value"color="#3b82f6"curve="monotoneX"/><XAxis /><YAxis /><Cursor axis="x" /><Tooltip /></Chart>
Get started
One command, full source
Install individual chart components from the shadcn registry. You own the code — no runtime dependency.
<Chart data={analytics} xDataKey="date"><AreaMarkdataKey="sessions"color="#3b82f6"fillOpacity={0.1}clipToActive/><LineMarkdataKey="sessions"gradient={{ from: "#3b82f6", to: "#22c55e" }}strokeWidth={2}/><Cursor axis="x" spring /><Tooltip /><Legend /><XAxis /><YAxis /></Chart>
API
Composable by design
Every chart is assembled from focused primitives. Marks, axes, and interactions are React components — combine them however you need.
- Layer marks freely
- Stack LineMark, BarMark, and AreaMark in any combination. They share scales automatically.
- Polymorphic interactions
- Tooltip and Legend auto-detect their context. Drop them in — no configuration needed.
- Type-safe data keys
- Generic props constrain dataKey to your data shape. Mistakes are caught at compile time.
Performance
Interactions that never stutter
0
re-renders on hover
Cursors, tooltips, and active dots position themselves via direct DOM mutation in a rAF loop.
60fps
spring-animated interactions
Every hover effect uses requestAnimationFrame with time-based exponential decay for jank-free motion.
keyof T
generic data constraints
Data keys are constrained to your schema at the type level. Invalid props are caught at compile time.
Built for real applications
Choropleth maps
Geographic visualization with multi-level drill-down, breadcrumbs, and quantile color scales.
Brush & zoom
BrushSlider for time-series navigation. Select a range to zoom, with smooth animated transitions.
Voronoi snapping
PointLayer uses d3-delaunay for instant nearest-point lookup across scattered data.
LTTB downsampling
Largest-triangle-three-buckets algorithm renders dense time-series without jank.
Skeleton loading
DefaultChartSkeleton renders chart-shaped placeholders that match your layout during data fetches.
Reference lines
Annotate thresholds, targets, and averages with ReferenceLine — static or data-driven.