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.
In short paged.data turns data into pages — a binding-expression DSL, a
resolution/sync engine, record-flow lowering with grouping and per-group footers,
and end-to-end print automation, all over a vendored DuckDB-WASM. It also
publishes governed datasets that other plugins (e.g.
paged.sheet) consume.
What it does
- A publishing-grammar binding DSL (a registry-driven function library) and a binding/sync engine (Linked / Pinned / Overridden / Stale states).
- Record flow / pagination: nested grouping, multi-level per-group footers, parent-path on spill.
- Print automation: per-record / per-group / one-catalog batch plans, plus a CLI and a sandboxed Boa scripting path.
- A data-provider contract: register as a provider and publish a record set without knowing its consumers; governed extracts with column metadata.
How it's built
A Cargo workspace (data-core, data-expr, data-sources, data-query,
data-bind, data-lower, automation crates, data-js) plus a TS bundle, with
DuckDB-WASM vendored behind an Arrow seam.
Capability state
● shipped & verified · ◍ shipped, untested · ◐ partial · ✗ failing · · planned
Plugin · data 22 features · 100% green
| Feature | Shell | Data |
|---|---|---|
Print automation / batch generation (per-record / per-group / one catalog)data.automation.batch | ● | |
Barcode / QR symbologies — clean-room EAN-13/UPC-A, Code-128, QR encoders + binding + VECTOR lowering (§9.7)data.barcode.symbology | ● | |
Bindings authoring — first-class add-binding flow in the bindings paneldata.bind.authoring | ◍ | |
Change-highlighting on refresh — per-binding "what changed since last sync" report (§8)data.bind.change-report | ◍ | |
Binding + synchronization engine — resolution graph, sync states, identity diffdata.bind.engine | ● | |
Field-mapping wizard — map source columns → variable bindings one-click (§9)data.bind.field-mapping | ● | |
Record-preview stepper — resolve a binding against a chosen record index N (§9)data.bind.preview-step | ● | |
Illustrator-compatible variable-library XML — import + export (§16.4)data.dataset.library-xml | ● | |
Data sets — capture / switch / delete, applied as ONE undo step (§16.4)data.dataset.palette | ● | |
Binding-expression DSL — lexer/parser/eval + 42 functions, registry-driven dispatchdata.expr.engine | ● | |
Governed-extract source (governed tables + optional metadata sidecar -> catalog)data.governed.extract | ● | |
Locale-aware display formatting (en/de v1)data.i18n.display | ● | |
Placeholder lowering — variable replacement + single-region dynamic tabledata.lower.content | ◐ | |
v43 lowering consumers — in-text variables (D-01), image place (D-14), live record-flow (D-12), rules (D-13)data.lower.v43-consumers | ◐ | |
Performance gates (§12.5) — engine-tier perf assertionsdata.perf.gates | ● | |
paged.data bundle (media.paged.data) — manifest + activate + 3 panels + DuckDB query gluedata.plugin.bundle | ◐ | |
Register as an SDK data provider (publish RecordSet to other consumers, e.g. sheets)data.provider.contract | ● | |
Query engine (DuckDB-WASM) + RecordSet shape/order/hash — the Arrow seamdata.query.seam | ◐ | |
Capability-gated data access + threat model (the suite's largest surface)data.security.gates | ◐ | |
Source adapters (inline + file at M0) + capability/consent gate + visible manifestdata.source.adapters | ◐ | |
D-11 DB attach (SQLite/Postgres/MySQL) + DuckDB-WASM first-class engine + refresh-policy + remotedata.source.db-attach | ◐ | |
Illustrator "Variables" — the four traits, mapped onto the shipped binding model (§16.4)data.variable.traits | ◐ |
Recent activity
- 2026-08-19chore: adopt the 100 MB app-wide wasm budget9972228
- 2026-08-18data: the panels speak to users, not to the RFI (0.1.0-canary.6, audit U9/U12)c828a23
- 2026-08-18chore: commit the lockfile half of the 0.2.30-canary.0 contract pin bump3b3620a
- 2026-08-17test: first real-engine spec — data-js wasm booted in Node, zero mocks7c448f9
- 2026-08-08chore(deps): dev-pin the plugin contract at 0.2.30-canary.0798cda3
- 2026-08-07ADR 024: the dataBinding edit contextfe69d04
- 2026-08-06deps: the contract becomes a PEER — stop nesting a second copy of itdd8529c
- 2026-08-06deps: contract pins -> 0.2.29-canary.0 (the protocol-61 wire)926659b
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.
plugin-template — the starter
The fork-and-go plugin starter — the SDK tutorial as a runnable repo that consumes only the published @paged-media packages.