Plugins
The five first-party content plugins that extend paged beyond native IDML — vector drawing, web content, raster images, spreadsheets, and database publishing — all built on the Plugin SDK.
In short plugins add new kinds of content to a paged document. The five
first-party plugins are built on the same Plugin SDK
contract any third party uses — they're the worked examples. Each renders into the
document through the engine's scene-layer surfaces and persists into the .paged
container.
- paged.drawvector drawing (pen, paths, pathfinder, SVG I/O).
- paged.webHTML/CSS as a content type.
- paged.imageraster processing + PSD round-trip (Rust/WASM, GPU kernels).
- paged.sheeta spreadsheet engine with print-grade layout (Rust/WASM, XLSX round-trip).
- paged.datadatabase publishing + automation (Rust/WASM, DuckDB).
Plus plugin-template — the fork-and-go starter.
Plugin capability state
The live status of each plugin's capabilities, from the registry:
● shipped & verified · ◍ shipped, untested · ◐ partial · ✗ failing · · planned
Plugin · data 18 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 | ● | |
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 | ● | |
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 | ◐ |
Plugin · image 28 features · 100% green
| Feature | Shell | Image |
|---|---|---|
CMS display lane — qcms RGB↔RGB (the exact build core ships, page/editor agree)image.cms.display | ◐ | |
CMS behind the swappable CmsEngine seam (D-11: hybrid)image.cms.engine | ◐ | |
CMS print lane — moxcms per-intent RGB↔RGB + CMYK8→RGBA8 ingestimage.cms.print | ◐ | |
AVIF / JXL / camera-RAW / HEIC — codec verdicts (deferred + explicit non-goals)image.codec.avif | · | |
EXIF/TIFF read — orientation + DPI + color-space tag, auto-orient at ingestimage.codec.exif | ● | |
Codec adapter contract (ImageSource/ImageTarget over sans-IO ByteSource) + PNG + rawimage.codec.traits | ● | |
Conformance harness — scalar references, gpu↔ref parity, fixture corpusimage.conformance.harness | ◐ | |
Auto-enhance — gray-world WB + percentile auto-levels params from the panel histogramimage.editor.auto-enhance | ● | |
Editor crop + straighten tool — host-agnostic crop machine over the geom.crop windowimage.editor.crop | ● | |
Editor levels/curves/white-balance panel — histogram view + adjust kernelsimage.editor.curves | ◐ | |
K-3 decode worker pool — off-main-thread ingest decode (host.workers consumer)image.editor.decode-pool | ◐ | |
M4 editor enablement — C-5 placed bytes → decode → adjust → C-1 Stage-A in-frame compositeimage.editor.ingest | ◐ | |
C-6 tile provider for placed images (host.images.claimImageResource, v44; honest level-0 subset)image.editor.tile-provider | ◐ | |
Engine B — persistent buffer graph (invalidation, mip-aware eval, Gestures/Operations)image.graph.engine-b | ◐ | |
T0 generated kernel families (arith/relational/boolean/cast/band/minmax/linear)image.kernel.family-t0 | ◐ | |
T1 crown-jewel kernels (conv/resample/compose — handwritten WGSL modules, ABI v1.1)image.kernel.family-t1 | ◐ | |
T2 editor-bearing kernels (adjust/geom/generators)image.kernel.family-t2 | ◐ | |
T3 breadth kernels (morphology, rank/median, distance transform)image.kernel.family-t3 | ◐ | |
Frozen WGSL kernel ABI v1 (4 bind groups, 16×16, mask-mixed pointwise)image.kernel.wgsl-abi | ● | |
Engine A async sinks — to_buffer_async/to_encoder_async (the wasm32/WebGPU readback lane)image.pipeline.async-sink | ● | |
Engine A — demand-driven streaming pipeline skeletonimage.pipeline.engine-a-skeleton | ● | |
paged.image bundle (media.paged.image) — manifest + activate + panelimage.plugin.bundle-manifest | ◐ | |
PSD mutatable — edits re-encode through the preservation writerimage.psd.mutatable | ◐ | |
PSD rendered tier — channel decode + flatten render oracleimage.psd.rendered | ◐ | |
PSD/PSB structural parse + preservation-invariant writerimage.psd.roundtrip | ◐ | |
Reductions — histogram + min/max/mean statisticsimage.reduce.statistics | ◐ | |
Residency Tier 0/1 hardening under working-set pressureimage.residency.tier01 | ● | |
Selection-mask plumbing — the §6.1 mask surfaced end-to-endimage.selection.mask | ● |
Plugin · draw 18 features · 100% green
| Feature | Shell | API | Draw |
|---|---|---|---|
Add-anchor plan (split segment at on-curve click)plugin-draw.anchor-add | ◍ | ● | |
Convert-anchor plan (corner ↔ smooth)plugin-draw.anchor-convert | ◍ | ● | |
Delete-anchor plan (nearest within tolerance, contour floor)plugin-draw.anchor-delete | ◍ | ● | |
Appearance model — multi fill/stroke metadata stack + baked top layer (Tier B)plugin-draw.appearance | ◐ | ● | |
paged.draw bundle manifest (media.paged.draw) + activate skeletonplugin-draw.bundle-manifest | ● | ||
vectorGraphic edit context — live enter/exit via contribute.editContextplugin-draw.edit-context-live | ● | ||
Cubic bezier kernel — de Casteljau split, eval, closest-t, flattenplugin-draw.geometry-bezier | ● | ||
Anchor/handle math — corner, mirror, smooth-from-drag, angle constrain, affineplugin-draw.geometry-handles | ● | ||
RDP polyline simplification + perpendicular segment distanceplugin-draw.geometry-rdp | ● | ||
Headless conformance corpus over published canvas-wasmplugin-draw.headless-conformance | ● | ||
Live Corners — Rounded/Inverse/Bevel/Fancy/None presets via frameCornerOption*/Radius* + live marker (Tier B)plugin-draw.live-corners | ◐ | ● | |
Pen tool state machine (click/drag anchors, modifier matrix, close, commit)plugin-draw.pen-machine | ● | ||
Phase 4c pro path toolset — curvature/pencil/measure machines + simplify/join/average/offset/outline/pathfinder/gradient/arrowheads commandsplugin-draw.pro-path-toolset | ◐ | ● | |
Select-same by fill / stroke / stroke-weight (Tier A — pure selection, no mutation)plugin-draw.select-same | ● | ||
Shape Builder gesture tool — drag-unite / Alt-drag-subtract over pathfinderBoolean (Tier B)plugin-draw.shape-builder | ◐ | ● | |
Stroke dash-pattern command presets (Solid/Dashed/Dotted/DashDot)plugin-draw.stroke-dash-commands | ◍ | ● | |
Stroke panel as a declarative schema panel (W3.1 adoption)plugin-draw.stroke-schema-panel | ● | ||
SVG import + export — the K-2 interchange round-trip (Phase 8)plugin-draw.svg-io | ◍ | ● |
Plugin platform 28 features · 100% green
| Feature | Parser | Renderer | Mutation | Canvas | Canvas | Shell | Panel | API | Draw | Web |
|---|---|---|---|---|---|---|---|---|---|---|
Persistent blob store (host.blob, OPFS-backed, per-plugin quota)plugin-platform.blob-store | ● | |||||||||
Bundle lifecycle — activate(host) → BundleHandle.dispose()plugin-platform.bundle-lifecycle | ◐ | ● | ||||||||
Capability declaration — document read/write, rendering surfaces, editContext, network, clipboardplugin-platform.capability-scopes | ◐ | |||||||||
Command + keybinding contribution registrationplugin-platform.command-registration | ● | |||||||||
Host credential store (host.secrets — D-11, reference-only, DELIBERATELY no get)plugin-platform.credential-store | ● | |||||||||
Data-provider registry (host.dataProviders — publish/consume RecordSet across plugins)plugin-platform.data-providers | ● | |||||||||
Plugin document metadata — x-paged Label carrier + get/setMetadata doorsplugin-platform.document-metadata | ◍ | ● | ◍ | ● | ● | |||||
Edit-context registry (enter/exit, write-scope narrowing, breadcrumb)plugin-platform.edit-context | ● | |||||||||
Host file picker (host.shell.pickFile)plugin-platform.file-picker | ◍ | ● | ||||||||
Plugin font registration + asset serving (@font-face parity)plugin-platform.font-asset-serving | ◐ | ◐ | ◐ | |||||||
Frame-chain read + reflow events (host.document.frameChain, DocumentChangeEvent.reflow)plugin-platform.frame-chain-read | ◍ | ● | ||||||||
Headless host conformance harness (createHeadlessHost)plugin-platform.headless-host-conformance | ● | |||||||||
Host widgets + diagnostics sink (CodeEditor widget, problems lane)plugin-platform.host-widgets | ● | |||||||||
Placed-image resource provider door (host.images.claimImageResource — C-6 / I-06, v44 tile lane)plugin-platform.image-resource | ◍ | ◐ | ||||||||
Importer/exporter registration (contribute.importer/exporter + Export Center)plugin-platform.importer-exporter | ● | ◍ | ◍ | |||||||
Plugin manifest schema + CLI validator (paged-plugin validate)plugin-platform.manifest-schema | ● | |||||||||
Modal edit session (K-1) — entry gesture, content pointer, in-frame editing loopplugin-platform.modal-edit-session | ◐ | ◐ | ◐ | |||||||
Network capability + consent door (host.network, default-deny)plugin-platform.network-consent | ● | ◍ | ||||||||
Object-type bake contract (live metadata -> derived IDML children)plugin-platform.object-type-baking | ◐ | |||||||||
Overlay contribution into the camera-space SVG surfaceplugin-platform.overlay-registration | ● | |||||||||
Panel contribution registration (expert-leaf React in v0)plugin-platform.panel-registration | ◐ | |||||||||
Placed-asset bytes read door (host.assets.getPlacedImage — C-5 / I-04)plugin-platform.placed-asset-bytes | ◐ | · | ||||||||
In-frame plugin scene layers (contribute.sceneLayer — vector/text/image/gradient/blend/shadow)plugin-platform.scene-layer | ◍ | ◍ | ● | |||||||
Text measurement door (host.text.measureString + editor metrics RPC)plugin-platform.text-measurement | ◐ | |||||||||
Tool contribution + gesture-handler registration surfaceplugin-platform.tool-registration | ● | |||||||||
Bundle wasm packaging + loader contract (bundle-realm glue path)plugin-platform.wasm-packaging | ◐ | |||||||||
Wire-compatibility type assertions (machine output ⊆ engine wire types)plugin-platform.wire-compat-assertions | ◍ | ● | ||||||||
Worker spawn + SharedArrayBuffer (host.workers — K-3, off-main-thread compute)plugin-platform.worker-pool | ● | ◍ | ◍ |
Plugin · web 5 features · 100% green
| Feature | Renderer | Canvas | Shell | Panel | Web |
|---|---|---|---|---|---|
On-canvas vector rendering of web frames (Blitz/WASM → C-1 sceneLayer lane)plugin-web.engine-rendering | ◍ | ◍ | ◐ | ||
Insert web frame (one undo step, frame + source metadata)plugin-web.insert-command | ● | ● | |||
Source persistence in the document (IDML round-trip, foreign-open safe)plugin-web.metadata-persistence | ● | ● | |||
WebFrameSource model + metadata envelope + diagnostics linterplugin-web.source-model | ● | ||||
Source panel — HTML/CSS editors, sandboxed preview, options, diagnosticsplugin-web.source-panel | ● | ● |
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 | ● |
brand — the design kit
The design tokens and cockpit UI kit adopted across the editor and the marketing site — the source of the visual system paged is built on.
paged.draw — vector
The vector drawing plugin — pen and path tools, pathfinder booleans, live corners, stroke/fill, and SVG import/export, rendered on-canvas through the engine's vector scene layer.