Documentation
What accent-draw converts, what it infers, and how to run it - from the command line, from a browser, or as a Rust library.
accent-draw takes an SVG and returns a .drawio file whose shapes, text and
arrows are native, editable cells. A box is a box with its label inside it; an
arrow is an edge glued to the two shapes it joins, so moving a box in draw.io
drags its label and its arrows along with it.
It is one Rust library with three hosts: a command for the shell, a WebAssembly binding for a browser, and a second command for converting Miro boards in bulk. The library itself touches no filesystem, clock, randomness or threads, which is what lets the same code produce the same bytes in all of them.
Start here
| Page | What it covers |
|---|---|
| How it works | The five stages, what the layout infers from geometry, and what is reported instead of drawn |
| Profiles | The eight sources read by the names they give their own parts, and what each one hands over |
| Command line | accent-draw, its output and its exit codes, and the Miro command |
| JavaScript | The WebAssembly binding: convert, the result, the errors, and what it costs to load |
| Architecture | The crates, the no-I/O boundary, deterministic output, and the roundtrip through draw.io |
Or skip the reading and convert something - nine samples are loaded and ready, and nothing is uploaded.
What it is not
It is not a renderer. accent-draw writes draw.io files; drawing them is draw.io's job, and porting that is not recommended.
It is not pixel-exact. A filter, a mask, a pattern or text along a path cannot become a native cell, so it becomes an image of that fragment and a note saying so. The first conversion of any drawing is an approximation, and the documentation says where.
It does not guess in silence. Every element that draws something ends as a cell, as part of one, or as a note. An SVG with nothing recognisable in it is an error - never an empty diagram that looks like a success.