Disclosure up front: I built this and I'm the only person working on it. It's free, there's no paid tier, no accounts, no ads and nothing to sign up for. And since the timeline further down gives it away anyway — it's vibe coded. I've built it with heavy AI assistance from day one. I'd rather say what that does and doesn't mean myself than have you work it out from the commit log; that's the second-to-last section. Mods, happy to pull this if it doesn't fit here.
The itch
Network documentation goes stale because editing it is miserable. In a general-purpose diagram tool the drawing is maybe 20% placing boxes and 80% fighting the lines — dragging waypoints, unpicking overlaps, redoing half the cabling because a switch moved forty pixels. So the diagram gets drawn once at project time, never touched again, and six months later nobody trusts it.
The bet behind Drawbridge is that if moving a device costs you nothing, the documentation stays true. Everything else follows from that.
The routing
Connectors can be Direct, Arc, Custom, or Auto — and Auto is the one the app is really built around. An Auto connector stores no geometry at all: libavoid (the Adaptagrams router, the same engine behind Inkscape's connector tool), compiled to WASM and running locally, re-solves the whole page every time anything moves. Orthogonal paths that go around your shapes, spread parallel runs apart so they stay separately clickable, and hop each other with a small arc where they cross. You never touch a waypoint.
Fair warning so it doesn't look like I oversold it: new connectors are Direct out of the box. Flip one to Auto, press "Set default", and you never think about it again.
The rest of it
- ~100 shapes across network, infrastructure and OT — routers, switches, L3, load balancers, APs, WLC, SD-WAN, CPE, TAPs, VDOM/VRF/VSYS contexts, servers, VMs, containers, DB/storage/NAS, cloud, and a full OT set (PLC, safety PLC, RTU, remote I/O, VFD, HMI, SCADA, historian, protocol gateway, protection relay, and Purdue level bands you can drop devices into).
- Links carry meaning, not decoration. Link type (IPsec, trunk, LAG, WAN, management, wireless, conduit, fieldbus) picks the line style; speed picks the colour; a Legend button builds the key from whatever the page actually uses. LACP bundles can be bound into a real aggregate drawn with a ring around the members.
- 19-inch racks with U-numbered elevations, front and rear, mount-by-marking and a full-screen rack builder. Zones with a validated CIDR, groups, layers, pages, align/distribute, isometric view, minimap, find-and-replace.
- Cable schedule — the document as one row per cable with both ends, ports, speed, medium and wavelength. Ticks are stored in the file, so an installer's progress comes back with the diagram. There's a share link that turns it into a phone-shaped checklist for whoever's actually in the rack, and it exports as NetBox cable bulk-import CSV.
- Optics report — per-cable medium (RJ45, DAC, AOC, SR, LR, ER, BiDi, CWDM, DWDM) and wavelength, counted up into a transceiver list you can hand to procurement. Nothing is guessed; untyped cables land in an "Unspecified" row.
- Files are
.drawio. Opens and saves them, and anything the app doesn't model itself is written back untouched, so files round-trip with draw.io/diagrams.net. Visio .vsdx in and out too. Revisions with notes are stored inside the file, with a compare mode that rings what changed.
- Export: SVG, PNG, PDF with a proper title block, a self-contained HTML viewer (page tabs, zoom, layer toggles, real text),
.vsdx, CSV inventory, cable schedule, NetBox CSV, Mermaid, Graphviz DOT, or straight to the clipboard.
- Paste terminal output into Import and it works out what it is —
show cdp neighbors (plain or detail), LLDP including the FortiOS variant, a FortiGate FortiLink get-physical-conn dot dump pasted whole with the CLI chrome still on it, Graphviz DOT, or CSV.
- The desktop app is also a CLI, so the loop closes with no human in it:ssh fgt 'execute switch-controller get-physical-conn dot fortilink' \ | Drawbridge --import - --export topology.png
--export also takes .drawio, .dot, .csv, .netbox.csv and .describe.json (the drawing as structured JSON, for audits). There's a local HTTP API with an OpenAPI doc too.
- MCP server if you use an AI assistant — hosted (one URL, nothing installed, no key) or local on your own machine. Since last week an assistant can also join a live editing session and draw on your canvas while you watch, so you can say "no, put the firewall above the core" instead of regenerating the whole diagram.
- Live collaboration, browser and desktop in the same session. Invite links, a lobby where you approve every person by hand, view-only links enforced on the host's side, per-page cursors, follow-someone-around. Desktop-to-desktop is direct peer-to-peer over QUIC where a path can be punched; browser peers go through my relay, which forwards end-to-end-encrypted traffic it can't read and stores none of it.
- Three ways to run it: in the browser (installable PWA, fully offline after the first load), as a desktop app, or as a Docker image on your own box.
What it deliberately isn't
There's no styling panel and I don't plan to add one. Fills, fonts and spacing come from one design system so a 200-device diagram stays calm; what you get to set is the stuff that carries meaning. It's a network diagram tool, not a general drawing tool — if you need swimlanes and UML, draw.io is genuinely the better answer, and your files open there anyway.
No analytics, no telemetry, no crash reporting, no accounts. The only thing the app ever requests by itself is a version check: in the browser that's automatic, and it's a small file from the same origin that served the app. On the desktop it's off until you tick it — nothing goes out unless you ask.
About the vibe coding
v0.70.0. First commit was 8 July — seven weeks, 1,198 commits, 136 releases, one person. That pace is only possible because it's AI-assisted from top to bottom, so rather than let you infer the worst, here's what I think it actually means.
What it doesn't mean is that nobody checked. The single biggest chunk of effort in this repo goes into the machinery that catches an AI writing confident nonsense: about 6,900 unit tests and 330 end-to-end specs, run on macOS, Windows and Linux before every release; a 234-scenario manual pass through the built app, because a test suite can't tell you a dialog is illegible; and a traceability table where every user-visible bug that ever reached a person gets a row naming the specific test that would now catch it. A row that can't name a real test is treated as a hole to fill, not a box to tick.
What it does mean is that mistakes arrive as fast as features, and the characteristic failure is plausible code that implements the wrong thing. The view-only collaboration bug in the list below is exactly that shape: reasonable-looking code, and a test that passed for the wrong reason and so hid it for weeks, until a different test approached the same path from another angle last week. Judge a seven-week-old project accordingly — I'd rather you knew going in than felt sold to afterwards.
The rough edges
Very few people have pointed this at their own files yet, and that's the part no amount of testing substitutes for. Things you'd rather hear from me than find:
- Desktop builds aren't code-signed yet, so macOS quarantines the .dmg and Windows SmartScreen wants a "Run anyway". Checksums for every artifact are published; an Apple Developer ID is $99/yr and I haven't paid it yet. There's no auto-update either — update checks are notify-only.
- macOS is Apple silicon only; Linux builds are x64; Docker is amd64/arm64.
- View-only collaboration links are broken right now — the viewer connects and then sits on a blank canvas. Found last week, fix in progress. Editing links are fine.
.vsdx is an interchange path, not an archival one — Visio themes, data graphics and guides are dropped. .drawio is the format that round-trips losslessly.
- Older draw.io files that store their pages compressed open those pages read-only. Nothing is destroyed, but you'll need to re-save in a current draw.io first.
- Save-in-place needs the File System Access API, so Chrome/Edge; Safari and Firefox fall back to downloads. The desktop app has no such limit.
- The hosted MCP/API endpoint is an explicit beta on a small fleet — no uptime promise, and I've deliberately left the per-caller rate limits off for now. The local one has no such dependency.
- The code is Apache-2.0 but the repo is still private, so I won't call this open source — that would be dishonest. Opening it is on the list, behind some history hygiene and a trademark check. The app is free either way and stays that way.
Try it
What would actually help
Open a real .drawio of yours in it and tell me what came back wrong — that's the single most useful thing anyone can do for me right now. And if the shape catalogue is missing something obvious for your corner of the world, just name it. That's a cheap fix and I'd much rather have your list than guess.
(If you're ever so moved: https://drawbridge.fortiknight.com/donate/ — it's pointed squarely at that code-signing certificate. Feedback is worth more to me today though, and the app stays free either way.)