# Renderer functional matrix

This document is generated from `scripts/renderer-functional-matrix.cjs`.
Run `npm run renderer:matrix:write` after changing the renderer contract or matrix data.
The CI audit fails when an operation, capability, coordinate frame, or this document drifts.

## Legend

- `supported`: implemented directly by the adapter.
- `conditional`: implemented, with behavior depending on format, mounted state, or runtime context.
- `delegated`: intentionally owned by the shell/runtime bridge.
- `no-op`: contract method exists but currently performs no renderer action.
- `unsupported`: optional method or optional service is not exposed by that engine.
- Frames use `coordinate-space/unit`; `in` and `out` describe public DTO boundaries.

## Summary

- Operations: 146
- Fabric: 89 supported, 0 conditional, 4 delegated, 0 no-op, 53 unsupported.
- Babylon: 122 supported, 2 conditional, 0 delegated, 1 no-op, 21 unsupported.

## Matrix

| Service | Operation | Kind | Capability | Fabric | Babylon | Fabric frame(s) | Babylon frame(s) | Notes |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| lifecycle | mount | command | - | delegated | supported | - | - | Fabric: The Fabric instance is mounted by the shell before adapter creation. |
| lifecycle | unmount | command | - | delegated | supported | - | - | Fabric: The Fabric instance lifecycle remains owned by the shell. |
| lifecycle | activateView | command | - | delegated | supported | - | - | Fabric: Delegated to the Fabric runtime bridge. |
| lifecycle | deactivateView | command | - | delegated | no-op | - | - | Fabric: Delegated to the Fabric runtime bridge. Babylon: The mounted Babylon scene is retained between view switches. |
| lifecycle | loadView | command | - | supported | supported | - | - | - |
| lifecycle | exportView | query | - | supported | supported | - | - | - |
| events | subscribe | subscription | - | supported | supported | - | - | - |
| history | getInfo | query | history | supported | supported | - | - | - |
| history | exportTrack | query | history | supported | supported | - | - | - |
| history | commit | mutation | history | supported | supported | - | - | - |
| history | importTrack | mutation | history | supported | supported | - | - | - |
| history | undo | mutation | history | supported | supported | - | - | - |
| history | redo | mutation | history | supported | supported | - | - | - |
| history | reset | mutation | history | supported | supported | - | - | - |
| history | goTo | mutation | history | supported | supported | - | - | - |
| scene | getGraph | query | - | supported | supported | - | - | - |
| objects | list | query | - | supported | supported | - | - | - |
| objects | get | query | - | supported | supported | - | - | - |
| objects | addImage | mutation | addImage | supported | supported | - | - | - |
| objects | addText | mutation | addText | supported | supported | - | - | - |
| objects | addDesign | mutation | addDesign | supported | supported | - | - | - |
| objects | addElement | mutation | addElement | supported | supported | - | - | - |
| objects | removeElement | mutation | removeObject | supported | supported | - | - | - |
| objects | remove | mutation | removeObject | supported | supported | - | - | - |
| objects | update | mutation | objects | supported | supported | - | - | - |
| objects | reorder | mutation | reorderObjects | supported | supported | - | - | - |
| objects | duplicate | mutation | duplicateObject | supported | supported | - | - | - |
| objects | setVisible | mutation | visibility | supported | supported | - | - | - |
| objects | setLocked | mutation | locking | supported | supported | - | - | - |
| objects | bringForward | mutation | zOrder | supported | supported | - | - | - |
| objects | sendBackward | mutation | zOrder | supported | supported | - | - | - |
| objects | getTransform | query | objectTransform | supported | supported | out: canvas/canvas-px | out: texture/texture-px, surface-tangent/world-unit, world/world-unit | - |
| objects | updateTransform | mutation | objectTransform | supported | supported | in: canvas/canvas-px; out: canvas/canvas-px | in: texture/texture-px, surface-tangent/world-unit, world/world-unit; out: texture/texture-px, surface-tangent/world-unit, world/world-unit | - |
| objects | getBounds | query | - | supported | supported | out: canvas/canvas-px | out: texture/texture-px, surface-tangent/world-unit, world/world-unit | - |
| objects | measure | query | - | supported | supported | out: canvas/canvas-px | out: texture/texture-px, surface-tangent/world-unit, world/world-unit | Fabric: Also returns relative percentages and calibrated physical units when available. Babylon: Also returns relative percentages and calibrated physical units when available. |
| objects | preview | command | previewObject | supported | supported | - | - | - |
| objects | clearPreview | command | previewObject | supported | supported | - | - | - |
| selection | list | query | - | supported | supported | - | - | - |
| selection | getAnchorBox | query | - | supported | supported | out: screen/css-px | out: screen/css-px | - |
| selection | select | command | selectObject | supported | supported | - | - | - |
| placement | getStatus | query | - | supported | supported | out: canvas/canvas-px | out: texture/texture-px, surface-tangent/world-unit, world/world-unit | - |
| placement | begin | command | - | supported | supported | in: canvas/canvas-px; out: canvas/canvas-px | in: texture/texture-px, surface-tangent/world-unit, world/world-unit; out: texture/texture-px, surface-tangent/world-unit, world/world-unit | - |
| placement | update | command | - | supported | supported | in: canvas/canvas-px; out: canvas/canvas-px | in: texture/texture-px, surface-tangent/world-unit, world/world-unit; out: texture/texture-px, surface-tangent/world-unit, world/world-unit | - |
| placement | commit | command | - | supported | supported | out: canvas/canvas-px | out: texture/texture-px, surface-tangent/world-unit, world/world-unit | - |
| placement | cancel | command | - | supported | supported | out: canvas/canvas-px | out: texture/texture-px, surface-tangent/world-unit, world/world-unit | - |
| placement | clear | command | - | supported | supported | - | - | Clears only the shared interaction lifecycle; renderer-owned geometry is unchanged. |
| areas | list | query | printAreas | supported | supported | out: canvas/canvas-px | out: texture/texture-px, surface-tangent/world-unit | - |
| areas | get | query | printAreas | supported | supported | out: canvas/canvas-px | out: texture/texture-px, surface-tangent/world-unit | - |
| areas | pickForAdd | command | printAreas | supported | supported | - | - | - |
| areas | cancelPickForAdd | command | printAreas | unsupported | supported | - | - | - |
| areas | create | mutation | printAreas | supported | supported | in: canvas/canvas-px; out: canvas/canvas-px | in: texture/texture-px, surface-tangent/world-unit; out: texture/texture-px, surface-tangent/world-unit | Babylon: The area mode selects texture pixels or surface tangent world units. |
| areas | update | mutation | printAreas | supported | supported | in: canvas/canvas-px; out: canvas/canvas-px | in: texture/texture-px, surface-tangent/world-unit; out: texture/texture-px, surface-tangent/world-unit | Babylon: The area mode selects texture pixels or surface tangent world units. |
| areas | remove | mutation | printAreas | supported | supported | out: canvas/canvas-px | out: texture/texture-px, surface-tangent/world-unit | - |
| areas | select | command | printAreas | supported | supported | - | - | - |
| areas | getActive | query | printAreas | supported | supported | out: canvas/canvas-px | out: texture/texture-px, surface-tangent/world-unit | - |
| areas | focus | command | printAreas | supported | supported | - | - | - |
| areas | getBounds | query | printAreas | supported | supported | out: canvas/canvas-px | out: texture/texture-px, surface-tangent/world-unit | - |
| areas | contains | query | surfaceConstraints | supported | supported | out: canvas/canvas-px | out: texture/texture-px, surface-tangent/world-unit, world/world-unit | - |
| areas | constrain | mutation | surfaceConstraints | supported | supported | out: canvas/canvas-px | out: texture/texture-px, surface-tangent/world-unit, world/world-unit | - |
| areas | moveObject | mutation | surfaceConstraints | supported | supported | in: canvas/canvas-px; out: canvas/canvas-px | in: texture/texture-px, surface-tangent/world-unit, world/world-unit; out: texture/texture-px, surface-tangent/world-unit, world/world-unit | - |
| areas | transformObject | mutation | surfaceConstraints | supported | supported | in: canvas/canvas-px; out: canvas/canvas-px | in: texture/texture-px, surface-tangent/world-unit, world/world-unit; out: texture/texture-px, surface-tangent/world-unit, world/world-unit | - |
| areas | startDrawing | command | printAreas | unsupported | supported | - | - | Fabric: Fabric interactive area drawing is exposed by canvas2d.startAreaDraft. |
| areas | cancelDrawing | command | printAreas | unsupported | supported | - | - | Fabric: Fabric interactive area drawing is exposed by canvas2d.startAreaDraft. |
| areas | startFacePicking | command | printAreas | unsupported | supported | - | - | - |
| areas | cancelFacePicking | command | printAreas | unsupported | supported | - | - | - |
| areas | classifyMesh | query | printAreas | unsupported | supported | - | - | - |
| viewport | zoomIn | command | - | supported | supported | - | - | - |
| viewport | zoomOut | command | - | supported | supported | - | - | - |
| viewport | fit | command | - | supported | supported | - | - | - |
| viewport | resize | command | - | supported | supported | - | - | - |
| viewport | setDocumentSize | command | - | supported | unsupported | - | - | - |
| viewport | getZoom | query | - | supported | unsupported | - | - | - |
| viewport | setZoom | command | - | supported | unsupported | - | - | - |
| viewport | reset | command | - | supported | unsupported | - | - | - |
| viewport | getFrame | query | - | supported | unsupported | out: screen/css-px | - | - |
| viewport | getCamera | query | - | unsupported | supported | - | - | - |
| viewport | setCamera | command | - | unsupported | supported | - | - | - |
| viewport | getCameraLimits | query | - | unsupported | supported | - | - | - |
| viewport | setCameraLimits | command | - | unsupported | supported | - | - | - |
| exports | isFormatAvailable | query | - | supported | supported | - | - | Fabric advertises PNG/JPEG/WebP/SVG/PDF/JSON; Babylon advertises PNG/JSON. |
| exports | canLoadSupport | query | - | supported | supported | - | - | Fabric can lazy-load PDF support; Babylon has no optional export support loader. |
| exports | ensureSupport | command | - | supported | supported | - | - | The result is format-dependent. |
| exports | download | command | download | supported | supported | - | - | - |
| exports | downloadAllViews | command | batchExport | supported | supported | - | - | Each renderer exports every registered view; Babylon renders inactive scenes in an isolated offscreen engine. |
| exports | downloadAllAreas | command | batchExport | supported | supported | - | - | Each renderer exports one target-scoped file per drawing area and groups multiple files in a ZIP by default. |
| exports | downloadAllObjects | command | batchExport | supported | supported | - | - | Each renderer exports one target-scoped file per layer and groups multiple files in a ZIP by default. |
| exports | png | export | exportPng | supported | supported | - | - | - |
| products | list | query | parametricProducts | unsupported | supported | - | - | - |
| products | get | query | parametricProducts | unsupported | supported | - | - | - |
| products | add | mutation | parametricProducts | unsupported | supported | - | - | - |
| products | remove | mutation | parametricProducts | unsupported | supported | - | - | - |
| products | select | command | parametricProducts | unsupported | supported | - | - | - |
| products | update | mutation | parametricProducts | unsupported | supported | - | - | - |
| products | syncCatalog | command | parametricProducts | unsupported | supported | - | - | - |
| products | getParameters | query | parametricProducts | unsupported | supported | - | - | - |
| products | validateParameters | query | parametricProducts | unsupported | supported | - | - | - |
| products | setParameter | mutation | parametricProducts | unsupported | supported | - | - | - |
| products | setParameters | mutation | parametricProducts | unsupported | supported | - | - | - |
| assembly | syncCatalog | command | assembly3d | unsupported | supported | - | - | - |
| assembly | getState | query | assembly3d | unsupported | supported | - | out: world/world-unit | - |
| assembly | configure | mutation | assembly3d | unsupported | supported | - | in: world/world-unit; out: world/world-unit | - |
| assembly | listComponents | query | assembly3d | unsupported | supported | - | out: world/world-unit | - |
| assembly | getComponent | query | assembly3d | unsupported | supported | - | out: world/world-unit | - |
| assembly | previewPlacement | query | assembly3d | unsupported | supported | - | in: world/world-unit; out: world/world-unit | - |
| assembly | place | mutation | assembly3d | unsupported | supported | - | in: world/world-unit; out: world/world-unit | - |
| assembly | autoPlace | mutation | assembly3d | unsupported | supported | - | out: world/world-unit | - |
| assembly | connect | mutation | assembly3d | unsupported | supported | - | in: world/world-unit; out: world/world-unit | - |
| assembly | disconnect | mutation | assembly3d | unsupported | supported | - | out: world/world-unit | - |
| assembly | validate | query | assembly3d | unsupported | supported | - | out: world/world-unit | - |
| assembly | getBom | query | assembly3d | unsupported | supported | - | - | - |
| assembly | getQuote | query | assembly3d | unsupported | supported | - | - | - |
| assembly | export | export | assembly3d | unsupported | supported | - | - | Exports serializable BOM, quote and production payloads without native renderer objects. |
| models | listMeshes | query | meshes | unsupported | supported | - | - | - |
| models | inspectParts | query | meshes | unsupported | supported | - | - | - |
| models | preload | query | meshes | unsupported | supported | - | - | - |
| parts | list | query | parts | unsupported | supported | - | - | - |
| parts | get | query | parts | unsupported | supported | - | - | - |
| parts | select | command | parts | unsupported | supported | - | - | - |
| parts | getSelected | query | parts | unsupported | supported | - | - | - |
| parts | listVariations | query | parts | unsupported | supported | - | - | - |
| parts | getActiveVariation | query | parts | unsupported | supported | - | - | - |
| parts | applyVariation | mutation | parts | unsupported | supported | - | - | - |
| parts | focus | command | parts | unsupported | supported | - | - | - |
| materials | list | query | materials | unsupported | supported | - | - | - |
| materials | select | command | materials | unsupported | supported | - | - | - |
| materials | update | mutation | materials | unsupported | supported | - | - | - |
| surface | pick | query | surfacePicking | unsupported | supported | - | in: screen/css-px, canvas/canvas-px; out: world/world-unit, uv/normalized | - |
| surface | getInteractionDebug | query | surfacePicking | unsupported | supported | - | - | - |
| surface | getLayerRenderingDebug | query | surfacePicking | unsupported | conditional | - | - | Babylon: Diagnostic data is available only for mounted 3D layers. |
| surface | getLayerRenderingDebugReport | query | surfacePicking | unsupported | conditional | - | - | Babylon: Diagnostic data is available only for mounted 3D layers. |
| canvas2d | getSelectedText | query | canvas2d | supported | unsupported | - | - | - |
| canvas2d | updateSelectedText | mutation | canvas2d | supported | unsupported | - | - | - |
| canvas2d | updateSelectedTextCurve | mutation | canvas2d | supported | unsupported | - | - | - |
| canvas2d | setSelectedTextCurved | mutation | canvas2d | supported | unsupported | - | - | - |
| canvas2d | getColorSelection | query | canvas2d | supported | unsupported | - | - | - |
| canvas2d | updateColorSelection | mutation | canvas2d | supported | unsupported | - | - | - |
| canvas2d | addShape | mutation | canvas2d | supported | unsupported | - | - | - |
| canvas2d | createAreaDraft | mutation | canvas2d | supported | unsupported | in: canvas/canvas-px | - | - |
| canvas2d | startAreaDraft | command | canvas2d | supported | unsupported | in: screen/css-px | - | Fabric: Pointer input is converted to canvas coordinates inside the adapter. |
| canvas2d | clear | mutation | canvas2d | supported | unsupported | - | - | - |
| canvas2d | enterTextEditing | command | canvas2d | supported | unsupported | - | - | - |
| canvas2d | getSnapping | query | canvas2d | supported | unsupported | - | - | - |
| canvas2d | setSnapping | command | canvas2d | supported | unsupported | - | - | - |
| canvas2d | subscribeTextEditRequests | subscription | canvas2d | supported | unsupported | - | - | - |
| canvas2d | subscribeInteractions | subscription | canvas2d | supported | unsupported | out: screen/css-px | - | Fabric: Pointer and selection anchor payloads use CSS pixels. |
| canvas2d | attachMagnifier | command | canvas2d | supported | unsupported | in: screen/css-px | - | - |

