Skip to content

Implement once, visualize everywhere.

Static. Interactive. Bitmap. Vector. Web. Desktop.

Visualize data using your favorite language

Section titled “Visualize data using your favorite language”

Rust

Directly use the pluot Rust crate to render plots from within your Rust code.

JavaScript

Render static and interactive plots in the web browser. Made possible via WebAssembly bindings in browsers that support WebGPU.

Python

Render static plots in Python environments via PyO3 bindings to the Rust code.

More coming soon

If you don't see your favorite programming language here, reach out on GitHub.

Fast

Render millions of points on each frame of an animation or user interaction (e.g., pan, zoom).

Small

The WASM binary size is currently less than 4MB, making it practical to integrate into web applications.

Scalable

Scales to out-of-memory dataset sizes using partial reads of arrays/columns and data tiling/aggregation strategies.

Bitmap or vector output

The same plot implementation can support both bitmap and vector outputs. Use vector outputs for publication-quality graphics exporting. Use raster outputs for high-performance interactive visualization powered by WebGPU.

Layer-based API

Compose the built-in layers to create complex plots, or build your own layers with full control over the WebGPU shaders, buffers, render pipeline, and draw calls.

Leave the browser behind

Browser-based tools are great, but it is best if our tools can be used outside the browser as well. Pluot uses the standalone wgpu implementation of WebGPU, and does not rely on a web browser or JavaScript runtime when plotting in non-web environments.

How to cite: Keller, M.S., Gehlenborg, N. Pluot: Towards 'write once, run everywhere' visualization software. arXiv (2026).