Interactive data exploration at scale.
Agent-native.

FlexViz is the open-source exploration engine for large tabular data. Zoom, brush and cross-filter a billion rows from Parquet in under 400 MB of memory. Your coding agent builds the dashboard and reads your view back as state, not pixels.

Polars-native·Rust-accelerated·from the maintainers of plotly-resampler & tsflex (18M+ downloads)

Time to render a billion points.

From request to painted pixels

line chart

Full method & all cells →

You and your agent explore the same dashboard.

Your agent builds the dashboard and hands you the link, then reads back the exact view and selection you left. Ask what is going on in the part you picked out and it answers from the rows behind it. No screenshots: it reads the state, never the pixels.

An agent serves readings.parquet, hands over a dashboard link, then reads the brushed range back out of the dashboard state and answers from the rows behind it

It writes a spec, not a plot

Agents can already write plotting code, but plotting libraries struggle to draw 100M points, so the figure comes out slow, unreadable, or not at all. Let alone interactive. The flexviz engine handles the heavy lifting. A spec goes to the engine instead: it answers every zoom, pan and cross-filter against the raw rows, and the chart stays interactive at full size.

It reads your live view

No screenshots: it reads the dashboard's current state, viewport and selections included.

You discuss it against the data

Ask what is in the range you brushed and the agent computes on exactly those rows. The dataset stays on your machine; only specs and URLs travel. Full workflow in the agent guide.

One surface. Two ways in.

The agent workflow and the Python API drive the same scalable, interactive dashboard.
Pick either or move between them as the investigation develops.

With a coding agent

Ask for a visual exploration.

The flexviz skill gets you a live dashboard built from your local data, ready for both of you to investigate. Claude Code and Codex can install it as a plugin instead, before the package is there: /plugin install flexviz@flex-analytics.

terminalshell
your coding agentprompt
> explore readings.parquet
what the agent runsshell
On your own

Build it directly.

The standalone Python library gives you full control over the same large-scale dashboard. No agent required. Polars DataFrames and LazyFrames, pandas and PyArrow all work; parquet-backed sources stream through Polars, so larger-than-RAM works too.

dashboard.pypython
import polars as pl
from flexviz import Dashboard

lf = pl.scan_parquet("readings.parquet")

dash = Dashboard(lf)
dash.add_figure().add_line(x="timestamp", y="value")
dash.add_figure().add_histogram(x="value", bins=50)
dash.show()

Ten trace types that all cross-filter

10 trace types

All aggregate on the backend, and all cross-filter.

  • line
  • histogram
  • box
  • bar
  • pie
  • treemap
  • 2D histogram
  • correlation heatmap
  • geo 2D histogram
  • geo line

Interactive figures

Brush a range in one figure and every linked figure re-aggregates against the filtered set. Hover a point and the same value is marked in every figure that shares an axis, client-side, with no round-trip. Zoom and the data re-downsamples or re-bins inside the new window, so detail appears as you go in.

Cross-filter runs in two modes. Update replaces the traces with the filtered set. Overlay draws the selection on top of the unfiltered background.

Cross-filter in update and overlay modes
Zoom demo
Linked hover demo

Every view is a URL

Zoom, brush, filter, then send the link. The full dashboard state — viewport, selections, cross-filter mode, even the grid layout — is encoded in the URL itself. A teammate or an agent opens exactly what you see, live against the data.

Copying a view link and opening it in a new tab

A grid you can rearrange

Dashboards are a draggable grid: unlock the layout, drag and resize panels until the arrangement tells the story, lock it again. The layout is part of the dashboard spec, so it travels with the share URL like everything else.

Dragging a panel beside another
Open the live demo — 100M points

live dashboard running at demo.flexviz.tech

-->

Why large datasets stay interactive: only aggregates reach the browser

Most tools break at scale because they move raw rows to the browser. FlexViz answers every interaction with a small aggregate instead and aggregates your frame zero-copy, so peak backend memory stays flat as the row count grows.

100M+ rowsyour machine
your browserPlotly or any renderer

Your data stays local. The rows never travel to the browser, only small aggregates do.

Stateless server. Every request carries the full dashboard spec, so any replica answers. Scale horizontally; shareable URLs fall out for free.

Polars-native, Rust kernels

Data stays a lazy LazyFrame until the last moment; larger-than-RAM sources stream through Polars' streaming engine. In-memory data is processed by Rust kernels at memory-bandwidth speed.

Cube live-brushing

Dragging a brush is served client-side from a small pre-aggregated cube; zero server round-trips while you drag, enabling live updates of all linked charts.

Current status.

  • licenseApache-2.0
  • statusPre-1.0.
    The API, defaults, and the spec may change between minor versions.
  • pypiflexviz on PyPI
  • docsLive at docs.flexviz.tech.
    Guides for cross-filtering, grouping, line downsampling, data sources, sharing and embedding, plus the API reference.
  • agentsServed through the flexviz-explore skill. Agent guide.
  • exploringAn MCP server, and embedding a dashboard in the chat client through MCP Apps. In development.

Who builds FlexViz.

FlexViz comes from the maintainers of plotly-resampler and tsflex, Python libraries for visualizing and processing time series at scale with 18M+ PyPI downloads between them. FlexViz is what we built when resampling a single figure stopped being enough.

Built by Jeroen & Jonas Van Der Donckt.
Marketing by Cedric Helewaut.

Running FlexViz on your data?

We help teams deploy FlexViz, connect it to their data infrastructure, and build the connectors and features they need. Paid work that flows back into the open-source project wherever possible.

Sent — we'll be in touch.

Something went wrong — please try again.