Re-lab reverse-engineers Visio file formats
by Aleksandr ProkudinThe first reverse-engineered specification is now available for developers

Back in 2007 we, re-lab team, started working on reverse-engineering of VSD — binary file format of Microsoft Visio documents. The initial work stalled due to a number of reasons, but lately it was resurrected. What happened back then and what is happening now? Read on.
MS Visio is a rather popular flowcharting application that is still unmatched in free software world on many levels, yet any kind of support would make the situation better. We started working on VSD reverse-engineering with Dia in mind to have the reference implementation.
We managed to figure out most of 6th and 11th versions of the file format, and partially — 4th and 5th ones. Two small apps were written to aid that project: vsdump
, for dumping contents of VSD files, and vsdviewer
(self-explanatory).
Shortly thereafter we ran into two major problems. First, our own code was a mess, it was clearly not good enough for public use. Second, we didn’t manage to find any interested software project to actually use our work; the Dia plan didn’t work. So much for motivation. Hence not much was really happening for three years.
This January Valek ported VSD/VSS parsing from vsdviewer to OLE toy, our OLE exploration tool that we created last year to reverse-engineer Microsoft Publisher file format. That means now you can study guts of VSD files up close:
So what’s happening now? The code for parsing VSD data chunks was updated today, and first public documentation on the file format was released. If you want just the documentation, you can fetch files from web interface to Git repo. OLE toy lives in tools repository and depends on PyGTK and libgsf. The documentation on VSD is in graphics repository.
The documentation is in a good shape for someone to start hacking on VSD and/or VSS support in some free flowcharting application, be it Dia or Flow or something else. Will it be used? Actually, this year there is a Google Summer of Code project to implement support for VSD documents in LibreOffice Draw, and we are (well, Valek is) in contact with the student and the mentor. So it’s the first likely free application to open Visio files.
Just like the rest of our docs, the documentation on Visio file formats is under Creative Common Share-Alike 3.0 Unported.
Patreon subscribers get early access to my posts. If you are feeling generous, you can also make a one-time donation on BuyMeACoffee.