VSD File Documentation


Summary

A Visio Drawing File is a diagram (flowchart, network map, floor plan or org chart) from Microsoft Visio 2010 or earlier, saved in Visio’s legacy binary format. It is an OLE2 Compound File, the same container as old .doc and .xls, with the MIME type application/vnd.visio and the extension .vsd. Visio 2013 replaced it with the ZIP/XML-based VSDX, so .vsd is now a legacy format you mostly meet in older files.

Technical details

FeatureValue
Full nameMicrosoft Visio Drawing (legacy binary)
File extension.vsd
MIME typeapplication/vnd.visio
Format typeBinary diagram (vector shapes)
Container / base formatOLE2 / Compound File Binary (same as legacy .doc, .xls, .ppt)
DeveloperMicrosoft (originally Visio Corporation)
IntroducedVisio 1.0 era (1992); binary VSD through Visio 2010
Superseded byVSDX (ZIP/XML) from Visio 2013 onward
Key internal streamVisioDocument
ContentsPages, shapes (geometry), masters/stencils, connections, document properties
Byte orderLittle-endian (CFB structures)
Magic number (hex)D0 CF 11 E0 A1 B1 1A E1
draw.io importNo — diagrams.net imports VSDX only, not binary VSD
Free viewerLibreOffice Draw (via libvisio); Microsoft Visio Viewer
Macro-enabled variant.vsdm (VSDX with macros)
Open standardNo — closed binary; documented later as [MS-VSD]
Related extensions.vsdx, .vss, .vst, .vdx, .vsx, .vsdm
Specificationlearn.microsoft.com/openspecs/office_file_formats/ms-vsd/
File signature (magic bytes)
D0 CF 11 E0 A1 B1 1A E1

Offset 0, 8 bytes. A legacy .vsd is an OLE2 Compound File Binary, so it starts with the same signature as old DOC, XLS and PUB files (the first four bytes read like “DOCFILE”). The header does not identify the file as Visio by itself; that comes from an internal stream named VisioDocument. This is how to tell old VSD from the newer VSDX, which is a ZIP archive and begins with 50 4B 03 04 (“PK”).

What is a VSD file?

A .vsd is a Microsoft Visio Drawing in the program’s original binary format: a diagram such as a flowchart, network map, organisation chart, floor plan, UML model or engineering schematic. Visio began in 1992 (from Visio Corporation, which Microsoft acquired in 2000), and VSD was its main file format from then up to and including Visio 2010. With Visio 2013 Microsoft switched to the ZIP/XML-based VSDX, so VSD is now a legacy format you encounter mostly in archived diagrams and old email attachments, often without owning Visio.

The single most important technical fact about VSD is what kind of file it is: a Microsoft OLE2 Compound File, the same “file system in a file” container that held legacy DOC, XLS, PPT and PUB documents. That fact drives everything else: how the file is identified, why third-party support was hard, and why one very common piece of advice (“open it in draw.io”) does not work for VSD even though it works for VSDX.

The OLE2 compound file container

Every OLE2 Compound File begins with the 8-byte signature D0 CF 11 E0 A1 B1 1A E1 at offset 0, followed by a header describing a set of internal sectors. Inside, the container is organised like a small filesystem, with storages (directories) and streams (files), all little-endian.

Offset  Size  Field
0x00    8     Signature: D0 CF 11 E0 A1 B1 1A E1
0x1A    2     Major version (0x0003 = 512-byte sectors)
0x1C    2     Byte-order mark (FE FF = little-endian)
0x1E    2     Sector shift (0x0009 -> 512-byte sectors)
0x30    4     First directory sector location
0x3C    4     First mini-FAT sector location

Because the signature is shared by every OLE2-based Office format, the first bytes of a .vsd do not prove it is a Visio file: a DOC, an XLS and a VSD all start identically. What distinguishes VSD is an internal stream named VisioDocument, the main stream that holds the drawing’s data. A reader confirms the file is Visio by walking the compound file’s directory and finding that stream, exactly the way it would distinguish a spreadsheet from a document.

Pages, shapes, masters: what the drawing stores

Within the compound file, VSD keeps the logical parts of a Visio document in binary streams. The important pieces are the drawing pages, the shapes on them, and the reusable masters those shapes come from.

Root Entry (storage)
 ├─ VisioDocument      main binary stream: document, pages, shapes, styles
 ├─ (summary streams)  \x05SummaryInformation, DocumentSummaryInformation
 └─ ...                additional Visio storages/streams

A Visio document is a set of pages, each holding shapes. A shape is a vector object: it has geometry (coordinates and the path that draws it), text, formatting, and connection points where connector lines attach. Shapes are frequently instances of masters, the reusable definitions kept in stencils, so a network diagram with fifty identical router icons references one master rather than storing the geometry fifty times. The document also carries styles and, in the OLE summary streams, properties like title and author. The connectivity, which shape connects to which, is part of what makes a Visio file a diagram rather than a static picture, and it is stored alongside the shapes in the VisioDocument stream.

Binary VSD versus the ZIP-based VSDX

The move from VSD to VSDX in Visio 2013 was a change of container, and it is the crux of most practical questions about the format. VSD is a closed OLE2 binary: its layout was proprietary, and although Microsoft later published the [MS-VSD] specification, the binary structure is harder for third-party tools to read reliably. VSDX is the opposite: it is a ZIP archive of XML parts (the same Open Packaging Conventions used by DOCX and XLSX), so it begins with the ZIP signature 50 4B 03 04 (“PK”) and its contents are open XML that any tool can parse.

This is why the widely repeated advice to open Visio files in draw.io / diagrams.net is true for VSDX but false for VSD: draw.io imports the open VSDX but not the legacy binary VSD (nor its siblings .vss and .vdx). The routes that do work are LibreOffice Draw, which reads VSD directly through its libvisio library, or, if you have Visio, opening the VSD and choosing Save As › VSDX and then importing that. There is no dependable free desktop converter that turns binary VSD into VSDX without Visio, because doing so means fully reverse-engineering the old format.

Reading a VSD without Visio

Visio has always been licensed separately from the core Office apps, so many people receive a .vsd with no software that opens it. The standard free option is LibreOffice Draw: it opens legacy VSD for viewing via libvisio, though fidelity on complex stencils is partial, and it can export the diagram to PDF, PNG or SVG to share with anyone. Microsoft also offered a free standalone Visio Viewer for legacy files, and on macOS and iOS there are dedicated third-party viewers. Because VSD is an OLE2 file, low-level tools that understand that container can even list its internal streams, though that shows structure rather than a rendered diagram.

Macros and the OLE2 container’s reputation

A plain VSD drawing contains vector shapes and no macros, so it is low risk to open. The caution comes from its container: OLE2 is the same format that held macro-capable Office documents, and Visio does support VBA macros. In current Visio those macros live in the macro-enabled VSDM variant rather than a plain VSD, but the lineage is why security tools treat the whole OLE2 family carefully. If you receive a Visio file from an untrusted sender, keep macros disabled, and prefer to inspect it in LibreOffice Draw, which renders the drawing without running any Visio VBA, so opening a questionable file there executes nothing.

Frequently asked questions

Can draw.io open a VSD file?

No. draw.io / diagrams.net imports the newer VSDX but not the legacy binary VSD (or .vss/.vdx). To use draw.io with an old diagram you must first open the VSD in Visio and Save As VSDX, then import that VSDX. For a purely free path that avoids Visio, open the VSD in LibreOffice Draw instead.

What is the difference between VSD and VSDX?

VSD is the old binary Visio format (through Visio 2010), stored in an OLE2 compound file that begins with D0 CF 11 E0. VSDX is the format from Visio 2013 onward, a ZIP archive of XML that begins with 50 4B 03 04. VSDX is open and far better supported by third-party tools, which is exactly why draw.io reads it and not VSD.

How can I tell a VSD from another Office file with the same header?

All OLE2 files share the D0 CF 11 E0 A1 B1 1A E1 signature, so the header alone will not tell you. Look inside the compound file for a stream named VisioDocument; its presence identifies the file as a Visio drawing. Tools that read OLE2 compound files can list the internal streams for you.

References