Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

FlexViz

Interactive visualization at scale.
Python  ·  Polars-native  ·  stateless server  ·  Rust-accelerated

CI status PyPI version Supported Python versions Apache-2.0 license

[!WARNING] FlexViz is pre-1.0 and under active development. APIs, defaults, and the spec format may change between minor releases, and rough edges remain. Bug reports are very welcome.


FlexViz is a visualization library for exploring datasets that are far too big for conventional Python dashboarding tools. Charts stay interactive (zoom, brush, cross-filter) at 100M+ rows, because every interaction is answered by lazy Polars aggregations and Rust kernels instead of by shipping raw data to the browser.

Cross-filter demo: brushing a range on a 100M-point line chart re-aggregates the linked histogram

Brush one chart and every linked chart re-aggregates against the filtered set. Try it yourself on 100M rows in the live demo.

Why it's fast

  • Polars-native. Data stays a lazy LazyFrame until the last moment; in-memory frames and parquet-backed sources both work, and larger-than-RAM sources stream through Polars' streaming engine.
  • Rust kernels. Min/max line downsampling and fixed-bin histogram/heatmap binning run as parallel Polars expression plugins (flexviz_polars), at memory-bandwidth speed.
  • Cube live-brushing. Dragging a brush is served client-side from a small pre-aggregated cube: zero server round-trips during the drag.
  • Stateless server. The client owns all interaction state and every request carries the complete dashboard spec. No sessions, no server affinity, and shareable dashboard URLs fall out for free.

Features

  • 10 trace types. Line, histogram, box, bar, pie, treemap, 2D histogram, correlation heatmap, geo 2D histogram, geo line.
  • Native cross-filtering. Brush one figure to filter the others (update or overlay mode), with grouped traces and linked hover.
  • Shareable URLs. Every view — viewport, selections, cross-filter mode, and layout — encodes into a single URL. Send the link and a teammate opens the exact live view; the server stores nothing.
  • Drag-and-drop dashboard grid. Rearrange and resize panels in the browser and lock the layout when it's done; the arrangement also travels with the URL.
  • Bring any DataFrame. Polars DataFrames/LazyFrames, pandas DataFrames, and PyArrow tables.
  • Plotly.js rendering. The renderer sits behind a clean adapter boundary.
  • Embeddable. Mounts into an existing FastAPI app via mount_into().

Quickstart

import polars as pl
from flexviz import Dashboard

lf = pl.scan_parquet("readings.parquet")  # 100M rows, stays lazy

dash = Dashboard(lf)
dash.add_figure().add_line(x="timestamp", y="value")
dash.add_figure().add_histogram(x="value", bins=50)
dash.show()  # brush one chart to cross-filter the other

Install

pip install flexviz

The Rust kernels arrive as a prebuilt wheel (flexviz-polars) on Linux (x86_64, aarch64), macOS (Intel and Apple silicon), and Windows (x64). Any other platform builds them from source and needs a Rust toolchain.

From source:

git clone https://github.com/flex-analytics/flexviz
cd flexviz
uv sync              # installs deps and builds the Rust plugin
make test

The Rust plugin builds automatically; the toolchain is pinned in rust-toolchain.toml.

Benchmarks

Time to render 1 billion points per chart: 5 traces × 200M rows from an in-memory frame, clocked browser-side from the request to painted pixels (median of 5 warm repeats). Each engine renders its own native chart: the line runs against Datashader and Mosaic, the histogram against Vaex and Mosaic, because neither of those tools has the other chart.

Time to first render at 200M rows and 5 traces. Line: flexviz 344 ms, datashader 8,670 ms, mosaic 10,033 ms. Histogram: flexviz 617 ms, vaex 1,304 ms, mosaic 3,009 ms.

Peak backend memory stays at ~25 MB from 1M to 200M rows: FlexViz aggregates the caller's frame zero-copy. Interactive charts for the full matrix (1M–200M rows, 1/2/5 traces, in-memory and Parquet-backed) are at flexviz.tech/benchmarks; the harness, correctness gates, per-trial results, and caveats live in flexviz-benchmarks.

Status

Pre-1.0. The Python API and the spec wire format may change between minor versions; see the compatibility policy in the changelog. Architecture.md is the design source of truth.

License

Apache-2.0 © 2026 Flex Analytics BV

Release files for flexviz 0.1.0b1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for flexviz 0.1.0b1
File Size Uploaded
flexviz-0.1.0b1.tar.gz 514.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for flexviz 0.1.0b1
File Interpreter ABI Platform
flexviz-0.1.0b1-py3-none-any.whl Python 3 none any Details

Total release size: 783.2 kB

Release files / flexviz-0.1.0b1.tar.gz

Download URL flexviz-0.1.0b1.tar.gz
Size 514.8 kB
Tags Source
SHA-256 checksum
How to use checksums
b04c959f1c6e78d3fd6ad12c16086e4d246ec9a26a2dfac05bc4dcf864193d5c
BLAKE2b-256 checksum
How to use checksums
e005541a51135d6593eadb8cbc64e575738f606474269b8df65969547227f840
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 25, 2026.

Transparency log

Release files / flexviz-0.1.0b1-py3-none-any.whl

Download URL flexviz-0.1.0b1-py3-none-any.whl
Size 268.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5e0777922398ef50ca3cf78cc2ac4ef2fdb6111c4f4a085c95e4920ecae43e32
BLAKE2b-256 checksum
How to use checksums
3049ea487e0326b8606aac3ec2cbbc34fbabf21ce9ba1438b7e9f4abedbd7ac8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 25, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page