Systems & graphics engineeringDrawing 25.2 of 25Part 2 of 2
Miro import
Getting fifty eight boards out of a format that was never meant to leave, and proving they arrived.
Specification / as recorded
Status
Essentially done, 2026
Role
Solo designer and engineer
Built with
Rust, wgpu, Loro CRDT, SQLite, 18 crates
Runs on
macOS and Windows, no webview
Reference board
a real 596-widget Miro import
Sheet 02 of 02/Import
The boards had to survive the move
This is the part that had to work before anything else mattered, because the boards being moved cannot be re-imported freely. Miro encrypts the .rtb backups server side. The REST API returns no content for a large share of items. The clipboard route needs the original board still open in front of you. A board lost in a refactor is lost for good.
So the importer decodes Miro's clipboard format and reads the encrypted backups, resolving assets by resource id across the whole archive set rather than one board at a time. That is what makes a fifty-eight board migration one pass instead of fifty-eight. Of the reference board's 596 widgets, 532 come across intact, 89 percent, covering ink, images, link previews, text, stickies, embeds, connectors and frames. The clipboard route actually carries more than the API does: it includes pen drawings that no Miro endpoint exposes.
Correctness is checked against Miro's own SVG export as an oracle. A clipboard import of the reference board has to reproduce 44 stickies, 12 frames, 47 shapes, 18 connectors, 134 ink paths and 429 text strings. The two formats come out of different Miro code paths, which makes agreeing with both the strongest signal available.
Data safety then became the first rule in the project's documentation, above the performance goals, and it is structural rather than careful. Delete writes a path into a trash sidecar and touches no file. A single confirmed purge is the only code in the app that removes a board. A schema change has to keep reading the old spelling instead of migrating to the new one.
PlatePL-01
TitleReference board
ViewDetail
A real 596-widget Miro import, with the performance HUD on: 596 of 596 items visible, 600 draw calls, 218 images, 145 MB resident.
PlatePL-02
TitleOne of my own boards in daily use
ViewDetail
Holding photographs, stickies, notes and drawings that all came across from Miro in the import.