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 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 | ◐ |
Plugin · image 61 features · 72% green
| Feature | Shell | API | Image |
|---|---|---|---|
A sampled .abr tip paints through the existing stroke accumulatorimage.abr.engine-bridge | ◐ | ||
.abr brush-preset reader over a new PSD descriptor readerimage.abr.reader | ◐ | ||
The .abr regression gate, split into the two lanes its roles can runimage.abr.regression-gate | ◐ | ||
Per-channel statistics, from the same buffer as the histogramimage.channels.readout | ◐ | ||
Load a channel as the selection (luminosity masking)image.channels.to-selection | ● | ||
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 rung 1 — the RGB display transform at decodeimage.cms.ingest-transform | ◐ | ||
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 | ◐ | ||
Panel + chain integration of the new adjustments and generatorsimage.editor.adjust-breadth | ◍ | ||
Auto-enhance — gray-world WB + percentile auto-levels params from the panel histogramimage.editor.auto-enhance | ● | ||
Photoshop .abr brush libraries load and set the brushimage.editor.brush-presets | ◐ | ||
Clone stamp — the brush with a sampled paint layerimage.editor.clone-stamp | ● | ||
Content-aware fill — coarse-to-fine exemplar inpaintingimage.editor.content-aware-fill | ◍ | ||
Editor crop + straighten tool — host-agnostic crop machine over the geom.crop windowimage.editor.crop | ◍ | ||
Crop straighten commits (arbitrary-angle rotation resample)image.editor.crop-straighten | ◍ | ||
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 | ◐ | ||
Filters — blur / unsharp / hue-rotate / invert in the adjustments panelimage.editor.filters | ● | ||
Healing brush — a clone tone-matched in the gradient domainimage.editor.healing-brush | ● | ||
History panel over the tile journalimage.editor.history-panel | ◍ | ||
M4 editor enablement — C-5 placed bytes → decode → adjust → C-1 Stage-A in-frame compositeimage.editor.ingest | ◐ | ||
Pixel-layer stack with a compose.* foldimage.editor.layers | ◐ | ||
Brush / Pencil / Eraser — the raster paint laneimage.editor.paint | ◍ | ◐ | |
Raster type — shaped glyphs painted into a layerimage.editor.raster-type | ◐ | ||
Resample — resize the working image through the registered kernelsimage.editor.resample | ● | ||
C-6 tile provider for placed images (host.images.claimImageResource, v44; honest level-0 subset)image.editor.tile-provider | ◐ | ||
Bounded COW tile journal — undo/redo for pixel editsimage.editor.undo-journal | ◐ | ||
Engine B — persistent buffer graph (invalidation, mip-aware eval, Gestures/Operations)image.graph.engine-b | ◐ | ||
16-bit PSD sources open, reduced to 8 and reportedimage.io.depth-16bit-ingest | ◐ | ||
Save-back — adjusted composite to PSD / PNG / JPEGimage.io.save-back | ◍ | ◐ | |
Kernel breadth — 24 new point/compose/gen kernels (73 → 97)image.kernel.breadth-2026-08 | ◍ | ||
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 | ◐ | ||
1D and 3D LUT sampler classesimage.kernel.lut-samplers | ◐ | ||
General backward-map warpimage.kernel.warp-backward | ◐ | ||
Frozen WGSL kernel ABI v1 (4 bind groups, 16×16, mask-mixed pointwise)image.kernel.wgsl-abi | ● | ||
Clipping layers — an adjustment confined to the layer beneathimage.layers.clipping | ◍ | ||
The layer fold keeps adjustment layers in f16image.layers.f16-fold | ◍ | ||
Layer groups — pass-through and isolated, nesting up to eightimage.layers.groups | ◍ | ||
A host path becomes the selectionimage.paths.path-to-selection | ● | ||
A raster selection becomes a real vector pathimage.paths.selection-to-path | ◐ | ||
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 structural session — layer list/edit/save reach the editorimage.psd.editor-doors | ◍ | ||
PSD import populates the layer stack (declines rather than approximates)image.psd.layer-import | ◐ | ||
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 | ● | ||
Selection system — marquee/ellipse/lasso/wand over the mask ABIimage.selection.mask-tools | ◍ | ● | |
Selection coverage threaded through the GPU adjust chainimage.selection.masked-pipeline | ● |
Plugin · doc 14 features · 43% green
| Feature | Shell | Panel | plugin.doc |
|---|---|---|---|
Atomic pour — the place path adopts Mutation::Batch for text steps (C-14)plugin-doc.atomic-pour | ◍ | ||
The wordDocument surface — objectType + editContext declaration (ADR-024)plugin-doc.edit-context | · | ◍ | |
Embedded placement — a .docx poured into a host frame via host mutationsplugin-doc.embedded-placement | ◐ | ● | |
File entry — the .docx/.dotx importer and the "Place Word document…" commandplugin-doc.file-entry | ◐ | ◐ | |
Identity-based LCS alignment — the preservation invariant under every derived editplugin-doc.identity-alignment | ◍ | ||
Depth-aware table locator — a nested table cannot misdirect an outer editplugin-doc.nested-table-locator | ◍ | ||
OPC container + verbatim carry-through preservation (paged-ooxml)plugin-doc.opc-foundation | ● | ||
Outline/styles panel — the retained LoweredDoc surfaced in the editorplugin-doc.outline-panel | · | ◍ | |
DOCX read path — body, styles, lists, tables, images, hyperlinks, notesplugin-doc.read-path | ● | ||
Edited save-back — targeted byte-level patch of word/document.xmlplugin-doc.save-back | · | ● | |
Save-back refusal ledger — the patcher's skips reach the Problems panelplugin-doc.save-back-feedback | ◍ | ||
Paragraph-property save-back — a targeted `<w:pPr>` rewriteplugin-doc.save-back-paragraph-props | ◍ | ||
Table-structure save-back — rows and columns inserted/deleted in the source bytesplugin-doc.save-back-table-structure | ◍ | ||
Verbatim export — the zero-edit .docx exporter and its degrade pathplugin-doc.verbatim-export | ◐ | ● |
Plugin · draw 39 features · 53% green
| Feature | Renderer | Mutation | Canvas | 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 | ◐ | ● | ||||
Appearance panel v0 — the metadata stack, with the bake limit stated in the UIplugin-draw.appearance-panel | ◍ | ◐ | ||||
Blends v1 — three spacing modes over a real spine (grew the tool-wave-2 blend v0)plugin-draw.blends | ◍ | ◐ | ||||
Brush tools v0 — paintbrush, blob brush, eraser (calligraphic nib sweep)plugin-draw.brush-tools | ◍ | ◍ | ||||
paged.draw bundle manifest (media.paged.draw) + activate skeletonplugin-draw.bundle-manifest | ● | |||||
Compound paths — make / release, with real non-zero holesplugin-draw.compound-paths | ◍ | |||||
On-canvas corner-radius tool — the live-corners row's predicted handleplugin-draw.corner-radius-tool | ● | |||||
vectorGraphic edit context — live enter/exit via contribute.editContextplugin-draw.edit-context-live | ● | |||||
Eyedropper — sample element properties and apply to the selectionplugin-draw.eyedropper | ◍ | ◍ | ||||
Fill panel as a declarative schema panel — the second W3.1 consumer, with a published bindingplugin-draw.fill-schema-panel | ◍ | ◍ | ||||
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 | ● | |||||
Graphic styles — a named, LINKED complete appearance with override DETECTIONplugin-draw.graphic-styles | ◍ | ◍ | ||||
Headless conformance corpus over published canvas-wasmplugin-draw.headless-conformance | ● | |||||
Image Trace v0 — raster to editable vector over visioncortexplugin-draw.image-trace | ◐ | |||||
Layers BINDING PROVIDER — paged.draw serves the HOST Layers panel (ADR 023 phase D)plugin-draw.layers-binding-provider | ◍ | ◍ | ||||
Layers panel — the panels/layers.panel.json prototype made real (expert-leaf React)plugin-draw.layers-panel | ◍ | |||||
Live Corners — Rounded/Inverse/Bevel/Fancy/None presets via frameCornerOption*/Radius* + live marker (Tier B)plugin-draw.live-corners | ◐ | ● | ||||
Live Paint v0 — regenerable face paint over the planar arrangement (NOT live)plugin-draw.live-paint | ◐ | ◐ | ||||
Measure readout drawn on-canvas via the overlay text primitiveplugin-draw.measure-overlay-text | ◍ | ◐ | ||||
Objects on a Path — distribute / align / pivot / reorder by TRANSFORM; it moves your objects and creates noneplugin-draw.objects-on-path | ◍ | ◐ | ||||
Opacity-mask commands — the paged.draw consumer of the C-28 protocol-58 doorplugin-draw.opacity-mask-commands | ◍ | |||||
True Join — closePath / joinPaths over the v56 engine opsplugin-draw.path-weld | ◍ | ◍ | ||||
Pattern editing v1 — a re-editable tile field (step-and-repeat artwork, NOT a pattern swatch)plugin-draw.pattern-bake | · | ◐ | ||||
Pen tool state machine (click/drag anchors, modifier matrix, close, commit)plugin-draw.pen-machine | ● | |||||
Pressure-aware pencil — variable-width strokes via outlineStrokeVariableplugin-draw.pencil-pressure | ● | |||||
Phase 4c pro path toolset — curvature/pencil/measure machines + simplify/join/average/offset/outline/pathfinder/gradient/arrowheads commandsplugin-draw.pro-path-toolset | ◐ | ● | ||||
Repeats v1 — radial / grid / mirror, and the repo's first ONE-undo buildplugin-draw.repeats | ◍ | ◐ | ||||
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 | ◍ | ● | ||||
Symbols v0 — a named artwork DEFINITION and instances that follow itplugin-draw.symbols | ◐ | |||||
Width, blend, lasso-select, parent-group cycling, parametric generatorsplugin-draw.tool-wave-2 | ◍ | ◍ |
Plugin · pdf 6 features · 17% green
| Feature | Shell | plugin.pdf |
|---|---|---|
Editable text reconstruction — positioned glyphs → paragraphs of styled runsplugin-pdf.editable-text | ◐ | |
Editable vectors + PDF colours mapped to document swatchesplugin-pdf.editable-vector | ◍ | |
Non-JPEG image import — PDFium bitmap decode for every filter chainplugin-pdf.image-filters | ◍ | |
crates/pdf-import writes the native `.paged` OCF the engine load path expectsplugin-pdf.native-ocf-writer | ◍ | |
Open/read PDF files in the editor (.pdf importer → native document)plugin-pdf.pdf-import | ◐ | |
PDFium is the reader engine (pdf.js dropped)plugin-pdf.pdfium-reader | ◍ |
Plugin platform 46 features · 70% green
| Feature | Parser | Renderer | Mutation | Canvas | Canvas | Shell | Panel | API | Draw | Web | Image | Sheet |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
bindCreated — naming a to-be-minted id so a two-batch flow collapses to one undo (C-15)plugin-platform.bind-created | ◍ | |||||||||||
Binding providers — a plugin serves the values a HOST panel binds to (ADR 023, B-26)plugin-platform.binding-providers | ◐ | ◍ | ◍ | ◍ | ||||||||
Persistent blob store (host.blob, OPFS-backed, per-plugin quota)plugin-platform.blob-store | ● | |||||||||||
Bundle lifecycle — activate(host) → BundleHandle.dispose()plugin-platform.bundle-lifecycle | ◐ | ● | ||||||||||
C-34 — the parts and scene-layer doors name their CALLER (the adapter, never the bundle)plugin-platform.caller-gated-doors | ◍ | ◍ | ||||||||||
Capability declaration — document read/write, rendering surfaces, editContext, network, clipboardplugin-platform.capability-scopes | ◐ | |||||||||||
Capability-catalog vendoring + the single-source vocabulary gate (ADR 019)plugin-platform.catalog-vendoring | ◍ | |||||||||||
System-clipboard door (host.clipboard — K-6 / S-14, text + tabular)plugin-platform.clipboard-door | ◐ | ◍ | ||||||||||
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 | ◍ | ● | ||||||||||
plugin-template — the living proof a fresh clone builds on published canaries aloneplugin-platform.fresh-checkout-proof | ◐ | |||||||||||
Headless host conformance harness (createHeadlessHost)plugin-platform.headless-host-conformance | ● | |||||||||||
Host-owned eyedropper — sample composited pixels into the document defaults (C-32)plugin-platform.host-eyedropper | ● | |||||||||||
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 | ● | ◍ | ◍ | |||||||||
Namespaced key-value store (host.storage — ungated, JSON values)plugin-platform.kv-storage | ◍ | |||||||||||
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 | ◐ | ◐ | ◐ | |||||||||
Native-document read/open door (host.nativeDocument — document.readNative / document.openNative)plugin-platform.native-document | ◍ | ◍ | ||||||||||
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 | ◐ | |||||||||||
K-13 — one entry gesture for canvas content (entry narrowed to a one-member union)plugin-platform.one-entry-gesture | ◍ | |||||||||||
Overlay TEXT primitive on the tool-preview channelplugin-platform.overlay-channel | ◐ | ◍ | ● | |||||||||
Overlay contribution into the camera-space SVG surfaceplugin-platform.overlay-registration | ● | |||||||||||
Panel-rail + icon contribution door (K-8 — rail launcher + sanitized SVG glyph)plugin-platform.panel-rail-door | ● | ◍ | ||||||||||
Panel contribution registration (expert-leaf React in v0)plugin-platform.panel-registration | ◐ | |||||||||||
Per-element parentage read (host.document.parentOf)plugin-platform.parent-of | · | ◍ | · | |||||||||
Placed-asset bytes read door (host.assets.getPlacedImage — C-5 / I-04)plugin-platform.placed-asset-bytes | ◐ | · | ◐ | |||||||||
Planar-region read door for bundles (host.document.planarRegions — K-11)plugin-platform.planar-regions-door | ◍ | |||||||||||
Host save-file door (host.shell.saveFile)plugin-platform.save-file | ◍ | ◍ | · | |||||||||
In-frame plugin scene layers (contribute.sceneLayer — vector/text/image/gradient/blend/shadow)plugin-platform.scene-layer | ◍ | ◍ | ● | |||||||||
The published plugin-sdk stays a SYNCHRONOUS module (no top-level await)plugin-platform.sdk-bundle-shape | ◍ | |||||||||||
C-9 — caret/selection-offset read door for bundlesplugin-platform.text-caret-door | ● | ◍ | ||||||||||
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 | ◍ | ● | ||||||||||
Wire-vendoring drift gate (sync-wire --check, hard in publish CI)plugin-platform.wire-drift-gate | ◍ | |||||||||||
Worker spawn + SharedArrayBuffer (host.workers — K-3, off-main-thread compute)plugin-platform.worker-pool | ● | ◍ | ◍ |
Plugin · publish (IDML/PDF interchange) 5 features · 20% green
| Feature | Shell | plugin.publish |
|---|---|---|
Corpus byte-identity sweep — 99/99 packages identical, and what it does NOT measureplugin-publish.byte-identity-sweep | ◍ | |
IDML interchange adapter (idml-import + idml-export crates, re-homed to plugin-publish)plugin-publish.idml-adapter-crates | ◍ | |
.idml exporter — the outbound half of the bundle (media.paged.publish.exporter.idml)plugin-publish.idml-exporter | ◍ | ◍ |
.idml importer via host.nativeDocument (@paged-media/publish bundle)plugin-publish.idml-importer | ● | |
Save-path defect class — nine defects between a parsed document and its bytesplugin-publish.save-back-defects | ◍ |
Plugin · web 10 features · 80% green
| Feature | Renderer | Canvas | Shell | Panel | Web |
|---|---|---|---|---|---|
Bake to native content — flatten a rendered web frame/flow to Paged page items (IDML/PDF export path)plugin-web.bake-to-native | ◐ | ||||
On-canvas vector rendering of web frames (Blitz/WASM → C-1 sceneLayer lane)plugin-web.engine-rendering | ◍ | ◍ | ● | ||
Flow fragmentation — re-line-break one flow across N frames (ADR-020 ladder)plugin-web.flow-fragmentation | ● | ||||
Flow threading — one web source across a chain of publication framesplugin-web.flow-threading | ◍ | ||||
.html file importer — File/Open + drag-drop an HTML file into a web frameplugin-web.html-importer | ● | ||||
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 | ● | ● | |||
Flow/render readout — the last render/flow/bake outcome in the source panelplugin-web.render-readout | · | ● | |||
WebFrameSource model + metadata envelope + diagnostics linterplugin-web.source-model | ● | ||||
Source panel — HTML/CSS editors, sandboxed preview, options, diagnosticsplugin-web.source-panel | ● | ● |
Plugin · sheet 31 features · 93% green
| Feature | Shell | API | Sheet |
|---|---|---|---|
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-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 | ● | ||
Row/col insert-delete wasm door — BLOCKED on xlsx-writer structural re-emissionsheet.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 loweringsheet.chart.engine | ● | ||
Graph types — stacked column/bar + radar, axis titles, transpose rows/columns, c:grouping importsheet.chart.graphs | ● | ||
Data-provider CONSUMER — source a sheet from a governed dataset (host.dataProviders)sheet.data.consumer | ● | ||
Session edit ops — stable range sort (values lane), find over values/formulas, replace with skip reportingsheet.edit.ops | ● | ||
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 | ◐ | ||
Cell fill / text colours are MINTED swatches — a raw hex in a colorRef paints nothingsheet.lower.cell-colour-swatches | ◐ | ||
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 | ● | ||
Formula dialect parser — literals, A1 refs, operator precedence, functions, union/intersection, array literals, defined names, canonical print fixpointsheet.parser.dialect | ● | ||
paged.sheet bundle (media.paged.sheet) — manifest + activate + 3 panels + 7 commands + importer/exporter + engine bootsheet.plugin.bundle | ● | ||
Function browser + workbook inventory + the styleFromCell command (workbook panel)sheet.plugin.function-browser | ● | ||
Workbook persistence — host.blob (OPFS) + the metadata binding envelopesheet.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 partsheet.table.structured | ● | ||
get_range_styled — the workbook's REAL per-cell visual styles, as a door of its ownsheet.wasm.range-styled-door | ◐ | ||
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 | ● |
REST API
The editor-server REST surface — authentication, files, account, billing, fonts, and image search — generated from the server's OpenAPI specification.
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.