Fast, dependency-free time-series charting on pure Canvas 2D. Every feature below is live — hover, click, toggle, tweak.
Monotone cubic interpolation (Fritsch–Carlson) — smooth, never overshoots. Adaptive Y labels, honest time axis. Hover for the crosshair + tooltip.
Click a legend dot to hide/show a series. The Y-axis rescales to the visible set — hide the noisy one and watch the axis tighten.
A rolling 60-second window, updated every 500ms via chart.update(). Frame budget holds well under 16.7ms.
Discrete bars for cumulative counters. Bars grow from zero (not the floor), so a non-zero yMin and negative values both render correctly.
The setXRange() API narrows the visible window. This is the foundation for interactive zoom/pan and cross-chart cursor sync.
Missing data renders as a break, not a misleading connector. Essential for monitoring — a dropped collector must read as a gap, not a flat trend.
Auto-scaling now derives both ends of the Y range. Temperature deltas, signed net.rx, and all-negative series all render right-side-up.
Detach your domain language from the chart core with yFormat / xFormat, and recolor every visual via theme.
Wire on.{ready, hover, click, seriesToggle} for custom tooltips, analytics, or cross-chart sync. Hover/click the chart below.
Dense series are reduced to ~2 points per pixel column, preserving peaks and troughs. The overlay canvas keeps hover cheap regardless of N.