Reflex Open Sources XY: A Rust-Backed Super-Fast Python Charting Library That Keeps 100 Million Point Charts Interactive
Reflex AI has released XY , an Apache-2.0 Python charting library for interactive 2D visualization.

Open Sources XY: A Rust-Backed Super-Fast Python Charting Library That Keeps 100 Million Point Charts Interactive">
Reflex AI has released XY , an Apache-2.0 Python charting library for interactive 2D visualization. Most Python charting stacks create one drawable object per row, so past a few hundred thousand points, render, hover, and zoom degrade. XY moves the work into a native Rust core, sends the browser typed binary buffers instead of JSON, and draws with WebGL2. In the terms of the benchmark, XY holds 0.071 s at 10,000 points and 0.081 s at 100 million . It ships as pip install xy and requires Python 3.11 or newer.
XY is early alpha at version 0.0.1 . It ships as pip install xy and requires Python 3.11 or newer.
That maps to a clear deployment envelope. Startups and mid-size data teams can adopt it now for internal analytics, notebooks, and shareable artifacts. Regulated enterprises should pilot it rather than put it on a customer-facing critical path. Fit is strongest where row counts are the actual bottleneck: quantitative finance (tick data), genomics and bioinformatics (Manhattan plots, allele-frequency scans), observability and telemetry , astronomy , and geospatial analytics . Here is how to install it in 1 line.
XY keeps canonical f64 columns in a ColumnStore in Python and picks a rendered representation per trace. Current defaults start M4 decimation above 10,000 rows for long ordered lines, and automatic scatter density above 200,000 points . Density grids default to 512×384 cells. The docs are explicit that these are pre-1.0 policy thresholds, not API guarantees.
Because exact values stay in Python, hover, selection, and pick() still resolve original rows when the active tier has an exact mapping. Zooming into a narrow window returns exact visible points for a padded aligned window, and nearby pans render from that cached window without another request. Reflex is careful not to overclaim here: density is natively binned and GPU-rendered, not an all-GPU ingest pipeline, and ingest, binning, and decimation still scale with source row count.
The benchmark drives every library through a real browser and stops the clock only when the canvas is verified correct and stable across 10 byte-identical frames. Measurements come from one Apple M5 Pro, one run per cell.
That is a stated 34× speedup at 10M and 177× at 50M. Peak Python-side memory at 10M is 0.32 GiB for XY against 0.84 GiB for Matplotlib and 1.86 GiB for Plotly. With density=False , XY still draws 100M exact markers in 1.343 s on 5.26 GiB. Reflex also reports rendering the full OpenStreetMap dataset — 10 billion points .
A 10-million-point interactive scatter exports to 258 KiB of HTML, versus a stated 259 MiB for the Plotly equivalent. The payload stays near 258 KiB from 1M through 100M rows.
Source: MarkTechPost