perspective-dev /perspective
A data visualization and analytics component, especially well-suited for large and/or streaming datasets.
★ 11,388⑂ 1,356👁 128▤ 69
11,388
stars
+0+3+113
1,356
forks
128
watchers
–
prs
–
issues
69
releases
–
discussions
README
Perspective is an open-source data grid, pivot table and charting component for
large, real-time and streaming datasets. Build user-configurable reports,
dashboards, notebooks and embedded analytics 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.
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, and support for paging
columns to disk via OPFS in the browser or memory-mapped files natively),
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,
PostgreSQL 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
- Project Site
- User Guide
- JavaScript API
- @perspective-dev/react React Component
- @perspective-dev/viewer Web Component
- @perspective-dev/client Client (Browser)
- @perspective-dev/client Client (Node.js)
- @perspective-dev/client Clickhouse Virtual Server
- @perspective-dev/client DuckDB Virtual Server
- Python API
- perspective
- perspective.widget
- perspective.handlers.aiohttp
- perspective.handlers.starlette
- perspective.handlers.tornado
- perspective.virtual_servers.clickhouse
- perspective.virtual_servers.duckdb
- perspective.virtual_servers.postgres
- Rust API
- perspective
Examples
SuperstoreWorkspaceWebcam
RaycastingMarketNYPD
MoviesEvictionsFractal
Media
@timkpaine
@timbess
@sc1f
@texodus
@texodus
---
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 trademark