Typed arrays → lttb / bin2d → ordinary Chart.js datasets
lttb
bin2d
vizcrush reduces the expensive raw data; Chart.js handles axes, interaction, and rendering.
Line chart: LTTB downsampled 1M → 2000 points
Scatter density: bin2d 500K → 128×128 grid