Capability matrix
The full capability grid — every paged capability across every implementation layer, with a shipped-and-verified status per cell. Generated live from the registry.
In short every capability paged tracks, grouped by chapter, shown across the implementation layers it touches. Each cell's glyph carries the meaning — shipped and verified, shipped but untested, partial, failing, or planned — so the grid reads in greyscale. This page is generated from the capability registry; the support badge beside each IDML feature links here to its row.
39 chapters · generated from the capability registry @ d1900630.
● shipped & verified · ◍ shipped, untested · ◐ partial · ✗ failing · · planned
Anchored & inline objects 3 features · 100% green
| Feature | Parser | Renderer | Mutation | Canvas | Panel |
|---|---|---|---|---|---|
Anchored alignment (space-or-align relative options)anchored-inline-objects.anchor-alignment | ● | ● | |||
Anchored frames (above/below line placement)anchored-inline-objects.anchored-frames | ● | ● | ● | ||
Anchored-object mutationsanchored-inline-objects.anchored-ops | ● | ● |
Color & swatches 12 features · 92% green
| Feature | Parser | Renderer | Mutation | Canvas | Shell | Panel | Gesture | Script |
|---|---|---|---|---|---|---|---|---|
Character fill colorcolor-swatches.character-fill | ● | ● | ● | ● | ||||
Color groups (CRUD + membership)color-swatches.color-groups | ● | ● | ● | ● | ● | |||
ColorOverride specials (paper/black/registration)color-swatches.color-overrides | ● | · | ||||||
Document defaults for new objects (fill/stroke/weight)color-swatches.document-defaults | ● | ● | ||||||
Apply fill/stroke color + tint to framescolor-swatches.fill-stroke-apply | ● | ● | ● | ● | ● | |||
Gradients (linear/radial, stops + midpoints)color-swatches.gradients | ● | ● | ● | ● | ● | ◍ | ● | |
ICC color management (lcms2 native / qcms wasm)color-swatches.icc-cmm | ● | ● | ● | |||||
Ink management (convert-to-process, aliases, standard Lab)color-swatches.ink-manager | ● | ◍ | ● | |||||
Lab / mixed-ink / spot-without-CMYKcolor-swatches.lab-mixed-ink | ● | ◐ | ||||||
CMYK overprintcolor-swatches.overprint | ● | ● | ||||||
Process CMYK/RGB + spot inks + tintscolor-swatches.process-spot-tint | ● | ● | ● | |||||
Swatch CRUD (create/edit/delete + .ase import/export)color-swatches.swatch.crud | ● | ● | ● | ● | ● |
Companion formats 1 features · 0% green
| Feature | Parser |
|---|---|
Snippets & InCopy (.idms / .icml / libraries)companion-formats.idms-icml | · |
Conditional text 3 features · 100% green
| Feature | Parser | Renderer | Mutation | Canvas | Panel | Script |
|---|---|---|---|---|---|---|
Apply conditions to text rangesconditional-text.applied-conditions | ● | ● | ● | ◍ | ● | ● |
Condition visibility ops (SetConditionVisible, ActivateConditionSet)conditional-text.condition-ops | ● | |||||
Condition visibility filtering (hidden runs pre-layout)conditional-text.visibility-filtering | ● | ● |
Cross-references & hyperlinks 5 features · 100% green
| Feature | Parser | Renderer | Mutation | Panel |
|---|---|---|---|---|
Bookmarkscross-references-hyperlinks.bookmarks | ● | ● | ◍ | |
Cross-referencescross-references-hyperlinks.cross-references | ● | ● | ◍ | |
Hyperlinks (targets + sources)cross-references-hyperlinks.hyperlinks | ● | ● | ◐ | ◍ |
Index entries (topic aggregation, page lists)cross-references-hyperlinks.index | ● | ● | ◍ | |
TOC entry resolutioncross-references-hyperlinks.toc | ● | ● | ◍ |
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 | ◐ |
Edge cases & degradation 1 features · 100% green
| Feature | Renderer | Canvas | SDK |
|---|---|---|---|
Render diagnostics channel (overset, missing assets, fonts)edge-cases.diagnostics-channel | ● | ◍ | ● |
Editor shell 75 features · 93% green
| Feature | Canvas | Shell | Panel | Style | API | Draw |
|---|---|---|---|---|---|---|
Cockpit workflow modes (Design/Content/Prepress/Data/Review/Export)editor-shell.cockpit-modes | ● | ● | ||||
Authoring verbs in palette/menus (insert/create commands)editor-shell.command-authoring | ◐ | |||||
Command palette (Cmd+K)editor-shell.command-palette | ● | |||||
Context-sensitivity — the surface follows what you are editingeditor-shell.context-sensitivity | ◐ | |||||
Per-mode context toolbarseditor-shell.context-toolbars | ◐ | ● | ||||
Cockpit document title bar (falls back to the loaded file's name)editor-shell.document-title | ● | |||||
Document intake (file input + drop)editor-shell.file-intake | ● | |||||
Global keyboard shortcuts (undo/redo, zoom, page nav)editor-shell.keyboard-shortcuts | ● | |||||
Menu bar (File/Edit/View/Window)editor-shell.menus | ● | |||||
Panel rail + inspector context routingeditor-shell.panel-rail | ● | ● | ● | |||
Actions (record / replay command sequences)editor-shell.panels.actions | ● | |||||
Aligneditor-shell.panels.align | ● | ● | ||||
Anchored objecteditor-shell.panels.anchored | ● | ◍ | ||||
Attributeseditor-shell.panels.attributes | ● | ● | ||||
Bullets & numbering (concept)editor-shell.panels.bullets-numbering | ● | ● | ||||
Cell styleseditor-shell.panels.cell-styles | ◐ | ● | ||||
Charactereditor-shell.panels.character | ● | ● | ||||
Character styleseditor-shell.panels.character-styles | ● | ● | ||||
Coloreditor-shell.panels.color | ● | ● | ||||
Color groupseditor-shell.panels.color-groups | ● | ● | ||||
Colour settingseditor-shell.panels.color-settings | ● | ● | ||||
Color wheeleditor-shell.panels.color-wheel | ● | ● | ||||
Comments + review inspectoreditor-shell.panels.comments | · | ● | ||||
Component libraryeditor-shell.panels.component-library | · | ● | ||||
Conditions + condition setseditor-shell.panels.conditions | ● | ● | ||||
Control stripeditor-shell.panels.control | ● | |||||
Data source / mapping / generated pageseditor-shell.panels.data-suite | · | ● | ||||
Document mapeditor-shell.panels.document-map | ◐ | ● | ||||
Effectseditor-shell.panels.effects | ✗ | ● | ||||
Export centereditor-shell.panels.export-center | ◐ | ● | ||||
Export tagging (concept)editor-shell.panels.export-tagging | ◐ | ● | ||||
Fontseditor-shell.panels.fonts | ● | ● | ||||
Frame fittingeditor-shell.panels.frame-fitting | ● | ● | ||||
Glyphseditor-shell.panels.glyphs | ◐ | ● | ||||
Gradientseditor-shell.panels.gradients | ● | ● | ||||
Infoeditor-shell.panels.info | ● | ● | ||||
Ink managereditor-shell.panels.ink-manager | ● | ● | ||||
Inspector (raw, dev)editor-shell.panels.inspector | ● | ● | ||||
Layerseditor-shell.panels.layers | ● | ● | ||||
Linkseditor-shell.panels.links | ● | ● | ||||
Articles / Hyperlinks / Bookmarks / Cross refs / Indexeditor-shell.panels.list-collections | ● | ● | ||||
Master pageseditor-shell.panels.master-pages | ● | ● | ||||
Object export options (concept)editor-shell.panels.object-export | ◐ | ● | ||||
Object styleseditor-shell.panels.object-styles | ● | ● | ||||
Object transformeditor-shell.panels.object-transform | ● | ● | ||||
Outlineeditor-shell.panels.outline | ● | ● | ||||
Output readinesseditor-shell.panels.output-readiness | ◐ | ● | ||||
Outputs + export inspectoreditor-shell.panels.outputs | ◐ | ◐ | ● | |||
Pages (list)editor-shell.panels.pages-list | ● | ● | ||||
Pages (navigator filmstrip)editor-shell.panels.pages-navigator | ● | ● | ||||
Paragrapheditor-shell.panels.paragraph | ● | ● | ||||
Paragraph styleseditor-shell.panels.paragraph-styles | ● | ● | ||||
Pathfindereditor-shell.panels.pathfinder | ● | ● | ||||
Preflighteditor-shell.panels.preflight | ◐ | ● | ||||
Problemseditor-shell.panels.problems | ● | ◍ | ||||
Properties (context inspector)editor-shell.panels.properties | ● | ● | ● | |||
Publication healtheditor-shell.panels.publication-health | ◐ | ● | ||||
Schema list demo (consumer proof for the v1.1 list tier)editor-shell.panels.schema-list-demo | ● | |||||
Schema tree demo (consumer proof for the v1.2 tree / reorder / rename tier)editor-shell.panels.schema-tree-demo | ◍ | |||||
Separations & ink limiteditor-shell.panels.separations | ◐ | ◍ | ||||
Spreadseditor-shell.panels.spreads | ● | ● | ||||
Stories + story inspectoreditor-shell.panels.stories | ◐ | ● | ||||
Strokeeditor-shell.panels.stroke | ● | ● | ||||
Swatcheseditor-shell.panels.swatches | ● | ● | ||||
Table (concept)editor-shell.panels.table | ◐ | ● | ||||
Table styleseditor-shell.panels.table-styles | ◐ | ● | ||||
Tabs (concept)editor-shell.panels.tabs | ● | ● | ||||
Text frame optionseditor-shell.panels.text-frame-options | ● | ● | ||||
Text wrapeditor-shell.panels.text-wrap | ● | ● | ||||
Tree (scene graph, dev)editor-shell.panels.tree | ● | |||||
First-party bundle loading + composition (draw/web/image/sheet/data/doc/pdf/publish)editor-shell.plugin-bundles | ● | ● | ||||
Plugin-canary pin drift check (the PLUGIN boundary, as protocol-version guards the ENGINE one)editor-shell.plugin-pin-drift-guard | ◍ | |||||
Schema panels v1.1 — list widget + applyEntity write (B-01 / G3)editor-shell.schema-panel-list-tier | ◐ | ◍ | ||||
Dark/light theming (dark default, token system)editor-shell.theme | ● | ● | ||||
Tool rail (built-in tool catalog, flyout groups, tear-off, ToolStatus)editor-shell.tool-rail | ● | ● |
Editor tools & gestures 27 features · 96% green
| Feature | Canvas | Canvas | Shell | Gesture | Style |
|---|---|---|---|---|---|
Content transforms inside frame (translate/rotate/scale content)editor-tools.content-transform | ◍ | ● | |||
Gridify (arrow keys mid-drag → N×M frames)editor-tools.draw.gridify | ● | ||||
Line draw tool (Shift 45° constraint)editor-tools.draw.line | ● | ||||
Pen tool path drawing (+ add/delete/convert anchor)editor-tools.draw.pen | ● | ● | |||
Pencil freehand (RDP simplification)editor-tools.draw.pencil | ● | ||||
Rectangle draw tooleditor-tools.draw.rectangle | ● | ||||
Gesture lifecycle guarantees (Esc cancel, atomic commit, snap lines)editor-tools.gesture-lifecycle | ◍ | ● | ● | ||
Gradient swatch + gradient feather drag toolseditor-tools.gradient-tools | ● | ||||
Ruler-guide drag (create/move/delete)editor-tools.guides.drag | ● | ||||
Duplicate-drag (Alt)editor-tools.move.duplicate-drag | ◍ | ● | |||
Move / drag frames (Shift dominant-axis, snap, multi-select rigid)editor-tools.move.translate | ◍ | ◍ | ● | ||
Pan (hand tool, Space spring-load)editor-tools.nav.pan | ● | ◍ | |||
Zoom (tool click/Alt-click, commands, fit)editor-tools.nav.zoom | ● | ● | |||
paged.object.* — the structural object command layer (Arrange x4 + Group / Ungroup / Select parent)editor-tools.object-commands | ◍ | ◍ | |||
Canvas overlays (selection chrome, handles, marquee, tool preview, snap lines, caret, page decorations, rulers, hit marker)editor-tools.overlays | ● | ● | |||
Page tool (select, Alt-insert, drag-resize, delete)editor-tools.page-tool | ● | ||||
Direct path editing (anchors, handles, scissors)editor-tools.path.direct-edit | ◍ | ● | |||
Resize via 8 handles (Shift aspect, Alt from-centre)editor-tools.resize.handles | ◍ | ● | |||
Rotate (Shift snaps to 15°)editor-tools.rotate | ◍ | ● | |||
Matrix scale (Cmd-handle, multi-select)editor-tools.scale | ◍ | ● | |||
Click select + marquee (intersect, Shift add, Cmd toggle)editor-tools.select.click-marquee | ◍ | ● | |||
Group descent (double-click enter, Escape exit)editor-tools.select.group-descent | ● | ||||
Shear (Shift snaps shear angle to 15°)editor-tools.shear | ◍ | ● | |||
Registered stub tools (gap, free-transform, content collector/placer, note)editor-tools.stub-tools | · | ||||
Text tool caret + typingeditor-tools.text.caret-typing | ● | ||||
Drag-and-drop texteditor-tools.text.drag-drop | · | ||||
Text threading via portseditor-tools.text.threading-ports | ◐ |
Effects & transparency 11 features · 91% green
| Feature | Parser | Renderer | Mutation | Canvas | Shell | Panel | Gesture | Draw | plugin.publish |
|---|---|---|---|---|---|---|---|---|---|
Bevel & embosseffects-transparency.bevel-emboss | ● | ● | ● | · | |||||
Blend modes (26 modes incl. multiply/screen/overlay)effects-transparency.blend-modes | ● | ● | ● | · | |||||
Drop shadow (soft blur, offset, color, opacity)effects-transparency.drop-shadow | ● | ● | ● | ● | |||||
Feather (basic + directional)effects-transparency.feather | ● | ● | ● | ◍ | |||||
Outer / inner gloweffects-transparency.glows | ● | ● | ● | ◍ | |||||
Gradient feathereffects-transparency.gradient-feather | ● | ● | ● | ● | |||||
Inner shadoweffects-transparency.inner-shadow | ● | ● | ● | ◍ | |||||
Object opacityeffects-transparency.opacity | ● | ● | ● | ● | ● | ||||
Opacity masks — a real per-pixel soft mask (luminosity or alpha, invertible)effects-transparency.opacity-mask | ◍ | ◍ | ◍ | ◍ | ◐ | ||||
Satineffects-transparency.satin | ● | ◐ | ● | ||||||
Transparency groups (nested blend group buffering)effects-transparency.transparency-groups | ● | ◐ |
Foundations 3 features · 33% green
| Feature | Parser | Canvas | SDK | Canvas | Shell |
|---|---|---|---|---|---|
IDML container open (ZIP + mimetype validation)foundations.container.open | ● | ◍ | ● | ● | |
designmap parse (spreads, stories, resources wiring)foundations.designmap.structure | ● | ||||
DOMVersion capture (version-agnostic parser)foundations.domversion-capture | ● |
Frames & paths 27 features · 59% green
| Feature | Parser | Renderer | Mutation | Canvas | Canvas | Shell | Panel | Gesture | Draw | plugin.publish |
|---|---|---|---|---|---|---|---|---|---|---|
Appearance stack bakes to a group of stacked page items (B-24)frames-paths.appearance-bake | ◍ | ◍ | ◍ | |||||||
GraphicLine arrowheads (triangle/circle/bar)frames-paths.arrowheads | ● | ● | ||||||||
Decorative corner options (Rounded/Inverse/Bevel/Inset/Fancy)frames-paths.corner-options | ● | ● | ● | |||||||
Corner options on polygons (B-23) — apply arms, renderer, IDML write pathframes-paths.corner-options-polygon | ◍ | ◐ | ◍ | ◍ | ||||||
Delete frameframes-paths.frame.delete | ● | ● | ||||||||
Insert frame (rectangle) by boundsframes-paths.frame.insert | ● | ● | ● | |||||||
moveFrame wire opframes-paths.frame.move-op | ◍ | |||||||||
Groups (nesting + group transparency/blending + create/dissolve ops)frames-paths.groups | ● | ● | ● | ◍ | ● | |||||
Insert line (two-anchor open GraphicLine)frames-paths.line.insert | ● | ● | ● | |||||||
Nested page items (paste-into) — parse, render clip, pasteInto/releaseFromframes-paths.nested-content | ◍ | ◍ | ◍ | ◍ | ||||||
Page-item kinds (TextFrame, Rectangle, Oval, Polygon, GraphicLine, Group)frames-paths.page-item-kinds | ● | ● | ||||||||
Path clipping/masking (non-zero winding)frames-paths.path-clipping | ● | |||||||||
closePath — close an open subpath (the faithful inverse of pathOpenAt)frames-paths.path.close | ◍ | ◍ | ◍ | |||||||
Insert freehand path (optional smoothing)frames-paths.path.insert | ● | ● | ◐ | |||||||
joinPaths — weld two open paths into one elementframes-paths.path.join | ◍ | ◍ | ◍ | |||||||
Pathfinder boolean (union/intersect/subtract/exclude)frames-paths.pathfinder-boolean | ● | ● | ● | |||||||
Divide / Trim / Merge / Crop / Outline / Minus Backframes-paths.pathfinder-verbs | ◍ | ◍ | ◍ | |||||||
Planar arrangement — faces of overlapping paths (B-22)frames-paths.planar-arrangement | ◍ | ◍ | ||||||||
Ellipse / polygon shape toolsframes-paths.shape-tools | ● | ◍ | ● | |||||||
Stroke alignment (center/inside/outside)frames-paths.stroke-alignment | ● | ◐ | ● | ◐ | ||||||
Dashed + dotted strokes (dash arrays, 12 dotted variants)frames-paths.stroke-dashed | ● | ● | ● | ● | ||||||
Stroke gap color/tintframes-paths.stroke-gap-color | ● | ● | ● | ● | ||||||
Stroke overprintframes-paths.stroke-overprint | ● | ● | ● | |||||||
Striped / wavy strokesframes-paths.stroke-striped-wavy | ● | ● | ● | |||||||
Variable-width (tapered / pressure) strokes — per-anchor width outlineframes-paths.stroke-variable-width | ● | ◐ | ||||||||
Stroke weight + line caps + joinsframes-paths.stroke-weight-caps-joins | ● | ● | ● | ● | ||||||
Text on a pathframes-paths.text-on-path | ● | ● | ◍ | ◍ | ◍ |
Geometry & coordinates 6 features · 100% green
| Feature | Parser | Renderer | Mutation | Canvas | Shell | Panel | Gesture |
|---|---|---|---|---|---|---|---|
Bezier path geometry (PathPointType anchors + handles)geometry-coordinates.bezier-path-geometry | ● | ● | ● | ● | |||
Compound paths (multi-contour subpath boundaries)geometry-coordinates.compound-subpaths | ● | ● | |||||
GeometricBounds (y1 x1 y2 x2, pt)geometry-coordinates.geometric-bounds | ● | ● | ● | ◍ | ● | ||
Image content transform (inner image within frame)geometry-coordinates.image-content-transform | ● | ● | ● | ● | ● | ||
ItemTransform (2×3 affine per frame/page)geometry-coordinates.item-transform | ● | ● | ● | ● | |||
Path topology ops (insert/remove anchor, open-at, curve type)geometry-coordinates.path-topology-ops | ● | ● | ● |
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 | ● |
Images & graphics 7 features · 29% green
| Feature | Parser | Renderer | Mutation | Shell | Panel | Script |
|---|---|---|---|---|---|---|
Image clipping paths (from image metadata)images-graphics.clipping-paths | ● | ● | ||||
CMYK JPEG with embedded ICC profileimages-graphics.cmyk-jpeg-icc | ● | ● | ||||
EPS / PostScript placements (recognised + honestly rendered; no decode)images-graphics.eps-decode | ● | ● | ||||
Frame fitting (fill/fit/content + crops)images-graphics.frame-fitting | ● | ● | ● | ● | ||
Image clipped to frame pathimages-graphics.image-clipping | ● | |||||
Missing-image placeholder (grey + diagonal X) + diagnosticimages-graphics.missing-image-placeholder | ● | |||||
Placed images (URI links via AssetResolver + inline base64)images-graphics.placed-images | ● | ● | ● | ● |
Interactive & dynamic 4 features · 0% green
| Feature | Parser |
|---|---|
Animation + timing settingsinteractive-dynamic.animation | · |
Button behaviors (goto-page/state, show-hide, forms, zoom)interactive-dynamic.behaviors | · |
Buttons (states Up/RollOver/Down)interactive-dynamic.buttons | · |
Sound & movie elementsinteractive-dynamic.media | · |
Layers 4 features · 75% green
| Feature | Parser | Renderer | Mutation | Canvas | Canvas | Shell | Panel | Script | plugin.publish |
|---|---|---|---|---|---|---|---|---|---|
Layer model (visibility, lock, printable, z-order)layers.model | ◍ | ◍ | ● | ||||||
Nested layer groups (folders, inherited hide/lock)layers.nested-groups | ● | ● | ◍ | ◍ | |||||
Layer ops (insert/remove/move/rename + flags)layers.ops | ● | ● | ● | ● | |||||
Cross-shape z-sort (layer + XML order) + Arrange (reorderElement)layers.z-ordering | ● | ● | ◍ | ◍ | ◍ | ● |
Layout model 7 features · 86% green
| Feature | Parser | Renderer | Mutation | Canvas | Canvas | Shell | Panel | Gesture |
|---|---|---|---|---|---|---|---|---|
FirstBaselineOffset modeslayout-model.first-baseline-offset | ● | ● | ● | |||||
TextFrame AutoSizing (width/height growth)layout-model.frame-autosizing | ● | ● | ● | |||||
Ruler guides (parse, snap targets, editing)layout-model.guides | ● | ◐ | ● | ● | ● | · | ||
Spread / MasterSpread ItemTransformlayout-model.spread-item-transform | ● | ● | ||||||
Spreads & pages (geometry, stacking, page items)layout-model.spreads-pages | ● | ● | ● | ● | ● | ◍ | ||
Text-frame threading chain (NextTextFrame story distribution)layout-model.text-frame-chain | ● | ● | ● | ● | ◐ | |||
Frame vertical justification (top/center/bottom/justify)layout-model.vertical-justification | ● | ● | ● |
Master spreads & overrides 4 features · 75% green
| Feature | Parser | Renderer | Mutation | Panel | plugin.publish |
|---|---|---|---|---|---|
Apply master to page (mutation)master-spreads-overrides.apply-master-op | ● | ||||
Master spread stamping (applied master, MasterPageTransform)master-spreads-overrides.master-stamping | ● | ● | ◍ | ◍ | |
Local override suppression of master itemsmaster-spreads-overrides.override-resolution | ● | ● | |||
ShowMasterItems suppressionmaster-spreads-overrides.show-master-items | ● | ● |
Package anatomy 9 features · 38% green
| Feature | Parser | Renderer | Mutation | Canvas | SDK | Canvas | Shell | API |
|---|---|---|---|---|---|---|---|---|
Composition part (paged/core/composition/document.pgd — arrangement)package-anatomy.composition-part | ◐ | ◍ | ||||||
Full package IMPORT — IDML adapter (designmap, spreads, stories, resources)package-anatomy.core-import | ● | ● | ◍ | ● | ● | |||
Graphic part (colors, swatches, gradients, inks, stroke styles)package-anatomy.graphic-part | ● | |||||||
Inline base64 image bytes (<Image><Properties><Contents>)package-anatomy.inline-image-contents | ● | ● | ||||||
Native model part (paged/core/model/document.pgm — the self-owning document)package-anatomy.native-model-part | ◍ | ◍ | · | |||||
The .paged container (ZIP-as-valid-IDML + plugin namespaces + manifest.json)package-anatomy.paged-container | ◍ | ● | · | |||||
host.parts plugin persistence door (namespaced container parts that travel with the file)package-anatomy.paged-parts-door | ◍ | · | ◐ | |||||
Story parts (ParagraphStyleRange / CharacterStyleRange trees)package-anatomy.story-parts | ● | |||||||
Tagged XML backing store (XMLElement/XMLStory/Mapping)package-anatomy.tagged-xml-backing-store | · |
Parser internals 2 features · 0% green
| Feature | Parser |
|---|---|
Streaming XML parse (quick_xml event-driven)parser-internals.streaming-xml | ◍ |
ZIP entry streaming (per-part decompression)parser-internals.zip-entry-streaming | ◍ |
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 | ● | ● |
Round-tripping 5 features · 80% green
| Feature | Renderer | Mutation | Canvas | Canvas | Shell | Gesture | Script |
|---|---|---|---|---|---|---|---|
Batch operations (atomic, rollback-on-error, $created sentinel)round-tripping.batch-atomicity | ● | ◍ | |||||
Gesture transaction channel (begin/update/commit/cancel)round-tripping.gesture-transactions | ◍ | ◍ | ● | ||||
Re-serialize a PARSED document to IDML (save back)round-tripping.idml-reserialization | ◐ | ● | ● | ||||
Native document round-trip (self-owning .paged model, no source parse)round-tripping.native-reserialization | ◍ | ◍ | |||||
Undo / redo (invertible operation log)round-tripping.undo-redo | ● | ◍ | ● | ● |
Scripting 17 features · 100% green
| Feature | Parser | Canvas | Shell | Panel | Script | Style |
|---|---|---|---|---|---|---|
Insert fns return the created id + auto-selectscripting.author-returns-id | ● | |||||
Collection reads (swatches, styles, links, conditions, gradients, colorGroups, generic collection())scripting.collections | ● | |||||
console.log/warn/error/info capturescripting.console | ● | |||||
Docs scripting playground — seeded starter documents + per-function examplesscripting.docs-playground-seeds | ● | ◍ | ◍ | |||
Full mutation surface wired into paged.* (delete/duplicate/dissolve, tables, paths, style CRUD, sections, conditions, layers, guides, selection setters)scripting.full-mutation-surface | ● | |||||
Headless engine session (paged-run NDJSON CLI)scripting.headless-run | ● | |||||
paged.inspect / paged.tree / paged.stories / documentMeta / selectionscripting.inspection | ● | |||||
Script ↔ wire mutation parity (same Operation channel)scripting.mutation-parity | ◍ | ● | ||||
paged.pages() — page-id enumeration for authoringscripting.page-enumeration | ● | |||||
paged.set / paged.get / paged.frame proxy (all property paths)scripting.property-readwrite | ● | |||||
REPL panel (inspect/set/undo/redo command line)scripting.repl | ● | ● | ||||
Script runtime budgets (loop/recursion limits, clean errors)scripting.runtime-budgets | ◍ | ● | ||||
Script editor panel (multi-line JS, Cmd+Enter, output log)scripting.script-editor | ● | ● | ● | |||
paged.insertFrame / insertPage / placeImage / applyStyle / createGroupscripting.structural-authoring | ● | |||||
paged.insertText / deleteRange / insertTextFrame (text authoring)scripting.text-authoring | ● | |||||
paged.undo / paged.redoscripting.undo-redo | ● | |||||
Script mutations repaint the canvas (ClearAll + markDirty on scriptResult)scripting.visible-results | ● | ◍ |
Sections, numbering & variables 4 features · 50% green
| Feature | Parser | Renderer | Mutation | Shell | Panel |
|---|---|---|---|---|---|
Page-number marker resolution (current/next/previous)sections-numbering-variables.page-number-resolution | ● | ● | |||
Section CRUD (add section, ranges)sections-numbering-variables.section-ops | ● | ● | |||
Sections (prefix, label styles, start numbers)sections-numbering-variables.sections | ● | ● | |||
Text variables (definition + instance substitution)sections-numbering-variables.text-variables | ● | ◐ |
Server 9 features · 0% green
| Feature | API |
|---|---|
Account managementserver.accounts | ● |
Authentication (better-auth)server.auth | ● |
Document automation API (brief → agent job → engine → export)server.automation | ◐ |
Billing (Stripe)server.billing | ● |
Data-merge apply bridge (PaginatedFlow → Boa script)server.data-merge | ◐ |
Fonts proxyserver.fonts-proxy | ● |
Image searchserver.image-search | ● |
OpenAPI spec + generated client (drift-gated)server.openapi | ● |
Document storage (local:// offline default + remote drivers)server.storage | ● |
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 | ● |
Stories & text 16 features · 85% green
| Feature | Parser | Renderer | Mutation | Canvas | Canvas | Shell | Panel | Gesture |
|---|---|---|---|---|---|---|---|---|
Text caret + range selection (geometry, content selection)stories-text.caret-selection | ◍ | ◍ | ◐ | |||||
Drag-and-drop textstories-text.drag-drop-text | · | |||||||
Endnotesstories-text.endnotes | · | |||||||
Insert field (page-number marker etc.) at offsetstories-text.fields.insert | ● | ◍ | ||||||
Footnote bodiesstories-text.footnotes | ● | ◐ | ||||||
Nested character styles (per-delimiter run restyling)stories-text.nested-styles | ● | ◍ | ||||||
Editorial notes (Note element)stories-text.notes | ◐ | |||||||
Overset handling (last-frame overflow clipped + reported)stories-text.overset | ● | ● | ● | ◐ | ||||
Auto page-number markers (current/next page)stories-text.page-number-markers | ● | ● | ||||||
Story model (paragraph/character run trees)stories-text.story-model | ● | ● | ||||||
Apply style attributes to a text range (applyStyle op)stories-text.style-apply-range | ● | ◍ | ● | |||||
Text wrap (bounding box / contour / jump modes + offsets)stories-text.text-wrap | ● | ● | ● | ● | ||||
Delete story range (Backspace/Delete + range)stories-text.text.delete | ● | ● | ● | |||||
Insert text at story offsetstories-text.text.insert | ● | ● | ◍ | ◐ | ||||
Tracked changes (insertions/deletions, author/date)stories-text.tracked-changes | · |
Styles 13 features · 69% green
| Feature | Parser | Renderer | Mutation | Canvas | Canvas | Shell | Panel | Script |
|---|---|---|---|---|---|---|---|---|
Based-on style inheritance chainsstyles.based-on-chain | ● | ● | ||||||
Bullets & numbering (lists + numbering expressions)styles.bullets-numbering | ● | ● | ● | ◐ | ◐ | |||
Style cascade (direct > character style > paragraph style)styles.cascade | ● | ● | ||||||
Cell styles (create/rename/delete + apply)styles.cell.crud | ● | ● | ● | ◍ | ◐ | |||
Character styles (create/rename/delete + apply)styles.character.crud | ● | ● | ● | ● | ● | ● | ||
Next-style chaining + override indicators + redefinestyles.next-style-overrides | ● | ◐ | · | |||||
Object styles (create/rename/delete + apply)styles.object.crud | ● | ● | ● | ● | ● | ● | ||
Paragraph border (per-corner radius + offsets)styles.paragraph-border | ● | ● | ||||||
Paragraph rules above/belowstyles.paragraph-rules | ● | ● | ● | |||||
Paragraph shading (color/width/offset/corners)styles.paragraph-shading | ● | ● | ||||||
Paragraph styles (create/rename/delete + apply)styles.paragraph.crud | ● | ● | ● | ● | ● | ● | ||
Edit a style definition property (setStyleProperty)styles.set-style-property | ● | ● | ||||||
Table styles (create/rename/delete + apply)styles.table.crud | ● | ● | ● | ◍ | ◐ |
Tables 12 features · 25% green
| Feature | Parser | Renderer | Mutation | Canvas | Shell | Panel |
|---|---|---|---|---|---|---|
Alternating row/column fillstables.alternating-fills | ● | ● | ||||
Table borders + row/column dividerstables.borders-strokes | ● | ● | ||||
Per-cell text composition (cell as mini-frame)tables.cell-composition | ● | ● | ||||
Cell diagonal linestables.cell-diagonals | ● | ● | ||||
Cell rotationtables.cell-rotation | ● | ● | ||||
Cell vertical justificationtables.cell-vertical-justification | ● | ● | ||||
Repeating header/footer rows across chain breakstables.header-footer-repeat | ● | ● | ◍ | ◍ | ||
Table model (rows, columns, cells)tables.model | ● | ● | ◐ | ◐ | ◐ | |
Tables inside cellstables.nested-tables | ● | ● | ||||
Row height constraints + column widthstables.row-col-sizing | ● | ● | ||||
Row/column spans (cell merges)tables.spans | ● | ● | ◍ | ◍ | ||
Table/cell style cascade (region defaults)tables.style-cascade | ● | ● |
Tagged XML 1 features · 0% green
| Feature | Parser |
|---|---|
Tagged XML structure (XMLElement/XMLStory/Mapping)tagged-xml.structure | · |
Test corpus 4 features · 50% green
| Feature | Canvas | SDK | Canvas |
|---|---|---|---|
Wire-op capability matrix (live-probed supported/unsupported)test-corpus.capability-matrix | ● | ◍ | |
Corpus conformance harness (parse/render levels vs core.pin)test-corpus.conformance-harness | ◍ | ||
Fidelity gate (ΔE2000 + SSIM + glyph misplacement vs InDesign PDFs)test-corpus.fidelity-gate | ◍ | ✗ | |
Deterministic generated fixtures (13 feature-mapped IDMLs)test-corpus.generated-fixtures | ● |
The renderer 23 features · 95% green
| Feature | Renderer | Canvas | SDK | Canvas | Shell | Panel | Gesture | Script |
|---|---|---|---|---|---|---|---|---|
Typed collections read surface (21 collections)the-renderer.collections-read | ◍ | ● | ||||||
CPU backend (tiny-skia, full feature coverage)the-renderer.cpu-backend | ● | |||||||
Scene-graph introspection (tree + property descriptors)the-renderer.devtools-introspection | ● | |||||||
Versioned display list IR (41 command kinds, path interning)the-renderer.display-list | ● | ● | ||||||
Export diagnostics (preflight findings)the-renderer.export-diagnostics | ● | ◐ | ◐ | |||||
Font registration (family/style → bytes, persists across loads)the-renderer.font-registry | ● | ● | ◐ | |||||
WebGPU backend (Vello)the-renderer.gpu-backend | ◐ | ● | ◍ | |||||
Hit testing (oriented containment, layer-aware) + marqueethe-renderer.hit-testing | ● | ◍ | ● | |||||
Missing-asset degraded render (fallback font + placed-link placeholder)the-renderer.missing-asset-fallback | ◐ | ◐ | ||||||
OffscreenCanvas worker rendering (COOP/COEP + SAB)the-renderer.offscreen-worker | ● | ● | ||||||
Package / collect for output (links + fonts + report) — IN SCOPE, not builtthe-renderer.package-collect | · | · | ||||||
PDF export (PDF 1.7 + PDF/X-4, deterministic)the-renderer.pdf-export | ● | ◍ | ◍ | ◐ | ||||
Export marks + bleed (crop/registration/color bars/page info)the-renderer.pdf-export-marks | ● | ● | ◍ | |||||
Export font subsetting + embedding (fsType policy)the-renderer.pdf-font-embedding | ● | |||||||
Export image downsampling + JPEG re-encodethe-renderer.pdf-image-downsampling | ● | |||||||
Render pipeline (parse → scene → text → compose → raster)the-renderer.pipeline | ● | ● | ● | |||||
Element properties read (authored/computed/source)the-renderer.properties-read | ● | ● | ● | |||||
GPU scene cache (LRU, invalidation hints)the-renderer.scene-cache | ● | |||||||
Display-list structural digest (same-code-same-scene keystone)the-renderer.scene-digest | ● | ◍ | ||||||
Snap engine (page edges + sibling targets, 4 px tolerance)the-renderer.snapping | ◍ | ● | ● | |||||
Page PNG snapshots (dpi-configurable)the-renderer.snapshots | ● | ● | ● | |||||
Viewer session — camera present, page layout, events (the public SDK)the-renderer.viewer-session | ● | |||||||
@paged-media/idml-viewer — TS viewer (camera, pages, input lanes, events)the-renderer.viewer-wrapper | ● |
Typography 22 features · 64% green
| Feature | Parser | Renderer | Mutation | Shell | Panel |
|---|---|---|---|---|---|
Baseline shifttypography.baseline-shift | ● | ● | ● | ● | |
Bidirectional text reorderingtypography.bidi | ● | ||||
Capitalization (AllCaps/SmallCaps/CapToSmallCap)typography.capitalization | ● | ● | ● | ◐ | |
CJK vertical writingtypography.cjk-vertical-writing | ● | ◍ | |||
Drop caps (characters/lines + detail scaling)typography.drop-caps | ● | ● | ● | ||
Font selection + fallback (AppliedFont/FontStyle/PointSize)typography.font-selection | ● | ● | ● | ◐ | |
Hyphenation (TeX patterns; Proximity licensed)typography.hyphenation | ● | ● | ● | ||
Hyphenation zonetypography.hyphenation-zone | ● | ● | |||
Word/letter spacing + glyph scaling (min/desired/max)typography.justification-spacing | ● | ● | |||
Kenten emphasis markstypography.kenten | ● | ◐ | |||
Kinsoku CJK line-break rulestypography.kinsoku | ● | ◐ | |||
Knuth–Plass line breaking + justification modestypography.knuth-plass | ● | ● | |||
Leading (explicit pt / auto)typography.leading | ● | ● | ● | ● | |
Ligatures + OpenType feature togglestypography.ligatures-opentype | ● | ● | ● | ◐ | |
Mojikumi CJK spacingtypography.mojikumi | ● | ◐ | |||
Position (superscript/subscript)typography.position-super-subscript | ● | ● | ● | ● | |
Ruby annotationstypography.ruby | ● | ◐ | |||
HorizontalScale + Skew (false italic)typography.scale-skew | ● | ● | ● | ● | |
Tab stops (L/C/R/decimal + leaders)typography.tab-stops | ● | ● | ● | ◍ | |
Tracking + kerning (metrics; optical falls back to metrics)typography.tracking-kerning | ● | ◐ | ● | ◐ | |
Underline / strikethrough decorationstypography.underline-strikethru | ● | ● | ● | ● | |
VerticalScaletypography.vertical-scale | ● | ● | ● | ● |
Capability state
The live, evidence-backed status of every paged capability — what is shipped, at which layer, and whether tests verify it. Generated directly from the capability registry.
Conformance
How far the corpus harness verifies each IDML feature — parsed, rendered, mutatable, round-trips — with claimed versus verified shown side by side. Generated live from the registry.