
11.2k stars · Apache-2.0 · v5.3.1 (2026-09-04) · Track this in Rising ↗
WebAssembly data grid and charts for large or streaming datasets — pivot two hundred thousand trades in the browser.
Radar check
What we found when we opened it. Every bar is one fact, with its date.
Last code pushed 25 Oct 2026, 2 days before this check.
Latest release v5.6.1 on 23 Oct 2026.
Public since November 2017, a little over 8 years.
11,356 stars and 1,353 forks.
128 commits and 20 new issues in the last 90 days.
104 contributors. 31 pull requests merged in 90 days.
A security policy says how to report a problem. No published security advisories.
How the bars are scored
- Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
- Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
- Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
- Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
- Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
- Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
- Security. A published security policy 80, none 40; published advisories are listed, not scored.
Checked by Repo Radar on 27 Oct 2026 from the repository on GitHub. Covered in Edition 12.
▶Repo detailsthe review · specs · pros & cons · install
What it does
Perspective is a data-visualisation and analytics component compiled to WebAssembly, which is a format that lets compiled code run at near-native speed in a browser. It holds the data in its own in-browser engine, so grouping, pivoting, filtering and charting happen locally with no request to a server for each change. It handles streaming updates, meaning new rows can arrive continuously without the view being rebuilt. There is a matching Python package, and a table and chart configuration saved in a notebook can be loaded unchanged into a web page. The current release is v5.6.0, from 14 October 2026, with perspective-python at 5.5.1 on PyPI from 18 September 2026, under the Apache-2.0 licence. It is a tool for interrogating data rather than presenting it: the configuration interface is dense, and it is not what you would put in front of a customer.
Why it matters
Who it suits. Anyone with a result set too large for a spreadsheet and too interactive for a static chart, who currently exports it and opens it somewhere else. Pivoting a hundred thousand rows by hour, by category and by day of week is the kind of question it answers in a moment. Skip it for a landing page or a customer-facing chart, where it is both too heavy and too complicated.
Verdict. Worth a weekend if there is genuinely a lot of data to look at, and overkill otherwise. Two things to plan for. The WebAssembly bundle is large, so load it only on the page that needs it and never on a first-visit page. And its configuration model is a world of its own, with documentation that assumes familiarity with finance-desk tooling. The Apache-2.0 licence means the same grid can later sit inside a paid feature. For a lighter editable grid, glideapps/glide-data-grid is the smaller option, and ag-grid/ag-grid is the commercial-grade alternative with a split licence.
Summary (Key Points)from the README
Key features
- Data grid and charts: A virtual-scrolling, editable data grid, a WebGL charting engine with 15+ chart types, and tile-based geographic maps, all packaged as a Custom Element.
- Drag-and-drop configuration: Query and layout are set up by dragging and dropping, and the UI reacts to the data.
- Streaming query engine: A C++ engine compiled to WebAssembly, with Python and Rust versions, that updates tables incrementally and ticks views in real time.
- Large in-browser datasets: A 64-bit memory64 build handles in-browser datasets larger than 4GB, and columns can be paged to disk via OPFS in the browser or memory-mapped natively.
- Data handling: Reactive joins across tables, a columnar expression language based on ExprTK, and read, write and streaming support for Apache Arrow, CSV and JSON.
- Flexible client/server model: The same Client API runs in-process, in a Web Worker, or remotely over WebSocket, with server bindings for Python (aiohttp, Starlette, Tornado), Node.js and Rust.
- Mirrored or virtualized data: Datasets can be mirrored to the browser for fast interaction or kept server-side, streaming only what is visible.
- Virtual servers: Perspective's UI runs directly on DuckDB, ClickHouse, PostgreSQL and Polars, translating view configurations into native queries with no ETL or data copy.
- Notebook support: A Jupyter widget built on anywidget and a Python client library for interactive analysis in JupyterLab and other notebooks.
Important
- No install steps: The README gives no installation commands, system requirements or supported versions, so setup must be taken from the linked documentation.
- Virtual servers need an existing database: The virtual server mode works only with the engines it names (DuckDB, ClickHouse, PostgreSQL, Polars), and it depends on those systems already holding the data.
- Browser memory limits: Datasets above 4GB in the browser need the memory64 build, and the README does not say which browsers or configurations support it.
- Licensing not stated: The README describes the project as open source but does not name a license in the text provided.
Written by an AI model from the project’s README; not part of the review, and it can be wrong.
- Genuinely fast on hundreds of thousands of rows, in a browser, with no request per pivot.
- One configuration works in a Python notebook and in a web application.
- Apache-2.0, so it is safe inside a paid feature without a licence conversation.
- The WebAssembly bundle is large and must be loaded lazily.
- The configuration model takes real learning, and the documentation assumes finance-desk familiarity.
- It is for interrogation, not presentation, so a polished customer-facing chart still needs a different library.
Python side feeds it from the same DataFrames DuckDB (Ed.
python3 -m venv ~/perspective-env source ~/perspective-env/bin/activate pip install perspective-python




