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

Plugins

The first-party content plugins that extend paged beyond native IDML — vectors, web content, raster images, spreadsheets, data, Word, presentations, IDML and PDF — all built on the Plugin SDK.

Tier: BeginnerBeginnerIexplanationDraft

In short Plugins add new kinds of content to a paged document. The first-party plugins are built on the same Plugin SDK contract any third party uses, so they are its worked examples. Each renders into the document through the engine's scene-layer surfaces and persists into the .paged container. The engine is MPL-2.0 or PMEL; the plugins are AGPL-3.0 or PMEL.

  • paged.drawIntermediateII· explanationvector drawing (pen, paths, pathfinder, SVG in and out).
  • paged.webIntermediateII· explanationHTML and CSS as a content type.
  • paged.imageIntermediateII· explanationraster processing and PSD round-trip (Rust/WASM, GPU kernels).
  • paged.sheetIntermediateII· explanationa spreadsheet engine with print-grade layout (Rust/WASM, XLSX round-trip).
  • paged.dataIntermediateII· explanationdatabase publishing and automation (Rust/WASM, DuckDB).
  • paged.docIntermediateII· explanationWord documents in and out.
  • paged.slideIntermediateII· explanationPowerPoint decks as native pages.
  • paged.publishIntermediateII· explanationIDML import and export, and PDF as an editable document.

Plus plugin-template — the fork-and-go starter.

Plugin capability state

The live status of each plugin's capabilities, from the capability record:

● shipped & verified · ○ shipped, re-test pending · ◍ shipped, untested · ◐ partial · ✗ failing · · planned

Plugin platform 50 features · 78% green

FeatureParserRendererMutationCanvasCanvasShellPanelAPIDrawWebImageSheet
Object-model parity matrix (every property x every surface, shrink-only gate)
platform.object-model.parity
◐
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, clipboard
plugin-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 registration
plugin-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 doors
plugin-platform.document-metadata
●●●●●
Document-opened event for plugins
plugin-platform.document-opened
●
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 alone
plugin-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
●
Menu contribution — a plugin placing its own verbs in the menu bar
plugin-platform.menu-contribution
◐●
Modal edit session (K-1) — entry gesture, content pointer, in-frame editing loop
plugin-platform.modal-edit-session
◐◐◐
Native-document read/open door (host.nativeDocument — document.readNative / document.openNative)
plugin-platform.native-document
●●
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 channel
plugin-platform.overlay-channel
◐●●
Overlay contribution into the camera-space SVG surface
plugin-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
·◍·
Part types — a plugin declaring the container parts it owns
plugin-platform.part-types
·
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 bundles
plugin-platform.text-caret-door
●●
Text measurement door (host.text.measureString + editor metrics RPC)
plugin-platform.text-measurement
●●
Tool contribution + gesture-handler registration surface
plugin-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 · draw 55 features · 98% green

FeatureRendererMutationCanvasGestureAPIDraw
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 UI
plugin-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 skeleton
plugin-draw.bundle-manifest
●
Compound paths — make / release, with real non-zero holes
plugin-draw.compound-paths
●
On-canvas corner-radius tool — the live-corners row's predicted handle
plugin-draw.corner-radius-tool
●
Create Outlines — a text frame's glyphs as paths
plugin-draw.create-outlines
◍◍
Direct Selection machine — drag anchors, handles and segments; multi-anchor select, marquee, nudge
plugin-draw.direct-selection
●●
vectorGraphic edit context — live enter/exit via contribute.editContext
plugin-draw.edit-context-live
●
Eyedropper — sample element properties and apply to the selection
plugin-draw.eyedropper
●●
Fill panel as a declarative schema panel — the second W3.1 consumer, with a published binding
plugin-draw.fill-schema-panel
●●
Cubic bezier kernel — de Casteljau split, eval, closest-t, flatten
plugin-draw.geometry-bezier
●
Anchor/handle math — corner, mirror, smooth-from-drag, angle constrain, affine
plugin-draw.geometry-handles
●
Property tests for the draw-geometry kernel
plugin-draw.geometry-properties
●
RDP polyline simplification + perpendicular segment distance
plugin-draw.geometry-rdp
●
On-canvas gradient stops on the annotator line
plugin-draw.gradient-stops
●
Graphic styles — a named, LINKED complete appearance with override DETECTION
plugin-draw.graphic-styles
●●
Headless conformance corpus over published canvas-wasm
plugin-draw.headless-conformance
●
Illustrator oracle lane — path ops recorded in Illustrator 30.1.0, replayed against the engine
plugin-draw.illustrator-oracle
●
Image Trace v0 — raster to editable vector over visioncortex
plugin-draw.image-trace
◐
InDesign round-trip lane — 27 IDML cases read by InDesign 20.0.1
plugin-draw.indesign-roundtrip
◐
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 primitive
plugin-draw.measure-overlay-text
●◐
Object model — paths, appearance stacks, graphic styles, symbols and recipes addressable through host.objects
plugin-draw.objects
●
Objects on a Path — distribute / align / pivot / reorder by TRANSFORM; it moves your objects and creates none
plugin-draw.objects-on-path
●◐
Opacity-mask commands — the paged.draw consumer of the C-28 protocol-58 door
plugin-draw.opacity-mask-commands
●
Knife and Scissors at any point on a path
plugin-draw.path-cutting
●
True Join — closePath / joinPaths over the v56 engine ops
plugin-draw.path-weld
●●
Pattern editing v1 — a re-editable tile field (step-and-repeat artwork, NOT a pattern swatch)
plugin-draw.pattern-bake
·◐
Pen v2 — continue, close and join existing paths; add / delete on the selected path
plugin-draw.pen-existing-paths
●●
Pen tool state machine (click/drag anchors, modifier matrix, close, commit)
plugin-draw.pen-machine
●
Pressure-aware pencil — variable-width strokes via outlineStrokeVariable
plugin-draw.pencil-pressure
●
Work budgets for every suspected hot path
plugin-draw.perf-budgets
●
Phase 4c pro path toolset — curvature/pencil/measure machines + simplify/join/average/offset/outline/pathfinder/gradient/arrowheads commands
plugin-draw.pro-path-toolset
◐●
Reflect (horizontal, vertical, a typed axis, a copy) and Transform Again
plugin-draw.reflect-transform
●
Repeats v1 — radial / grid / mirror, and the repo's first ONE-undo build
plugin-draw.repeats
●◐
Reverse Path Direction
plugin-draw.reverse-path
●
Select-same by fill / stroke / stroke-weight (Tier A — pure selection, no mutation)
plugin-draw.select-same
●
Shape Builder gesture tool — drag merges the faces it crosses, Alt-drag deletes them
plugin-draw.shape-builder
●●
Point snapping — page edges, centre lines, corners, own anchors
plugin-draw.snapping
●●●
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 it
plugin-draw.symbols
◐
Tool options and the Path Options panel
plugin-draw.tool-options
●●
Width, blend, lasso-select, parent-group cycling, parametric generators
plugin-draw.tool-wave-2
●●
Type on a path — attach an existing story to a path, detach it
plugin-draw.type-on-path
●
One batch per flow — created ids off the reply, one shared link index
plugin-draw.write-batching
●

Plugin · web 22 features · 100% green

FeatureRendererCanvasPanelWeb
Canvas follows the document
plugin-web.auto-render
●
Bake to native content — flatten a rendered web frame/flow to Paged page items (IDML/PDF export path)
plugin-web.bake-to-native
◐
Layout parity with Chrome (recorded oracle)
plugin-web.chrome-parity
●
Bound data in templates
plugin-web.data-binding
●
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 frames
plugin-web.flow-threading
●
.html file importer — File/Open + drag-drop an HTML file into a web frame
plugin-web.html-importer
●
In-frame text editing
plugin-web.in-frame-edit
●
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
●●
Object model — web frames, their HTML and CSS properties addressable through host.objects
plugin-web.object-model
●
Outline and canvas highlight
plugin-web.outline-canvas
●
Overflow policies
plugin-web.overflow-policies
●
Break rules and @page in flows
plugin-web.page-breaks
●
Host undo reaches panel edits
plugin-web.panel-undo
●
Work counters and count budgets
plugin-web.perf-budgets
●
Flow/render readout — the last render/flow/bake outcome in the source panel
plugin-web.render-readout
●●
Sub-resources from the document only
plugin-web.resources
●
WebFrameSource model + metadata envelope + diagnostics linter
plugin-web.source-model
●
Source panel — HTML/CSS editors, sandboxed preview, options, diagnostics
plugin-web.source-panel
●●
Web fonts and faces on the canvas
plugin-web.web-fonts
●

Plugin · doc 17 features · 71% green

FeatureShellPanelDoc
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 mutations
plugin-doc.embedded-placement
◐●
File entry — the .docx/.dotx importer and the "Place Word document…" command
plugin-doc.file-entry
◐◐
Identity-based LCS alignment — the preservation invariant under every derived edit
plugin-doc.identity-alignment
◍
Depth-aware table locator — a nested table cannot misdirect an outer edit
plugin-doc.nested-table-locator
◍
Object model — Word document, blocks, runs and merge fields addressable through host.objects
plugin-doc.object-model
●
OPC container + verbatim carry-through preservation (paged-ooxml)
plugin-doc.opc-foundation
●
Outline/styles panel — the retained LoweredDoc surfaced in the editor
plugin-doc.outline-panel
·●
DOCX read path — body, styles, lists, tables, images, hyperlinks, notes
plugin-doc.read-path
●
Edited save-back — targeted byte-level patch of word/document.xml
plugin-doc.save-back
·●
Save-back refusal ledger — the patcher's skips reach the Problems panel
plugin-doc.save-back-feedback
●
Paragraph-property save-back — a targeted `<w:pPr>` rewrite
plugin-doc.save-back-paragraph-props
◍
Table-structure save-back — rows and columns inserted/deleted in the source bytes
plugin-doc.save-back-table-structure
◍
Standalone open — a Word document becomes the whole document, a page per section that grows
plugin-doc.standalone-open
◐
Verbatim export — the zero-edit .docx exporter and its degrade path
plugin-doc.verbatim-export
◐●
Word pagination — line spacing, breaks and keeps as Word lays them out
plugin-doc.word-pagination
◐

Plugin · image 86 features · 76% green

FeatureAPIImage
A sampled .abr tip paints through the existing stroke accumulator
image.abr.engine-bridge
◐
.abr brush-preset reader over a new PSD descriptor reader
image.abr.reader
◐
The .abr regression gate, split into the two lanes its roles can run
image.abr.regression-gate
◐
Per-channel statistics, from the same buffer as the histogram
image.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 decode
image.cms.ingest-transform
◐
CMS print lane — moxcms per-intent RGB↔RGB + CMYK8→RGBA8 ingest
image.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 ingest
image.codec.exif
●
Codec adapter contract (ImageSource/ImageTarget over sans-IO ByteSource) + PNG + raw
image.codec.traits
●
GPU tests that cannot pass silently
image.conformance.gpu-lanes
◐
Conformance harness — scalar references, gpu↔ref parity, fixture corpus
image.conformance.harness
◐
Panel + chain integration of the new adjustments and generators
image.editor.adjust-breadth
●
Auto-enhance — gray-world WB + percentile auto-levels params from the panel histogram
image.editor.auto-enhance
●
Blur and sharpen brushes
image.editor.blur-sharpen-brush
●
Photoshop .abr brush libraries load and set the brush
image.editor.brush-presets
◐
Rotate, flip and Canvas Size over all layers
image.editor.canvas-ops
●
Clone stamp — the brush with a sampled paint layer
image.editor.clone-stamp
●
Foreground/background colour, picker and eyedropper
image.editor.color-fg-bg
◐
Content-aware fill — coarse-to-fine exemplar inpainting
image.editor.content-aware-fill
◍
Editor crop + straighten tool — host-agnostic crop machine over the geom.crop window
image.editor.crop
●
Crop straighten commits (arbitrary-angle rotation resample)
image.editor.crop-straighten
◍
Editor levels/curves/white-balance panel — histogram view + adjust kernels
image.editor.curves
◐
K-3 decode worker pool — off-main-thread ingest decode (host.workers consumer)
image.editor.decode-pool
◐
Dodge, burn and sponge
image.editor.dodge-burn
●
Filters — blur / unsharp / hue-rotate / invert in the adjustments panel
image.editor.filters
●
Gradient tool (drag the line)
image.editor.gradient-tool
●
Healing brush — a clone tone-matched in the gradient domain
image.editor.healing-brush
●
History panel over the tile journal
image.editor.history-panel
◍
Host Cmd+Z inside an image
image.editor.host-undo
●
Hue/Saturation — master, six colour ranges, colorize
image.editor.hue-saturation
◐
M4 editor enablement — C-5 placed bytes → decode → adjust → C-1 Stage-A in-frame composite
image.editor.ingest
◐
Pixel-layer stack with a compose.* fold
image.editor.layers
◐
Live adjustment preview on a resampled proxy
image.editor.live-preview
●
Paint on layer masks (Pixels/Mask edit target)
image.editor.mask-painting
●
Move tool for pixels and layers
image.editor.move-tool
●
Brush / Pencil / Eraser — the raster paint lane
image.editor.paint
●◐
Paint bucket
image.editor.paint-bucket
◍
Patch tool
image.editor.patch
●
Define pattern, pattern fill and shape blur
image.editor.pattern-fill
●
Median, Maximum, Minimum and Color Lookup
image.editor.rank-filters
◐
Raster type — shaped glyphs painted into a layer
image.editor.raster-type
◐
Red eye
image.editor.red-eye
●
Resample — resize the working image through the registered kernels
image.editor.resample
●
Spot healing brush
image.editor.spot-heal
●
C-6 tile provider for placed images (host.images.claimImageResource, v44; honest level-0 subset)
image.editor.tile-provider
◐
Raster tool options in the host's tool-options bar
image.editor.tool-options
◐
Bounded COW tile journal — undo/redo for pixel edits
image.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 reported
image.io.depth-16bit-ingest
◐
Layered PSD export
image.io.layered-psd
◐
Commit image edits to the document and reopen them
image.io.persistence
◐
Save-back — adjusted composite to PSD / PNG / JPEG
image.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 classes
image.kernel.lut-samplers
◐
General backward-map warp
image.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 beneath
image.layers.clipping
●
Editable adjustment layers
image.layers.editable-adjustments
◐
The layer fold keeps adjustment layers in f16
image.layers.f16-fold
◍
Layer groups — pass-through and isolated, nesting up to eight
image.layers.groups
◍
Smart objects
image.layers.smart-objects
●
Object model — layers, masks, adjustments and smart objects addressable through host.objects
image.object-model
●
A host path becomes the selection
image.paths.path-to-selection
●
A raster selection becomes a real vector path
image.paths.selection-to-path
◐
Work counters and count budgets
image.perf.budgets
●
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 skeleton
image.pipeline.engine-a-skeleton
●
paged.image bundle (media.paged.image) — manifest + activate + panel
image.plugin.bundle-manifest
◐
PSD structural session — layer list/edit/save reach the editor
image.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 writer
image.psd.mutatable
◐
PSD rendered tier — channel decode + flatten render oracle
image.psd.rendered
◐
PSD/PSB structural parse + preservation-invariant writer
image.psd.roundtrip
◐
Reductions — histogram + min/max/mean statistics
image.reduce.statistics
◐
Residency Tier 0/1 hardening under working-set pressure
image.residency.tier01
●
Selection-mask plumbing — the §6.1 mask surfaced end-to-end
image.selection.mask
●
Selection system — marquee/ellipse/lasso/wand over the mask ABI
image.selection.mask-tools
●●
Selection coverage threaded through the GPU adjust chain
image.selection.masked-pipeline
●
Select ▸ Modify and wand options
image.selection.modify
●

Plugin · slide 15 features · 100% green

FeatureSlide
PowerPoint charts drawn as native shapes from their cached values
plugin-slide.charts
◐
A deck's embedded fonts reach the document, within their licences
plugin-slide.embedded-fonts
◐
A PPTX opens as native slides (generated IDML, inheritance resolved)
plugin-slide.import-native
◐
New slide from layout; layout editing
plugin-slide.layouts
◐
Object model — slides, layouts and placeholders addressable through host.objects
plugin-slide.object-model
●
Engine and host features for slides — page order, page metadata, masters, page images, go to page
plugin-slide.page-doors
◐
PowerPoint as the oracle — authored fixtures and recorded answers
plugin-slide.powerpoint-oracle
●
Export a .pptx (original bytes if unedited, else regenerated)
plugin-slide.pptx-export
◐
Read a .pptx into the slide IR
plugin-slide.pptx-read
●
DrawingML preset geometries become native paths
plugin-slide.preset-geometry
●
Slide sorter — thumbnails, reorder, duplicate, delete, hide
plugin-slide.slide-sorter
◐
Slideshow with transitions and builds, presenter view
plugin-slide.slideshow
·
SmartArt drawn as native shapes from PowerPoint's laid-out drawing
plugin-slide.smartart
◐
Speaker notes per slide
plugin-slide.speaker-notes
◐
PowerPoint table styles resolved as PowerPoint draws them, kept as native table styles
plugin-slide.table-styles
◐

Plugin · data 39 features · 100% green

FeatureShellData
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 panel
data.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 diff
data.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
●
Universal property binding — any host.objects property bound to data, one undo step per apply (ADR 558)
data.bind.property
●
Row diff since the document was last written — added, removed and changed rows, and the bindings they reach
data.bind.row-diff
●
Sync states per binding, with pin, unpin and accept-source
data.bind.sync-review
●
Variable bindings are custom InDesign text variables; one Set re-bakes every instance (ADR 559, protocol 71)
data.bind.text-variables
●
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
●
Export as InDesign Data Merge template (native placeholders + UTF-16 data source)
data.export.datamerge
●
Binding-expression DSL — lexer, parser, evaluator and function library, registry-driven dispatch
data.expr.engine
●
Governed-extract source (governed tables + optional metadata sidecar -> catalog)
data.governed.extract
◐
Locale-aware display formatting (en/de v1)
data.i18n.display
●
Locales as a data table (CLDR values), per-field locale and display patterns
data.i18n.locale-table
●
Placeholder lowering — variable replacement + single-region dynamic table
data.lower.content
◐
Data Merge planner — Single and Multiple Records laid out by InDesign's rule
data.lower.merge-plan
●
Data Merge writer — merge the records into the document, matching InDesign
data.lower.merge-writer
◐
Record flow lowers into text frames on pages added as the flow needs them
data.lower.recordflow-writer
◐
Re-lowering a table, barcode, record flow or merge updates its content in place
data.lower.relower-in-place
◐
v43 lowering consumers — in-text variables (D-01), image place (D-14), live record-flow (D-12), rules (D-13)
data.lower.v43-consumers
◐
paged.data's own objects in host.objects — sources, queries, bindings, data sets, variables and typed commands
data.object-model
●
Performance gates (§12.5) — engine-tier perf assertions
data.perf.gates
◐
Bindings live in the document's labels; the session part is a cache; restore from an InDesign re-save (ADR 559)
data.persist.labels
●
paged.data bundle (media.paged.data) — manifest + activate + 3 panels + DuckDB query glue
data.plugin.bundle
◐
The data session is saved with the document and restored on open
data.plugin.persistence
●
Register as an SDK data provider (publish RecordSet to other consumers, e.g. sheets)
data.provider.contract
●
Data query panel — SQL with DuckDB diagnostics, filter/sort/group builders, preview grid
data.query.panel
◐
Query engine (DuckDB-WASM) + RecordSet shape/order/hash — the Arrow seam
data.query.seam
◐
Rule editor — checked condition, firing preview, document style, per-record paragraphs
data.rule.authoring
●
Capability-gated data access + threat model (the suite's largest surface)
data.security.gates
◐
Source adapters (inline + file at M0) + capability/consent gate + visible manifest
data.source.adapters
◐
D-11 DB attach (SQLite/Postgres/MySQL) + DuckDB-WASM first-class engine + refresh-policy + remote
data.source.db-attach
◐
Local import of JSON, NDJSON, Parquet and XLSX into DuckDB (data-xlsx for workbooks)
data.source.local-formats
◐
Refresh policies per source — manual, on open, interval (remote, consented), never
data.source.refresh-policy
◐
Illustrator "Variables" — the four traits, mapped onto the shipped binding model (§16.4)
data.variable.traits
◐

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
●

Plugin · publish (IDML/PDF interchange) 6 features · 50% green

FeatureShellPublish
Corpus byte-identity sweep — 99/99 packages identical, and what it does NOT measure
plugin-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 bytes
plugin-publish.save-back-defects
◍
IDML import and export as typed commands
plugin-publish.typed-commands
●

Plugin · pdf 7 features · 60% green

FeaturePDF
Editable text reconstruction — positioned glyphs → paragraphs of styled runs
plugin-pdf.editable-text
◐
Editable vectors + PDF colours mapped to document swatches
plugin-pdf.editable-vector
●
Non-JPEG image import — PDFium bitmap decode for every filter chain
plugin-pdf.image-filters
◍
crates/pdf-import writes the native `.paged` OCF the engine load path expects
plugin-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
◍
PDF import as a typed command
plugin-pdf.typed-commands
●

On this page