Six native bindings
React, Vue, Angular, Svelte, Solid, or vanilla JavaScript. Thin lifecycle adapters keep all format logic in ooxml-core and the shared viewer.
Framework guides →Public beta · Apache-2.0 · TypeScript
Bring Visio diagrams into your web app. One shared <visio-viewer> web component and one SVG renderer for React, Vue, Angular, Svelte, Solid, and vanilla JavaScript. Explore pages, inspect shapes, and make supported plain-text edits; the framework adapters only wire up lifecycle and events.
npm install visio-react-viewerPublished to npm. Each framework package is self-contained: it bundles the shared viewer, its adapter and its workers.
Live demo
This is the real viewer running in your browser: the playground built from this repository for each framework adapter, embedded live. Open the sample drawing or a local .vsdx; nothing is uploaded.
Features
React, Vue, Angular, Svelte, Solid, or vanilla JavaScript. Thin lifecycle adapters keep all format logic in ooxml-core and the shared viewer.
Framework guides →Switch pages, fit and zoom, select shapes, search visible text, adjust supported layer visibility, and use the Visio-style ribbon, File backstage, Shapes window and Pan & Zoom window.
Live demos →Open a local .vsdx file and export the current page as SVG. There are no document uploads, no telemetry and no remote document loading.
Getting started →Experimental source-backed plain-text replacement, narrow geometry edits, bounded undo/redo and explicit original or edited VSDX copies. Unsupported content is rejected, not dropped.
Editing limits →Binary VSD v11 files load through the shared ole2 codec in ooxml-core as a read-only preview with diagnosed fallback styles.
Capability ledger →File > Share starts a Yjs session over BroadcastChannel between windows of one browser. Sharing across devices needs a host-provided server transport, which is not built.
Collaboration →Current-page SVG export with embedded rasters and visible compatibility notes, plus immutable page snapshots through the API. There is no print dialog, PDF or bitmap export.
Viewer API →Every capability is tracked with its evidence and what is still missing. A good-looking ribbon is not claimed as Visio parity.
Capability ledger →Status
This is a public beta, not Microsoft Visio parity. General drawing, full ShapeSheet recalculation, rich text, groups and most masters, PDF export and native Visio reopen fidelity are not established. The generated sample demonstrates interactions; it does not prove visual fidelity.
Capability ledger →import { mountViewer } from 'visio-vanilla-viewer';
const viewer = mountViewer(host);
await viewer.load(file);
// Current page as a static SVG: string, dimensions, byteLength, diagnostics.
const { svg, diagnostics } = viewer.exportSvg();
// Original or edited VSDX bytes for an explicit download; never
// overwrites the source file.
const { bytes, dirty } = await viewer.exportVsdx();Getting started
Every adapter forwards the same properties, events and imperative handle of the shared viewer. Give the container a height, then pass a VisioDocument or load a File.
import { VisioViewer } from 'visio-react-viewer';
import type { VisioDocument } from 'visio-react-viewer';
export function Diagram({ diagram }: {
diagram: VisioDocument;
}) {
return <VisioViewer
document={diagram}
style={{ height: 600 }}
events={{ 'document-error': console.error }}
/>;
}
// The native component handles mount and cleanup.To run the playground or work on the viewer itself, clone the repository. Node.js 22.12 or newer is required.
npm ci --ignore-scripts
npm run devFAQ
No. This is an early implementation. Supported cached geometry, text and images are rendered through one SVG path. Complex documents still have gaps; the capability ledger separates implementation, evidence and missing work. Capability ledger →
Yes. One self-contained viewer package per framework is on npm, for example npm install visio-react-viewer. Each package is versioned on its own. Getting started →
No. The viewer reads the File you select in your browser. There are no document uploads, telemetry or remote-document fetches.
Experimental plain-text and narrow geometry editing is available for supported, source-backed shapes, with bounded undo/redo and explicit VSDX-copy downloads. Master-linked text, rich text, fields, signed packages and macro content are rejected. The source file is never overwritten, and native Visio reopening remains unverified. Viewer API →
The UI exports current-page SVG and original or edited VSDX copies. The API can prepare immutable page snapshots for a future print workflow; it does not open a print dialog. PDF, bitmap export and native printer layout are not implemented.
Only in a limited way: File > Share links windows of the same browser through a Yjs session. Sharing across devices needs a host-provided server transport that this build does not include. Collaboration →
No. The original, programmatically created sample demonstrates interactions. Generated fixtures do not establish Microsoft Visio visual parity; compare important drawings with their native Visio rendering.
React, Vue 3, Angular, Svelte 5, SolidJS and plain JavaScript. They share one viewer element; each adapter only handles mounting, property updates and event forwarding. Framework guides →
Get started
Read the guide, pick your framework, and try the playground with a drawing of your own. Apache-2.0 licensed, strict TypeScript, and honest about the gaps.