@pyreon/charts/plot is Pyreon's own chart engine. It has zero runtime dependencies: geometry is computed in pure TypeScript into a flat draw list, which a tiny canvas host paints in the browser and a pure string builder serializes on the server. Marks are imported bindings, so an unused chart type tree-shakes out of your bundle like any unused function.
The main @pyreon/charts entry remains the ECharts bridge — reach for that when you need the long tail of ECharts series types today. Reach for /plot when you want a small, fast, dependency-free chart whose geometry renders to a pure SVG string on the server (chartToSvg /optionToSvg — the components themselves paint a canvas after hydration), hydrates nothing it doesn't need, and shares its geometry with the native (SwiftUI/Compose) runtimes.
Quick start
// @check
import { Axis, Bar, Legend, Line, Plot, Tip, currency } from '@pyreon/charts/plot'
type Row = { month: string; revenue: number; target: number }
const rows: Row[] = [
{ month: 'Jan', revenue: 3200, target: 3000 },
{ month: 'Feb', revenue: 4100, target: 3400 },
{ month: 'Mar', revenue: 3800, target: 3800 },
]
export const Revenue = () => (
<Plot<Row> data={rows} x="month" title="Monthly revenue vs target" showTitle>
<Bar y="revenue" label="Revenue" />
<Line y="target" label="Target" />
<Axis y format={currency('