paged.sheet — spreadsheets
The spreadsheet plugin — a Rust/WASM calc engine with spill, structured tables, charts, and XLSX round-trip, lowered to native print-grade tables and editable in-frame.
In short paged.sheet is a full spreadsheet engine in Rust/WASM that lives
inside a print layout — a dependency-graph calc engine with dynamic-array spill,
structured tables, a chart engine, and preservation-safe XLSX round-trip. It
lowers to native <Table> content and is editable in-frame.
What it does
- Calc engine (dependency graph, dirty recalc, Excel-compatible numerics) with a large registered function library and dynamic-array spill.
- Structured tables, a chart engine (plotters → a custom drawing backend → frozen chart geometry), and number formatting with locales.
- XLSX import/export with a byte-faithful preservation invariant.
- Page-surface lowering to native tables, multi-frame pagination, and an in-frame grid with a modal edit session; consumes governed datasets from paged.data.
How it's built
A Cargo workspace (sheet-core, sheet-parser, sheet-calc, sheet-fn,
sheet-xlsx, sheet-lower, sheet-grid, sheet-chart, sheet-js) plus a TS
bundle; a coverage gate requires every function to have a test.
Capability state
● shipped & verified · ◍ shipped, untested · ◐ partial · ✗ failing · · planned
Plugin · sheet 21 features · 100% green
| Feature | Shell | Sheet |
|---|---|---|
Exact-decimal numeric mode (D-6 spike) — seam proven, deferred to v2 opt-insheet.calc.decimal | ◐ | |
Calculation engine — dependency graph, dirty recalc, f64 numeric core (D-6), coercion, error valuessheet.calc.engine | ● | |
Iterative (circular) calculation — OFF by default (D-7), converges to a fixed point when enabledsheet.calc.iterative | ● | |
Dynamic-array spill (anchor + spill range,sheet.calc.spill | ● | |
Charts — plotters-backed custom DrawingBackend → frozen ChartGeometry IR → grid view + paged.draw page loweringsheet.chart.engine | ● | |
Data-provider CONSUMER — source a sheet from a governed dataset (host.dataProviders)sheet.data.consumer | ● | |
Function library — 224 registered functions across 18 families, registry-driven dispatchsheet.fn.library | ● | |
Number-format engine + en/de locale (D-8)sheet.format.engine | ● | |
Western-European Latin locale tier (fr/es/it) — display formatting data rowssheet.format.locale.latin-tier | ● | |
Frozen panes — parse sheetViews/pane + render frozen rows/columns in-gridsheet.grid.freeze.render | ● | |
In-frame grid — sceneLayer render + K-1 modal select/edit (sheets-mode lite)sheet.grid.inframe | ◐ | |
Page-surface lowering — native <Table> + IR-v2 style map + measured column widthssheet.lower.page | ● | |
Live multi-frame pagination across the host frame chainsheet.lower.paginate | ● | |
paged.sheet bundle (media.paged.sheet) — manifest + activate + 3 panels + 7 commands + importer/exporter + engine bootsheet.plugin.bundle | ● | |
Workbook persistence — host.blob (OPFS) + the metadata binding envelopesheet.plugin.persistence | ◐ | |
Excel structured tables / ListObjects — model + structured references + tableN.xml partsheet.table.structured | ● | |
Cell comments — preserve opaquely + display (grid indicator + panel list), preserve-firstsheet.xlsx.comments | ● | |
Conditional formatting — xlsx part fidelity + lowering to style overridessheet.xlsx.condfmt | ● | |
XLSX data validation — preserve byte-faithfully + read-only inventory (NEVER enforced)sheet.xlsx.data-validation | ● | |
Pivot tables — preserve-only, NEVER interpreted (publishing-first non-goal)sheet.xlsx.pivot | ● | |
XLSX I/O on the fidelity ladder — preservation invariant + import/export through the platformsheet.xlsx.roundtrip | ● |
Recent activity
- 2026-06-22build(publish): externalize ?url wasm import in tsup (esbuild can't load .wasm)b63bd20
- 2026-06-22build(publish): publish plugin-sheets to npm (canary, wasm in CI)7befddc
- 2026-06-22ci(cla): allowlist the maintainer (drietsch)45fbe8d
- 2026-06-22ci(cla): add CLA Assistant check (sign once, org-wide)2c70c40
- 2026-06-22chore(license): open plugin-sheets under AGPL-3.0 OR PMEL3c7a364
- 2026-06-19sheet-xlsx: pivot-cache preservation test (sheet.xlsx.pivot)4cb011f
- 2026-06-18feat(persist): persist the workbook to a portable .paged container part (S-08) (#2)30f6102
- 2026-06-18fix(lower): correct the native-table cell pour (table id + two apply lanes) (#1)9560573
paged.image — raster
The raster-image plugin — a Rust/WASM pipeline of GPU kernels with PSD round-trip, dual processing engines, color management, and in-editor ingest into the engine's image scene layer.
paged.data — database publishing
The database-publishing plugin — a binding DSL, a sync engine, record-flow pagination, and batch automation over DuckDB-WASM, publishing datasets other plugins can consume.