paged.draw — vector
The vector drawing plugin — pen and path tools, pathfinder booleans, live corners, stroke/fill, and SVG import/export, rendered on-canvas through the engine's vector scene layer.
In short paged.draw brings Illustrator-class vector editing into paged — a
pen tool with anchor editing, curvature/pencil tools, a shape builder, pathfinder
booleans, live corners, and SVG round-trip — all rendered on-canvas via the
engine's vector scene-layer surface.
What it does
- Pen / anchor editing (add/delete/convert), curvature and pencil tools, shape builder, select-same.
- Stroke / fill panels, dash presets, path ops, live corners, gradient annotation.
- A
vectorGraphicedit context (double-click into a focused anchor toolset). - SVG import + export (the interchange round-trip).
- Direct Selection over anchors, handles and segments; the pen continues, closes and joins existing paths; knife and scissors; reflect and Transform Again; point snapping through the engine; Create Outlines from text.
- Paths, appearance stacks, graphic styles, symbols and generator recipes as typed objects (the object model, partly built).
How it's built
A host-agnostic core (draw-geometry pure math, draw-tools state machines)
plus a draw-bundle (manifest + activate + React panel) — the
incubate-then-extract pattern. Tested as unit suites and an end-to-end editor
journey.
Capability state
● shipped & verified · ○ shipped, re-test pending · ◍ shipped, untested · ◐ partial · ✗ failing · · planned
Plugin · draw 55 features · 98% green
| Feature | Renderer | Mutation | Canvas | Gesture | 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 | ● | |||||
Create Outlines — a text frame's glyphs as pathsplugin-draw.create-outlines | ◍ | ◍ | ||||
Direct Selection machine — drag anchors, handles and segments; multi-anchor select, marquee, nudgeplugin-draw.direct-selection | ● | ● | ||||
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 | ● | |||||
Property tests for the draw-geometry kernelplugin-draw.geometry-properties | ● | |||||
RDP polyline simplification + perpendicular segment distanceplugin-draw.geometry-rdp | ● | |||||
On-canvas gradient stops on the annotator lineplugin-draw.gradient-stops | ● | |||||
Graphic styles — a named, LINKED complete appearance with override DETECTIONplugin-draw.graphic-styles | ● | ● | ||||
Headless conformance corpus over published canvas-wasmplugin-draw.headless-conformance | ● | |||||
Illustrator oracle lane — path ops recorded in Illustrator 30.1.0, replayed against the engineplugin-draw.illustrator-oracle | ● | |||||
Image Trace v0 — raster to editable vector over visioncortexplugin-draw.image-trace | ◐ | |||||
InDesign round-trip lane — 27 IDML cases read by InDesign 20.0.1plugin-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 primitiveplugin-draw.measure-overlay-text | ● | ◐ | ||||
Object model — paths, appearance stacks, graphic styles, symbols and recipes addressable through host.objectsplugin-draw.objects | ● | |||||
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 | ● | |||||
Knife and Scissors at any point on a pathplugin-draw.path-cutting | ● | |||||
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 v2 — continue, close and join existing paths; add / delete on the selected pathplugin-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 outlineStrokeVariableplugin-draw.pencil-pressure | ● | |||||
Work budgets for every suspected hot pathplugin-draw.perf-budgets | ● | |||||
Phase 4c pro path toolset — curvature/pencil/measure machines + simplify/join/average/offset/outline/pathfinder/gradient/arrowheads commandsplugin-draw.pro-path-toolset | ◐ | ● | ||||
Reflect (horizontal, vertical, a typed axis, a copy) and Transform Againplugin-draw.reflect-transform | ● | |||||
Repeats v1 — radial / grid / mirror, and the repo's first ONE-undo buildplugin-draw.repeats | ● | ◐ | ||||
Reverse Path Directionplugin-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 themplugin-draw.shape-builder | ● | ● | ||||
Point snapping — page edges, centre lines, corners, own anchorsplugin-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 itplugin-draw.symbols | ◐ | |||||
Tool options and the Path Options panelplugin-draw.tool-options | ● | ● | ||||
Width, blend, lasso-select, parent-group cycling, parametric generatorsplugin-draw.tool-wave-2 | ● | ● | ||||
Type on a path — attach an existing story to a path, detach itplugin-draw.type-on-path | ● | |||||
One batch per flow — created ids off the reply, one shared link indexplugin-draw.write-batching | ● |
Recent activity
- 2026-10-18README: moved to paged-media/paged (modules/draw) [skip ci]db15615
- 2026-10-16Merge pull request #6 from paged-media/docs/status-refreshb598a4f
- 2026-10-15docs: architecture names the panels draw contributes now98fb37d
- 2026-10-15docs: status read from the code at 0.1.0-canary.200811dad
- 2026-10-14Merge pull request #5 from paged-media/fix/nested-group-transformabb03e2
- 2026-10-14release: 0.1.0-canary.20 — tools paint the graphic default, a nested group reflects in its parent's frame, the link index follows onDidChange938e74d
- 2026-10-14docs: a nested group's reflect, and the test countse20af18
- 2026-10-14link index: follow every change through the facade, none off the raw client741ce22
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.
paged.web — HTML/CSS
The web-content plugin — author HTML/CSS as a content type, with a sandboxed preview and on-canvas rendering via a Blitz/WASM lowering to the engine's scene layer.