Back to Perspective

README

README.md

5.3.010.7 KB
Original Source
<a href="https://perspective-dev.github.io"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://github.com/perspective-dev/perspective/raw/master/docs/static/svg/perspective-logo-dark.svg?raw=true"> </picture> </a>

Perspective is an interactive analytics and data visualization component for large, real-time and streaming datasets. Build user-configurable reports, dashboards, notebooks and applications, backed by a high-performance streaming query engine that runs in-browser via WebAssembly or server-side in Python, Node.js and Rust — or delegates to a database you already have.

<a href="https://perspective-dev.github.io"><picture> <source media="(prefers-color-scheme: dark)" srcset="https://perspective-dev.github.io/projects/dark/collage.png" />

</picture></a>

Features

  • A data-reactive UI packaged as a Custom Element, with drag-and-drop query and layout configuration. Includes a virtual-scrolling, editable data grid, WebGL charting engine with 15+ chart types, tile-based geographic maps, full theme support, and React bindings.

  • A fast, memory-efficient streaming query engine written in C++ and compiled for WebAssembly (including a 64-bit memory64 build for in-browser datasets larger than 4GB), Python and Rust. Tables update incrementally and views tick in real time, with reactive joins across tables, a columnar expression language based on ExprTK, and read/write/streaming support for Apache Arrow, CSV and JSON.

  • A symmetric client/server architecture — the same Client API connects to an engine in-process, in a Web Worker, or remotely over WebSocket, with server bindings for Python (aiohttp, Starlette, Tornado), Node.js and Rust. Datasets can be mirrored to the browser for fluid interaction or virtualized server-side, streaming only what's visible.

  • Virtual servers that run Perspective's UI directly on external engines like DuckDB, ClickHouse and Polars, translating view configurations into native queries — no ETL or data copy required.

  • A Jupyter widget built on anywidget and a Python client library for interactive data analysis in JupyterLab and other notebook environments.

Documentation

Examples

<table> <tbody> <tr> <td>Superstore</td><td>Workspace</td><td>Webcam</td> </tr> <tr> <td><a href="https://perspective-dev.github.io/?project=superstore"><picture><source media="(prefers-color-scheme: dark)" srcset="https://perspective-dev.github.io/projects/dark/superstore.png" /></picture></a></td> <td><a href="https://perspective-dev.github.io/?project=superstore-overview"><picture><source media="(prefers-color-scheme: dark)" srcset="https://perspective-dev.github.io/projects/dark/superstore-overview.png" /></picture></a></td> <td><a href="https://perspective-dev.github.io/?project=webcam-video-wall"><picture><source media="(prefers-color-scheme: dark)" srcset="https://perspective-dev.github.io/projects/dark/webcam-video-wall.png" /></picture></a></td> </tr> <tr> <td>Raycasting</td><td>Market</td><td>NYPD</td> </tr> <tr> <td><a href="https://perspective-dev.github.io/?project=raycasting"><picture><source media="(prefers-color-scheme: dark)" srcset="https://perspective-dev.github.io/projects/dark/raycasting.png" /></picture></a></td> <td><a href="https://perspective-dev.github.io/?project=market-trading-desk"><picture><source media="(prefers-color-scheme: dark)" srcset="https://perspective-dev.github.io/projects/dark/market-trading-desk.png" /></picture></a></td> <td><a href="https://perspective-dev.github.io/?project=nypd-4"><picture><source media="(prefers-color-scheme: dark)" srcset="https://perspective-dev.github.io/projects/dark/nypd-4.png" /></picture></a></td> </tr> <tr> <td>Movies</td><td>Evictions</td><td>Fractal</td> </tr> <tr> <td><a href="https://perspective-dev.github.io/?project=movies"><picture><source media="(prefers-color-scheme: dark)" srcset="https://perspective-dev.github.io/projects/dark/movies.png" /></picture></a></td> <td><a href="https://perspective-dev.github.io/?project=evictions-2"><picture><source media="(prefers-color-scheme: dark)" srcset="https://perspective-dev.github.io/projects/dark/evictions-2.png" /></picture></a></td> <td><a href="https://perspective-dev.github.io/?project=fractal"><picture><source media="(prefers-color-scheme: dark)" srcset="https://perspective-dev.github.io/projects/dark/fractal.png" /></picture></a></td> </tr> </tbody> </table>

Media

<table><tbody> <tr> <td><a href="https://github.com/timkpaine"><code>@timkpaine</code></a></td> <td><a href="https://github.com/timbess"><code>@timbess</code></a></td> <td><a href="https://github.com/sc1f"><code>@sc1f</code></a></td> </tr> <tr> <td><a href="https://www.youtube.com/watch?v=v5Y5ftlGNhU"></a></td> <td><a href="https://www.youtube.com/watch?v=lDpIu4dnp78"></a></td> <td><a href="https://www.youtube.com/watch?v=IO-HJsGdleE"></a></td> </tr> <tr> <td><a href="https://github.com/texodus"><code>@texodus</code></a></td> <td><a href="https://github.com/texodus"><code>@texodus</code></a></td> <td></td> </tr> <tr> <td><a href="https://www.youtube.com/watch?v=no0qChjvdgQ"></a></td> <td><a href="https://www.youtube.com/watch?v=0ut-ynvBpGI"></a></td> <td></td> </tr> </tbody></table>
<picture> <source media="(prefers-color-scheme: dark)" srcset="https://github.com/openjs-foundation/artwork/raw/master/openjs_foundation/openjs_foundation-logo-horizontal-white.svg?raw=true"> </picture>

The Perspective project is a member of the The OpenJS Foundation.

Copyright OpenJS Foundation and Perspective contributors. All rights reserved. The OpenJS Foundation has registered trademarks and uses trademarks. For a list of trademarks of the OpenJS Foundation, please see our Trademark Policy and Trademark List. Trademarks and logos not indicated on the list of OpenJS Foundation trademarks are trademarks™ or registered® trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.

The OpenJS Foundation | Terms of Use | Privacy Policy | Bylaws | Code of Conduct | Trademark Policy | Trademark List | Cookie Policy