AI Pulse by Inblix

Reflex's XY charts 100M points in 0.08s, shrinks HTML exports by 1,000x

MarkTechPost · Aug 4, 2026 · 3 min read · Read original article →

Curated by the Inblix editorial team


Featured image for article: Reflex's XY charts 100M points in 0.08s, shrinks HTML exports by 1,000x

The standard Python visualization stack hits a wall at a few hundred thousand points. Reflex AI just open-sourced XY under Apache 2.0, and the numbers are genuinely jarring: 0.071 seconds to render 10,000 points, and 0.081 seconds for 100 million. That’s not a typo. The secret is structural — instead of creating one drawable object per row like Matplotlib or Plotly, XY keeps exact f64 columns in Python and ships typed binary buffers from a native Rust core to a WebGL2 canvas in the browser. The browser only ever draws screen-bounded representations.

For teams drowning in tick data or genomic scans, the export size alone might justify switching. A 10-million-point interactive scatter exports to 258 KiB of HTML. Reflex says the Plotly equivalent weighs in at 259 MiB — a thousand-fold difference. Memory tells the same story: at 10 million points, XY uses 0.32 GiB against Plotly’s 1.86 GiB. Even with density decimation switched off, XY brute-forces 100 million exact markers in 1.343 seconds on 5.26 GiB of RAM. Reflex also claims it rendered the full OpenStreetMap dataset, all 10 billion points.

Version 0.0.1 is early alpha — Reflex is upfront about that — which makes the deployment calculus straightforward. Startups and mid-size data teams can use it today for notebooks and internal dashboards. Regulated enterprises should wait before putting it on a customer-facing critical path. The sweet spot is wherever sampling before plotting is the current default: quantitative finance, bioinformatics Manhattan plots, observability telemetry, astronomy, and geospatial work. Installation is a single pip install xy on Python 3.11 or newer.

The API should feel familiar to anyone who’s written Matplotlib. Fourteen chart families ship out of the box, and import xy.pyplot as plt runs common pyplot code, though the compatibility guide warns not everything is supported yet. Styling accepts CSS and Tailwind classes, and a separate adapter turns any chart into a Reflex component with no JavaScript. What I find most clever is the representation ladder: above 10,000 rows, XY auto-switches to M4 decimation for ordered lines; above 200,000 points, it moves to density grids. But because the exact values stay in Python, hover and selection still resolve the original rows. Zooming into a tight window returns exact visible points from a cached, padded window. Reflex is careful not to overclaim — density is GPU-rendered but binned, and ingest still scales with row count. This isn’t magic. It’s just the right tradeoffs, finally packaged for Python users who’ve been waiting years for interactive big-data viz that doesn’t collapse under its own weight.

💡 Key Takeaways

  1. XY holds render time nearly flat from 10k to 100M points by drawing screen-bounded representations rather than per-row markers, achieving a 177× speedup over Plotly at 50M rows
  2. A 10-million-point interactive scatter exports to 258 KiB of HTML versus Plotly's 259 MiB — a 1,000x reduction — because XY sends typed binary buffers, not JSON
  3. Exact f64 columns remain in Python, so hover, selection, and zoom drilldown still resolve original rows even when the GPU renders a binned density grid
  4. Version 0.0.1 alpha is deployable today for notebooks and internal tools, but Reflex explicitly warns against putting it on customer-facing critical paths before 1.0

Keep reading: See related articles below for more coverage on this topic.

Get smarter about AI

The sharpest AI news, curated daily. Delivered free to your inbox.

Learn more

Glossary terms

← Back to all articles