Introduction
What opengrid is, what is in the repository today, and what V1 deliberately leaves out.
opengrid is a portable Rust data and query engine with client/server execution, and on top of it an accessible data grid, table and pivot delivered as Web Components.
The product is the engine, not a JavaScript grid. The same query model, the same semantics and the same results run in WebAssembly in a browser, natively on a server, and against PostgreSQL. A conformance suite of JSON cases pins what “the same” means. What sets it apart compares that with a grid written in JavaScript.
Status
Pre-1.0. On npm are @casoon/opengrid, with the elements and the engine, and the adapters for
React, Vue and Svelte — see Installation. The portable Rust
crates and opengrid-server are on crates.io. What each release changed is in
CHANGELOG.md.
The public API is written down in The public API, and a test fails when it changes. That freezes the list, not the design: it may still change before 1.0.
The three elements
| Element | Use it when |
|---|---|
<opengrid-table> |
The answer is read: a plain native <table>, ordinary copy and paste, browser find. |
<opengrid-grid> |
The answer is worked with: selection, editing, filtering, sorting, column control, virtualization or paging. |
<opengrid-pivot> |
Rows crossed with up to two column dimensions, with subtotals. |
All three ship in one module. The Cargo features grid and pivot exist for anyone who wants
only one; set_columns and set_formats are in both, so a pivot-only build pulls the grid and
query crates too (it grows from 122.9 to 125.0 KiB brotli). In React, Vue and Svelte they come as components — see
Frameworks.
What V1 deliberately does not do
- No calculated fields. A column is stored or derived from a date part (year, month); there is no expression language.
- A pivot is bounded: two column dimensions, 256 generated columns, 10 000 rows, and 131 072 cells (rows × columns — what a browser draws as a table in about a second). Over a limit you get an error with a sentence, never a silently truncated result.
- Paging and virtualization are exclusive, not combined.
- No CDN build. Adapters exist for React, Vue and Svelte; Angular, Lit and the rest use
connectdirectly.