Exporting
Everything sits behind the Export ▾ button in the toolbar. The popover has two shared options at the top, then the formats.
Shared options
Theme — Match app (default), Light or Dark. This decides which colour tokens are baked into the exported file, independently of the theme you are editing in: you can work in dark mode and export a light diagram for documentation.
Transparent background — drops the paper fill so whatever the file is placed on shows through.
| Format | Theme | Transparent background |
|---|---|---|
| SVG | Yes | Yes — the background rectangle is omitted |
| PNG | Yes | Yes — the PNG keeps its alpha channel |
| Copy image | Yes | Yes |
| HTML viewer | Yes | Yes |
| Yes (diagram colours only) | Always — the page is white paper regardless | |
Visio .vsdx |
No | No |
| CSV inventory | No | No |
| Copy Mermaid | No | No |
| Graphviz DOT | No | No |
| Copy DOT | No | No |
Two further things follow what you are looking at rather than being options: hidden layers are never exported (a layer you turned off cannot be revealed by a recipient), and if the canvas is in isometric view, SVG, PNG, copy-image, HTML and PDF export the isometric projection from the corner you have orbited to.
Exports are named after the active page's name — the one on its tab in the pages bar (name.svg, name.png, name-inventory.csv); the HTML viewer, being a whole-document file, is named after the open file instead. In the desktop app you pick a destination and get a toast naming the path; in the browser it arrives as a download.
SVG
Export → SVG writes a standalone .svg of the active page. Styles and design tokens are inlined, so the file is faithful on its own and makes no network requests.
PNG
Export → PNG writes a .png of the active page rendered at 2×, so it stays sharp in documents and slide decks. It is rasterised from the same SVG the SVG export produces.
Copy image
Export → Copy image puts the same 2× PNG on the system clipboard instead of writing a file — paste it straight into a ticket, chat or document. It honours the theme and transparency options.
If the page is empty, or the browser does not support writing images to the clipboard, you get a message saying so rather than a silent failure. Clipboard writes also fail if the window is not focused.
Visio (.vsdx)
Export → Visio writes the whole document — all pages — as a .vsdx, independent of whatever file the document is open from. This is the path that works everywhere; the Save dialog only offers .vsdx where the browser's file-picker API is available.
Pages you have not visited are exported too, with straight fallback links where no route has been computed.
Export → PDF exports the whole document — one sheet per page, in tab order — through the browser's print-to-PDF: a print document is assembled and the print dialog opens, where you choose "Save as PDF". It needs no plugin and works the same in the browser and the desktop app. Want just one page? The print dialog's own Pages field already does that (the sheets are in tab order, so page 3 of the document is page 3 of the print), which is why there is no extra choice to make here. An empty page adds no blank sheet.
- Landscape, always. Paper is chosen for you: A4 landscape, stepping up to A3 landscape when a drawing would otherwise have to shrink below half size — and it is one size for the whole document, so a single large page makes the whole book A3 rather than mixing sheet sizes. Small diagrams are enlarged to fill the page — it is vector, so it stays crisp.
- Title block along the bottom of every sheet: document title, that sheet's page name, the date (
YYYY-MM-DD) and the Drawbridge version. - The sheet is always white and the diagram is drawn with no background fill — a PDF is ink on paper, not a screenshot of a dark canvas. The Theme option still controls the diagram's own colours.
- A legend on the page is ordinary page content and is included automatically.
An empty page exports nothing.
HTML viewer
Export → HTML viewer writes the whole document as one self-contained .html file. It opens in any browser, offline, and can be emailed, attached to a ticket or committed next to the .drawio it came from — the answer to "I can't open your diagram".
It is genuinely self-contained: all CSS and JS inline, system fonts only, images as the data URLs already in the document, and zero network requests.
What the viewer adds over a flat picture — the things a PNG loses:
- page tabs for every page in the document;
- zoom in/out and Fit, with panning;
- layer toggles for the layers you published;
- a details panel showing a device's asset data.
The text is real text, so the browser's own find and print work on it. With JavaScript disabled the pages simply stack vertically under their own headings, the tabs become anchors, and the layer toggles still work.
CSV inventory
Export → CSV inventory writes every device on every page with its asset data. See Inventory in Files and templates.
Copy Mermaid
Export → Copy Mermaid puts the active page on the clipboard as a fenced ```mermaid block, ready to paste into a markdown article, a README, a wiki page or anywhere else mermaid renders — GitHub and GitLab render it in place.
This is a topology export, not a picture of your layout: mermaid has no coordinates, so its renderer arranges the graph itself. What travels is what is connected to what — every device with its label, zones (and racks) as titled subgraphs holding whatever stands on them, and every link with its caption, port names and speed as the link's text. Dashed link types (IPsec, WAN, Mgmt, Wireless) come out dotted and heavy ones (Trunk, LAG, Conduit) come out thick, so the line language survives in spirit. A wide drawing flows left-to-right, a tall one top-to-bottom.
Free text, callouts, the legend and map or Purdue backdrops are presentation rather than topology and are not included; a hidden layer stays hidden, as in every export. The snippet carries no colours on purpose — it adopts the theme of wherever you paste it. If you want the diagram exactly as drawn, use SVG or PNG; Copy Mermaid is for when the article should own the drawing.
Graphviz DOT, and Copy DOT
Export → Graphviz DOT writes the active page as a .dot file, and Export → Copy DOT puts exactly the same text on the clipboard. It is the way back out of the app for Diagrams from code: what leaves here is written in the same attribute profile the DOT import reads, so a drawing can go into a git repository, be reviewed as a diff, be edited or generated further by a script, and come back in through Import as a drawing. It is also ordinary Graphviz — dot -Tpng page.dot renders it in any Graphviz tool.
Unlike Copy Mermaid, this carries the layout too: every device writes its position and size in Graphviz's own pos=/width=/height= spelling, so importing your own export puts everything back exactly where it was — and a plain neato render shows your geometry, not a fresh one. What travels is most of the drawing:
- every device with its name,
kind=, accent colour, asset fields (mgmtIp=,serial=,model=,location=,notes=), position, size, label placement, group membership and named layer; - every link with its identity (
id=— what keeps the two cables of an HA pair two cables), port labels, caption,speed=,link=type, aggregates (bundle=, whose ring captions ride along as the names), the sides it attaches to, and how it is drawn (router=, waypoints, arc bow, label placements); - zones, virtual contexts and racks as
subgraph cluster_…boxes carrying theirkind=, name,cidr=and rect — they come back as real containers holding what stood on them; - Purdue levels as clusters carrying
purdue="N"— rebuilt at their recorded rect; - free text and callouts (with their styling and leader), images, rack units, and the document's speed→colour overrides;
- devices drawn level with each other as
{rank=same; …}, so an HA pair or an MCLAG peer pair returns side by side even in a file with no positions.
Two things are rewritten on the way out, both because the DOT profile identifies a device by its name. Arrows are written downwards — the device drawn higher is at the tail — because that is how the import reads tiers when a file carries no positions, and connectors are drawn without arrowheads here anyway. And two devices sharing a name are numbered (Switch, Switch 2); leaving them identical would merge them into one tile on the way back in, and losing a device is worse than gaining a suffix.
The legend (derived and regenerable) and map backdrops stay home, and hidden layers stay hidden — a layer you turned off cannot leave the app. A cable drawn to a zone keeps the zone as a plain node rather than a box, because DOT cannot attach an edge to a cluster — the cable matters more than the frame, and the zone still returns as a zone.
Cable schedule CSV, and NetBox
Two more entries in the Export menu turn the cabling into a spreadsheet:
- Cable schedule CSV — one row per cable: page, both ends with their ports, speed, cable type, wavelength, link type, aggregate, label, and whether it is ticked as installed.
- NetBox cables CSV — the same cabling in NetBox's own cable bulk-import columns (
side_a_device,side_a_type,side_a_name,side_b_*,type,status,label), ready to paste into its import form. Cables you have ticked import as connected; the rest as planned.
Two things about the NetBox file are deliberate. Its type column is a closed list, so Multimode (SR) becomes mmf, everything single-mode (LR, ER, BiDi, CWDM, DWDM) becomes smf, and AOC becomes aoc — but RJ45 and DAC are left blank, because NetBox wants to know which of cat5e/cat6/cat6a it is, and whether a DAC is passive or active, and the drawing does not say. A DCIM is a source of truth; a guessed value in one is worse than an empty cell somebody fills in.
And a cable terminates on an interface in NetBox, so a cable with no port name at one end will be rejected on import. The cable schedule panel tells you how many are in that state.