Learning in public — this documentation is written in the open and updated as the engine moves.
paged.Paged Docs
Plugins

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.

Tier: IntermediateIntermediateIIexplanationDraft

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 263 registered functions 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.
  • Spreadsheet editing in the grid: range selection, the grid keys, find, formula-carrying copy and paste, the fill handle, a formula bar that completes function names from the engine, and host undo outside the edit session.
  • In development: cell styles, merged cells, row and column sizes, freeze panes, defined names, CSV import, and the workbook as typed objects for scripts and bindings (the object model).

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, re-test pending · ◍ shipped, untested · ◐ partial · ✗ failing · · planned

Plugin · sheet 47 features · 100% green

FeatureAPISheet
paged.sheet serves the HOST Swatches and Character/Paragraph panels (ADR 023 phase D)
sheet.binding-providers
●◐
Exact-decimal numeric mode (D-6 spike) — seam proven, deferred to v2 opt-in
sheet.calc.decimal
◐
Calculation engine — dependency graph, dirty recalc, f64 numeric core (D-6), coercion, error values
sheet.calc.engine
●
Iterative (circular) calculation — OFF by default (D-7), converges to a fixed point when enabled
sheet.calc.iterative
●
Row/col insert-delete wasm door — structural re-emission, refused over preserved cell addresses
sheet.calc.rewrite.structural-door
◐
Dynamic-array spill (anchor + spill range,
sheet.calc.spill
●
Chart authoring — create a chart from the editor (page-side lowering)
sheet.chart.authoring
●
Charts — plotters-backed custom DrawingBackend → frozen ChartGeometry IR → grid view + paged.draw page lowering
sheet.chart.engine
●
Graph types — stacked column/bar + radar, axis titles, transpose rows/columns, c:grouping import
sheet.chart.graphs
●
Data-provider CONSUMER — source a sheet from a governed dataset (host.dataProviders)
sheet.data.consumer
●
Multi-cell copy/paste — formulas re-addressed on paste, tabular payload, TSV interop, tiling
sheet.edit.clipboard
●
Fill handle and fill down/right — number, date, weekday/month and numbered-text series; formulas re-addressed
sheet.edit.fill
●
Session edit ops — stable range sort (values lane), find over values/formulas, replace with skip reporting
sheet.edit.ops
●
Host Cmd-Z reaches sheet edits outside the modal session (ADR-012 Tier 2)
sheet.edit.undo
●
Function library — registered functions by family, registry-driven dispatch
sheet.fn.library
●
Cell formatting — number format, font, fill, borders, alignment, wrap (setStyle) persisted to styles.xml
sheet.format.cell-style
◐
Number-format engine + en/de locale (D-8)
sheet.format.engine
●
Western-European Latin locale tier (fr/es/it) — display formatting data rows
sheet.format.locale.latin-tier
●
Find in sheet — a find field in the grid panel; next/previous select and reveal the match in-frame
sheet.grid.find
●
Frozen panes — parse sheetViews/pane + render frozen rows/columns in-grid
sheet.grid.freeze.render
●
In-frame grid — sceneLayer render + K-1 modal select/edit (sheets-mode lite)
sheet.grid.inframe
◐
Grid keys — arrows, Tab/Enter, F2, Delete, Esc, PageUp/Down and Cmd shortcuts in-frame and in the panel
sheet.grid.keyboard
●
Grid panel edit and commit contract
sheet.grid.panel-edit-contract
●
Range selection — drag, shift-click and shift-arrows in the grid panel and in-frame
sheet.grid.selection
●
CSV / TSV import as a one-sheet workbook, typed by locale
sheet.import.csv
●
Freeze panes — set / clear (sheetView pane) from the panel
sheet.layout.freeze
●
Merge / unmerge cells (model, xlsx mergeCells, page spans)
sheet.layout.merge
●
Column width / row height — set and reset, persisted, used by the page geometry
sheet.layout.sizes
◐
Cell fill / text colours are MINTED swatches — a raw hex in a colorRef paints nothing
sheet.lower.cell-colour-swatches
◐
Page-surface lowering — native <Table> + IR-v2 style map + measured column widths
sheet.lower.page
●
Live multi-frame pagination across the host frame chain
sheet.lower.paginate
◐
Defined names — resolve on load, define / redefine / delete, place a name or table
sheet.names.define
●
Object model — workbook, sheets, cells, ranges, names, tables and charts addressable through host.objects
sheet.objects
●
Formula dialect parser — literals, A1 refs, operator precedence, functions, union/intersection, array literals, defined names, canonical print fixpoint
sheet.parser.dialect
●
paged.sheet bundle (media.paged.sheet) — manifest + activate + 3 panels + 7 commands + importer/exporter + engine boot
sheet.plugin.bundle
●
Formula bar bound to the selected cell, with function autocompletion from the engine
sheet.plugin.formula-bar
●
Function browser + workbook inventory + the styleFromCell command (workbook panel)
sheet.plugin.function-browser
●
Workbook persistence — host.blob (OPFS) + the metadata binding envelope
sheet.plugin.persistence
◐
Workbook visual styles — xlsx parse -> deduped IR-v2 style table -> both surfaces (one resolver, cross-surface parity)
sheet.style.mapping
◐
Excel structured tables / ListObjects — model + structured references + tableN.xml part
sheet.table.structured
●
get_range_styled — the workbook's REAL per-cell visual styles, as a door of its own
sheet.wasm.range-styled-door
◐
Workbook structure — new blank workbook, add / rename / delete sheet
sheet.workbook.sheets
◐
Cell comments — preserve opaquely + display (grid indicator + panel list), preserve-first
sheet.xlsx.comments
●
Conditional formatting — xlsx part fidelity + lowering to style overrides
sheet.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 platform
sheet.xlsx.roundtrip
●

Recent activity

On this page