Capability ledger
What exists, how it is evidenced, and what is still missing. A transparent map toward richer Visio support.
Implementation means code exists for the described subset. It does not mean a Microsoft Visio comparison passed. Generated fixtures exercise selected cases; the original sample is a demonstration, not a reference document.
How to read this ledger
Initial implementation identifies a working code path that still needs broader validation. Partial means known gaps or approximations. Not implemented means no supported end-to-end capability. Not established means there is insufficient evidence to make the claim.
Snapshot: 3 October 2026. The evidence column identifies source locations and test suites to inspect, not a claim that every listed test has passed in your checkout. Final test results belong to the specific commit being evaluated.
Capability inventory
| Capability | Target | Current state | Evidence to inspect | Still missing |
|---|---|---|---|---|
| VSDX package intake | Safe local OPC/ZIP reading | Initial implementation | Core package.ts; package.test.ts | Broader producer corpus, independent security review |
| Format discovery and pages | Relationships, page order, dimensions | Initial implementation | Core parser.ts; parser.test.ts | More genuine document fixtures |
| Background pages | Resolve and draw inherited background pages | Partial | Core getVisioPageLayers; viewer render-svg.ts | Visio reference comparisons; page-scale interactions |
| Master inheritance | Master and instance cell/section merging | Partial | Core shapes.ts and sheet.ts | Formula-driven resizing, full master semantics |
| Group transforms | Nested coordinate systems, rotation, flips and group display modes | Partial | Core geometry.ts; groupDisplayMode; renderer order tests | Complex group corpus and reference renders |
| Basic paths | Move, line, relative quadratic/cubic segments | Partial | Core geometryPaths in geometry.ts | Comprehensive geometry conformance corpus |
| Ellipses and arcs | Native cached arc and ellipse geometry | Partial | Core geometry.ts; geometry.test.ts | Degenerate cases and reference images |
| NURBS, splines, polylines | All Visio Geometry row forms | Partial: polylines, cached splines and bounded NURBS approximation | Core geometry.ts; literal/spline analytic tests; real upstream NURBS fixture | Periodic/nonclamped forms, expressions, global error bounds and native spline fixtures |
| Line and fill styles | Full styles, patterns, gradients and opacity | Partial: cached caps/dashes, theme linear and saved horizontal gradients | Core style/root and generated horizontal-gradient tests; ten real theme gradients; six real pattern-23 strokes; SVG paint tests | Non-horizontal saved gradients, non-solid theme/custom patterns, native comparison, radial/hatch fills and effects |
| Arrowheads | All connector end variants | Partial: codes 1-5 | Viewer arrowheads.ts; SVG markers | Exact sizing, remaining codes, reference corpus |
| Connectors and glue | Connectivity, routing, dynamic glue | Partial read | Core page connection model; cached geometry | Live routing, glue constraints, editing and reroute |
| ShapeSheet formulas | Recalculation and dependencies | Partial: bounded numeric dependency recalculation for admitted geometry edits | Core formula, edit-recalculate and independent review tests | Scoped package/master/theme graph, dynamic functions and native conformance |
| Text | Runs, margins, orientation, paragraphs and layout | Partial: rich runs, wrapping, spacing, RTL and bullets | Core paragraph model; bounded text/paragraph layout tests | Exact Visio font metrics, tabs, advanced typography and reference comparisons |
| Themes and styles | Theme colors, variants and inheritance | Partial: selected theme records and explicit root-style caches | Core theme resolver; upstream colors/gradients; hash-pinned root-cache regressions | Missing caches, complete theme variants/fonts/effects and native reference equivalence |
| Images and foreign data | Raster, vector, OLE and foreign objects | Partial: embedded PNG/JPEG/GIF; isolated bounded EMF primitives | Core raster/admission tests; inert vector boundary; isolated production worker and shared rendering tests | Most EMF records, EMF+/WMF, SVG/OLE, effects and native Visio fidelity |
| Layers | Visibility, locks, colors and print settings | Partial: shared display controls and bounded visibility resolver | Core visibility tests; shared control/search/selection tests; all-six binding APIs | Layer color overrides, editing, native visibility comparison and print policy |
| Shape data and hyperlinks | Properties, data graphics and links | Partial: cached data and guarded hyperlink metadata | 389 real-corpus data rows; generated URL tests; shared inspector tests | Internal-target navigation, external subaddresses, frames, data graphics and editing |
| Containers and swimlanes | Container relationships and layout | Not implemented | Cached child shapes may still render | Semantic model, memberships, layout and editing |
| Document text search | Find and navigate matching diagram text | Partial: bounded visible-shape literal search across pages | Shared controller/index/UI tests and all-six native binding integration | Per-occurrence highlighting, regex, language collation, shape-data search and native visibility comparison |
| Page navigation | Visio bottom page tabs, Ctrl+Page Up/Down and "Page N of M" status | Initial implementation: shared ooxml-ui tab strip, page rail and status item | ViewerController; viewer-chrome.ts; viewer-chrome.test.ts; editor-chrome.spec.ts | Insert, rename, reorder and delete pages (needs core page commands); genuine multi-page usability corpus |
| Zoom and fit | Visio status-bar zoom slider, Fit to Window (Ctrl+Shift+W), Page Width, 100%, Ctrl+wheel | Initial implementation: shared ooxml-ui zoom slider, View ribbon Zoom group and the floating Pan & Zoom window (page thumbnail, visible-area outline, click or drag to pan, arrow keys, Ctrl+wheel zoom) | viewer-element.ts; viewer-commands.ts; viewer-pan-zoom.ts; viewer-chrome.test.ts; viewer-pan-zoom.test.ts; visio-toolbar.spec.ts; task-windows.spec.ts | Zoom dialog presets, resizing the Pan & Zoom outline to zoom, pinch behavior and large-diagram performance |
| Ribbon and toolbar commands | Microsoft Visio window: File backstage, Quick Access Toolbar, Home, Insert, Design, Data, Process, Review, View and Help tabs, Tell me, Shapes window, context menus, page bar and status bar, with native shortcuts | Partial. Layout follows a capture of Visio 16: tabs, groups, large and three-row commands, dropdown and split menus, dialog launchers; File backstage; Tell me what you want to do (Alt+Q) over every ribbon command with its location; KeyTips (Alt, then letters) across tabs and both Home and View levels; the Shapes window with the Basic Shapes stencil and a minimised Shapes strip that reopens it; shape and page context menus; page tabs with All pages and Insert Page; Presentation Mode in the status bar. Working: Undo/Redo, Pointer Tool, Rectangle drag tool and Rectangle master, Edit Text, Shape Data, Find, Layer Properties, Ruler, Grid, Task Panes, Pan & Zoom, Zoom presets, Fit to Window, Page Width, Full Screen, File Open, Save and Save As (VSDX copy), Export SVG, Print current page, Close, Info, Account (shared ooxml-ui profile editor, stored on this device) and Visio Options (shared ooxml-ui options dialog; User name and Initials honoured, every other setting disabled with its reason). Every other command, master and page is visible, disabled and names the missing capability. Composed from shared ooxml-ui elements, including the ribbon tab row, File backstage, print preview, Find bar and rulers | ribbon*.ts, backstage.ts, viewer-backstage.ts, viewer-options.ts, viewer-tell-me.ts, viewer-options.test.ts, shapes-window.ts, viewer-stencil.ts, viewer-context-menu.ts, viewer-commands.ts, viewer-ruler.ts; viewer-chrome.test.ts, viewer-commands.test.ts, shapes-window.test.ts, visio-toolbar.spec.ts. Rectangle create plus delete reopened in Visio 16 over COM with exact PinX/PinY/Width/Height | Clipboard, Font, Paragraph, Shape Styles, Arrange, Connector, Text and other drawing tools, other Basic Shapes masters, Change Shape, Insert Page and the Insert, Design, Data, Process and Review commands need new core edit commands. Also missing: New blank drawing, PDF export, Presentation Mode, bundled Help, on-canvas move/resize handles (need core-exposed PinX/LocPin), multi-selection, Guides, Page Breaks and Size & Position panes, stencil files |
| Shape selection | Identify shapes by page and shape ID | Partial: pointer and keyboard navigation | Page-scoped selection, roving focus and lifecycle tests | Multi-selection, assistive-technology and real-browser audit |
| Framework integration | One renderer across host frameworks | Six thin native adapters with lifecycle tests | React/Vue/Angular/Svelte/Solid/vanilla runtime checks; selected SSR/hydration checks | Standalone packaging, cross-browser and historical peer-version matrix |
| Editing and history | Move, resize, style, text, undo/redo | Experimental plain text and admitted top-level local 2D create/move/resize/delete, plus bounded primitive master-instance moves with explicit local pins and undo/redo | Shared geometry controls, atomic API, all-six forwarding and Chrome editing tests; core corpus: 12 admitted master instances across four files, 59 refusals from 71 scanned | Master resize/delete, groups, glue, unsupported package dependencies, style/rich-text edits and native Visio fidelity remain unsupported or unverified |
| Native save and round-trip | Save editable VSDX preserving unknown parts | Experimental local VSDX copy export for admitted text/geometry edits | Core atomic preservation, dependency and independent safety tests; worker-isolated edits, bounded history and explicit downloaded copies. Signed and macro packages are rejected | General writer, broader geometry and scoped cache recalculation, rich text, native Visio reopen |
| Export and print | SVG, images, PDF and print layout | Partial: SVG export and bounded immutable print artifacts | Shared export/snapshot APIs, all-six handle tests, four-page real snapshot and raster pixel tests | Print frames/dialogs, saved printer/layer settings, PNG/PDF output, embedded fonts and native comparison |
| Legacy and other Visio formats | VSD, VDX, stencils, templates, macros | Bounded binary VSD v11 preview through ole2 | Byte-signature dispatch; explicit page/shape transforms, move/line geometry and plain text with diagnosed fallback styles. Legacy source is retained, with VSDX editing/export disabled. | Older binary versions, groups/masters, rich formatting, complex geometry, native Visio fidelity, VDX, stencils, templates and macros |
| Collaboration and comments | Shared editing with durable state | Partial: File > Share starts a live session (ooxml-core/collab, Yjs) between windows of this browser over BroadcastChannel. The whole VSDX package is shared; remote changes arrive as one undoable history step; collaborators show with the shared ooxml-ui presence element | viewer-share.ts; viewer-share.test.ts (two controllers sync a load, an edit and an undo); core package-sync.test.ts | Sharing across devices (needs a host-provided server transport), field-level merging (concurrent changes: the last package wins), comments, authentication and roles |
| Visio visual parity | Measured equivalence on real documents | Not established; real corpus under comparison | 19 upstream drawings import; secondary embedded-thumbnail comparisons reveal gaps | Full reference renders, fonts/settings, measured fidelity and manual review |
| Corner rounding | Rounded contiguous geometry | Partial: closed axis-aligned rectangles and nonclamped open orthogonal paths | Analytic regressions; five 60973 rectangles and five connectors (14 corners) | Short-segment connector clamping, general polygon and mixed/curved path rounding |
What the viewer tells you
Read compatibility notes after opening a document. The core emits structured diagnostic codes with available part, page and shape context. The renderer adds warnings for visual approximations such as unsupported arrow variants, approximate arrow sizing, and browser-based text metrics. Absence of a warning is not a guarantee that every unsupported construct was detected.
Evidence required for a parity claim
- Collect genuine Visio-authored fixtures spanning the capability inventory.
- Export reference views from a recorded Microsoft Visio version with known fonts and page settings.
- Compare geometry, text, styles, connectors and page backgrounds with measured tolerances.
- For editing, verify the result in the viewer and after saving and reopening in Visio.
- For round-trip, compare untouched XML parts, relationships and unknown content.
- Run the same workflow across every advertised framework and browser.
A full-parity percentage is deliberately not shown. No denominator or independent validation corpus has been established.
Source references
- Microsoft Visio file format reference
- Microsoft introduction to the VSDX format
- MS-VSDX: Visio Graphics Service file format
-
ooxml engine repository: current
local implementation is under
src/visio; unpublished changes may not be on the remote. - pptx-viewer design and architecture reference