Release notes

What changed in each release, written for humans — including anything worth checking before you update. The commit-level list lives in CHANGELOG.md; on the website these pages are /docs/release-notes/ and /docs/changelog/.

Unreleased

Nothing yet.

v0.100.0 — 2026-10-17

Note: this release shipped without the usual pre-release QA pass — The download page, the Microsoft Store submission and the desktop app were checked on a copy of the production build; touch and Apple Pencil were covered by the automated tests only, and the full manual pass was not run.

Pinch, pan and hold on a tablet. On a touch screen, two fingers now zoom the drawing about the point between them, and pan it when they move together. One finger still taps to select and drags to move. A second finger landing cancels whatever the first had started: a device being dragged goes back where it was, a marquee goes away, and nothing is left on the undo list. Hold a finger still for half a second and the canvas menu opens, the same one a right-click opens, for whatever is under your finger. Tap a device to show its cable dots, and drag from one to draw a cable; a fingertip need not land exactly on a dot, a resize corner or a caption to press it. The cable checklist, a device's Status buttons, the port-name fields and the zoom buttons are finger-sized on a touch screen. There is no touch mode to switch on, and the mouse and trackpad work exactly as before.

Apple Pencil works like a precise mouse, and your hand can rest on the glass. A pen selects, moves, draws cables and sweeps marquees exactly as the mouse does, and a pen held still opens the canvas menu. While the pen is down, a hand touching the drawing is ignored, so resting your palm cannot pan, zoom or select anything.

Drawbridge opens on Linux desktops that run Wayland. On Ubuntu and other Linux desktops using Wayland, Ubuntu's default, the desktop app started but never showed its window: nothing appeared, not even an icon in the dock. It opens normally now. X11 desktops, macOS and Windows behave as before.

Drawbridge is in the Microsoft Store. On Windows, install it from the Microsoft Store. Microsoft signs it, so Windows shows no SmartScreen warning, and the Store keeps it up to date. For an AI assistant, the command is simply drawbridge.exe --mcp, which keeps working through every update. The installer and the portable build on the download page work as before. If you switch to the Store, uninstall the other copy first, so the Start menu shows one Drawbridge.

Drawbridge is in the Snap Store. On Ubuntu and other Linux desktops, sudo snap install drawbridge installs it from the Snap Store, and it updates itself. Collaboration works in the snap, as in the other Linux builds. The snap can open and save files in your home folder and on removable drives; for files anywhere else, use the .deb or the AppImage.

Considerations before you update: none.

v0.99.0 — 2026-10-17

Note: this release shipped without the usual pre-release QA pass — The optical shelves, the Channels table, the port map, folded zones and paged imports were checked by hand on a copy of the production build in Chrome and Firefox; the full manual pass was not run.

The feedback form asks which layout you were using. Studio and Classic put things in different places, so a report now says which one it came from. Open the form from Report a bug, or from a browser where you have used the editor, and the answer is already picked; change it, or leave it on Not sure. The report's diagnostics name the layout too.

A new text box is typed where it lands. Place a Text or Callout block and start typing: the field is already the block — the same place, the same width, the same size of text — so nothing jumps when you press Enter.

A note moves from wherever you grab it. Dragging a text block or a callout by its middle onto a device used to draw a cable from it and leave the note behind. Now it moves, the same as from its edge; to cable a note, drag from one of the dots on its sides. Devices still connect when you drag one by its centre onto another.

Groups keep their name and type in DOT files. A group's name, and whether it is an MC-LAG pair or a stack, now survive a DOT export and import, as they already did in draw.io and Visio files. A collapsed group that has no name is titled for what it is — Group · 3, Stack · 4, MC-LAG — instead of borrowing one of its devices' names.

The Cables list says what each cable is. Select a device and each card in its Cables list now says the cable type, and for a CWDM or DWDM cable its channel — Normal · 100G · DWDM C21 — with the optic it comes to underneath, so a channel plan can be read off the device instead of clicking every cable.

Draw a DWDM line. There are now DWDM terminal, Mux/Demux and Transponder shapes under a new Optical transport heading — search dwdm, wdm, mux, roadm or muxponder. A channel drawn from a transponder to a mux now counts as one transceiver instead of two: a mux port is passive, so the optics block, report and CSV no longer order a module for it, and the cable's card says so.

A patch panel buys no transceiver. A cable drawn from a switch to a patch panel used to count a module at both ends, one of them for the panel. A panel has no cage, so it now counts one, at the switch — in the optics block, the report and the CSV.

A DWDM shelf can say what it is. Select the transponders and the mux that make one end of an optical line and press Optical on the inspector's Type row. Give each transponder-to-mux cable its DWDM channel, and the shelf's channel plan follows from the drawing — nothing is typed twice. Select the shelf and its Group section lists every channel at that site, in nanometres and terahertz, whether it is added there or passing through, and the client it carries, then every line out of the shelf and the channels lit on it. Collapse it and it folds to one DWDM terminal tile with its channels as small chips. Draw a fibre to a second shelf and the cable says which channels both ends carry; if a wavelength lands on one span twice, the drawing marks it and Checks says which span and which channel.

Tables › Channels: the channel plan as a table. On a drawing with optical kit, Tables has a Channels tab. It opens by pair: one block per fibre between two sites, headed with both names, the fibre's length and how many of the grid's channels it carries, and a row per channel saying what each end does with it — the client port it lands on, or through → DWDM-C where it passes a site. End to end turns it into one row per channel, client to client, with the whole path. Show free channels lists what is still free on each fibre, Export CSV saves the view you are looking at, and a wavelength used twice on one fibre is marked and links to Checks. All of it is read from the cables, so change a channel on its card and the table follows.

A DWDM terminal drawn as one box can carry its own channel plan. Select it and fill in Port map under Network — one row per channel: the client port, the channel it rides, the line port it leaves by. The channel box offers the C-band and CWDM grids and takes anything you type. The tile wears a small λ badge that takes you back to the map, the cable on a client port says what it carries at that end (C1 · C21), the box appears as a site in Tables › Channels, a fibre to the next site shows the channels both ends state, and a channel used twice on one fibre is flagged in Checks. The map is saved in .drawio, .vsdx and DOT, reaches the people you share with, and travels with a copy.

Imports keep zones and groups together. VLANs written inside a site cluster in a Graphviz DOT file now draw inside the site, each zone is laid out as one block with nothing foreign inside it, and a device cabled between two members of a group lands beside the group instead of inside its outline.

A big fan-out imports as a block. When six or more devices hang off one device by a single cable each — a host's VMs, a switch's access points — DOT, CSV and Mermaid imports draw them in a block under it, not one long row.

Fold a zone to one tile. Select a zone and press the arrow at its corner, or Fold zone: it becomes one tile naming what it holds — Virtual machine ×17 — and every cable from one device outside arrives as a single counted line. A double-click opens it. A folded zone stays folded in every export and file.

One import, a page per site. Write page="HQ" on a zone in a DOT file and that site gets a page of its own; the page you imported onto becomes an overview with one tile per site that opens its page. One undo removes it all.

Moving a site moves the VLANs drawn in it, even a VLAN big enough to cover the middle of the site — it used to stay behind while its devices moved.

For AI assistants: the MCP guide now lists every format Drawbridge reads and explains ports, colours, folding and pages, and an import says when it came out wider than 3,000 px.

Considerations before you update: the optics count can go down for a drawing with cables that stop at a patch panel or a mux — each of those cables now orders one module instead of two, so check an order list you made from an earlier count. A drawing with the new optical shapes or an optical shelf needs this version or later: an older version draws the shapes as a plain device and a shelf as a plain group, and drops a port map if it saves the file.

v0.98.0 — 2026-10-17

Note: this release shipped without the usual pre-release QA pass — The new windows, tables, labels and Save As folders were tried by hand on a copy of the production build in Chrome and Firefox; the full manual pass was not run.

Open Tables, Checks or Pack in a window of its own. In Studio, the ↗ beside a view's button (Tables, Checks, Pack) opens that view in a separate window, so the table or the checks can sit on a second screen beside the drawing. You can also right-click the button for Open in New Window or Open in New Tab, ⌘/Ctrl-click the ↗ for a tab, or drag the button off the bar. It is still one document: ticking a row selects the device on the drawing, a value typed in the window is the device's value, and ⌘/Ctrl Z in either window undoes in both. A window stays on the page it was opened from, and closes if that page is deleted. In the desktop app, the View menu has Open in New Window and Open in New Tab. Views opened as tabs join the main window's tabs on a Mac, and the windows you had open come back, where they were, the next time you start the app. The drawing itself stays in the main window.

The Tables view edits like the properties panel. A device's Kind, and a cable's Type, Speed and Cable type, are now dropdowns in the table with the same choices the panel offers, and Role suggests the roles for that kind of device. The Cables tab now shows each cable's Type (Normal, IPsec, Trunk and so on), which it used to leave out.

Devices you have not named yet are told apart. A device you have just placed is labelled with its shape's name, so two new firewalls were both Firewall in the tables and in Add cable…. They are now numbered in the order you read the page — Firewall 1, Firewall 2 — with the model or management IP added when the device has one. The Cables tab shows that name in grey, because it is not a name yet; on the Devices tab it is the grey hint in the empty Label field, where typing names the device. In Add cable… these devices come after the named ones, marked (unnamed), and choosing one selects it on the drawing so you can see which it is.

A text block can look like a label. Label style, under a text block's style in the properties panel, sets the text the way a port's address or a cable's caption is set: smaller, in the muted caption colour, with the halo that cuts a cable away behind it. Use it for an address floating beside a device. Its size, colour and bold or italic can still be changed on top.

Open and Save As start in the folder you used last. In the desktop app, Open and Save As now start in the folder of the last drawing you opened or saved, also after a restart, and exports remember a folder of their own. Chrome and Edge remember the folder for Open and Save As too.

Cables hop where they cross, whatever their type. An IPsec tunnel crossing another cable now shows a hop clear of its own casing, its lock badge moves off the crossing, and an Arc cable hops as straight cables do. Before, neither showed a hop.

A bigger mark in Studio's corner. The Drawbridge mark at the top left of Studio is larger.

Considerations before you update: none.

v0.97.6 — 2026-10-15

Save as asks for a name in Firefox and Safari. In a browser without a save dialog of its own for web pages (Firefox, Safari, Brave, and Chrome on a plain http:// address), Save used to name the file after the drawing and drop it in Downloads without a word, and Save as… did exactly the same. Now the first Save of a drawing, and every Save as…, ask for the file's name. End it in .vsdx to save in Visio format. A plain Save after that reuses the name. The folder is still the browser's to choose: the sheet tells you which setting makes it ask, for example Always ask you where to save files in Firefox.

Paste lands where you point, and never on top of anything. Press ⌘/Ctrl V with the pointer over the canvas and the copy comes down centred under it. With the pointer elsewhere, it lands in the middle of the view. If that spot is taken, the copy moves to the nearest clear space beside it, so pasting twice no longer stacks one copy on the other, and Duplicate puts its copy next to the original instead of over it. This also fixes a pasted zone landing on another diagram and then carrying that diagram's devices away when you dragged it. Pasting into the empty middle of a zone still puts the copy inside the zone. A rack copied together with its equipment now brings the equipment along, in the same slots.

A pile of selected devices shows which one is on top. When devices overlap and you select them, the one in front keeps the solid selection ring and the ones under it get a dotted ring, instead of every ring crossing every tile.

Right-click the drawing. A right-click (Ctrl-click on a Mac, or Shift+F10) now opens a menu of what you can do with what you clicked: cut, copy, paste here, duplicate and delete; bring to front, send to back, group and ungroup; copy and paint a look; and, on empty canvas, add a device or text right where you clicked. Cables, zones and racks add their own rows: add a caption, select both ends, reset the bends you made by hand while keeping the cable's type, select what a zone carries, release or detach. Trace path from here… on one device waits for you to click the far end and traces the path between them. Every row is the same command as its shortcut or its inspector button.

Considerations before you update: none.

v0.97.5 — 2026-10-14

Start on a blank canvas. Studio's empty page now has Start with a blank canvas under its three ways in (paste, open, template). It puts them away and leaves you an empty page to draw on, with nothing placed. If you change your mind, Start from a paste, a file or a template… at the top of the page brings them back.

Considerations before you update: none.

v0.97.4 — 2026-10-14

Grabbing a cable's end grabs the end. With a cable selected, the round handle at each end now sits on the cable just clear of its device instead of on the device's edge. Wherever the pointer shows the grab hand, pressing drags the cable's end. Before, about half of that area moved the device instead, most often on Windows and on cables leaving a device at an angle.

Deleting a rack deletes what is in it. Its mounted units, and anything else standing in it, now go with it. Before, they were left floating where the rack had stood. One undo brings everything back. Anything you have detached from the rack, or that sits on another or a locked layer, stays, just as it does when you drag the rack. Deleting a zone still leaves its devices where they are.

Delete a group without deleting its devices. Click a group's frame on its edge (the dashed outline, or an MC-LAG pair's or a stack's outline), or click the group's name. That selects the group itself: the frame turns solid and the devices' rings go faint. Delete then removes only the grouping, and the devices stay where they are. Clicking a device and pressing Delete still deletes the devices, as before.

Aggregate rings into a grouped pair, and anywhere you choose. Two cables that run into the two devices of a group can now be bound as one aggregate: the group counts as the end they share, and the ring sits across the cables just outside the group's frame. That draws your own MC-LAG without making the pair an MC-LAG. Cables that share neither a device nor a group can be bound too, on purpose: the first press of Bind as aggregate turns it into a warning, Press again to bind anyway, and the second press draws the ring midway along the cables.

Considerations before you update: none.

v0.97.3 — 2026-10-14

A text box always holds its text. The box now grows to fit what you write: as you type, when you make it narrower, or when you make the text bigger. A box that fits its text snugly shrinks back when you widen it or delete some. The outline, its handles and its connection points always sit around all of the text, so a cable attaches to the box you can see. You still set the width, and you can still drag a box taller than its text; dragging it shorter stops at the last line. Double-click a text box and the editing field now opens right on top of it, at its size and in its type, and grows as you type. It used to open as a small field near the top, with the rest of the text showing underneath.

A pasted screenshot is readable as soon as it lands. A pasted or dropped image now appears the size it looked on your screen, up to about half of the visible canvas, so it always arrives whole and in view. Before, every image was shrunk to the size of a device tile, which made screenshots unreadable thumbnails. Images are never enlarged, so a small picture stays sharp. To use a vendor icon as a device, set it as the device's custom icon.

Considerations before you update: a text box in an existing drawing that was too short for its text grows to fit the next time you edit it.

v0.97.2 — 2026-10-13

You can see where a flow arrow or line will fasten before you let go. While you drag an end, a label beside the pointer says what letting go would do — Fastens to Core switch, Fastens to DMZ — and a dot marks exactly where the end will land; the arrowhead now stops at that dot instead of running into the middle of the device. Inside a zone, where an end does not fasten, the zone's frame lights up as a dashed line and the label reads Free end · fastens on the zone's edge, so it is clear to move out to the edge. A zone or rack under a dragged cable or arrow now lights up as the target, as a device always has; it used to show nothing at all.

Considerations before you update: none.

v0.97.1 — 2026-10-13

Flow arrows and lines fasten to zones, like cables do. Drag the end of a flow arrow or a plain line onto the edge of a zone, context or rack and let go: the zone lights up as you reach its edge, and the end fastens exactly where you dropped it. Move or resize the zone and the end goes with it, keeping its place along the edge. Inside a zone, away from its edge, nothing is fastened, so an arrow drawn across a zone still stays exactly as you drew it.

Considerations before you update: none.

v0.97.0 — 2026-10-11

Note: this release shipped without the usual pre-release QA pass — The full hands-on test pass was skipped for this release. Studio was used day to day through a trial on the maintainer's Mac, and Studio as the default, the six themes, the pack preview, a 1,929-device import and switching back to Classic were checked on a copy of the production build.

Studio: a new layout, and the one Drawbridge now opens in. An app bar across the top names the document and holds its menu, with Draw, Tables, Checks and Pack views in the middle and Import, Export, Share and the ☰ app menu at the end. The pages run down the left as pictures of each page, a tool dock floats along the bottom of the drawing (Select, Device, Cable, Zone, Rack, Text and Flow, each on its own key), and the Facts panel on the right shows whatever you select, with Facts, Cables and Look tabs. Classic, the layout Drawbridge has always had, stays one click away: ☰ → Layout → Classic. Once you choose it, Drawbridge opens in Classic on that computer from then on. Your drawings, files and exports are the same in either layout.

Six themes for Studio. ☰ → Preferences → Theme picks Warm slate, Graphite, Blueprint, Swiss, Fabric or Bubblegum, each with a light and a dark side, and the change is immediate. A theme changes how the app looks while you work, including the drawing surface; exported files never change with it. The manual shows every theme, light beside dark.

Place a device where you are pointing. Press D and a device picker opens at the pointer: type what it is and press Enter. Drag a cable into empty space and the same picker asks what is at the other end, then connects it.

Tables: the page as rows. The Tables view lists the page's devices, cables, optics, zones and racks, and you can edit them in place, add a cable between two named devices, or paste rows in from a spreadsheet.

Checks: what is unfinished. The Checks view lists what looks incomplete or inconsistent on the page — a device with no cables, a cable with no ports, a copper run longer than its standard allows — with a fix beside each one where there is one, and Ignore where you know better. The count sits beside Checks in the bar.

Pack: the handover file, chosen and previewed. The Pack view puts the handover together: tick the drawing sheets and the tables to include — the cable schedule, the inventory, the optics, the revision table and rack elevations — and press Preview to see the file as it will print before you save anything. Save PDF or print… prints exactly what you previewed.

Search everything with ⌘K (Ctrl K). One box finds every command, every shape to place, every page and the devices, cables and groups on any of them, and the manual's topics.

A length for every cable. A cable can carry its length, picked from lengths that fit its type or typed in. A copper cable cannot be set longer than its standard allows, and Checks flags one that already is.

Choose the side a stack's cables run on. A stack's stacking cables can run down either side of the column.

Your own buttons on the dock. The + at the end of the tool dock adds any command as a button of its own, up to six, kept on this computer.

Fold a panel away. The button in each docked side's top corner minimizes it to a narrow rail and brings it back from the same place; View → Minimize all panels and Restore all panels do every side at once.

The Drawbridge mark in the title band. Every PDF's title band now carries the Drawbridge mark beside Drawbridge and the version.

Starts faster. Reading DOT files, code highlighting in the manual and the handover pack now load the first time you use them rather than at startup.

Considerations before you update: Drawbridge now opens in Studio for everyone who has not chosen a layout, which is everyone who has not tried Studio before. The first time, a tip says where Classic is and offers Back to Classic; choose Classic and it stays your layout on that computer. Nothing in your drawings changes with the layout. A drawing with a cable length or a stack cable side set needs this version or later to show them; update every machine that edits the drawing before relying on them.

v0.96.4 — 2026-10-10

An MC-LAG pair's and a stack's members can be spaced however you like, and turned the other way round. Making a pair or a stack now keeps the spacing you placed the devices at, when they already stand in a row or a column, instead of pulling them to a fixed gap. Afterwards, hold Alt while dragging a member, or double-click it first (or select the group and press Enter), and drag it or nudge it with the arrow keys to any distance in any direction; the ICL, the stacking ring, the numbers and the outline follow, and the spacing stays — reopening the file, a collaborator's view and re-typing the group to what it already is all leave the members where you put them. Before, pressing the lit MC-LAG or Stack choice put a moved member straight back at the default gap. The Group section says so now, right under the Type row, because a press on a member drags the whole group and the double-click was easy to miss. A new Orientation row there — Horizontal · Vertical — re-lays a pair or a stack along the other axis at any time, keeping your spacing and the member order, as one undo step.

Live sharing in the browser uses a patched TLS library. The browser build's sharing module now carries rustls 0.23.45, which refuses handshake messages sent at the wrong encryption stage instead of accepting them. Connections were never open to tampering — the handshake stays authenticated — but some of its messages could travel unencrypted. The desktop app's sharing module comes prebuilt from upstream and has no fixed release yet; it will follow when one exists.

Considerations before you update: none.

v0.96.3 — 2026-10-10

Fixes from an outside security test of the live site, 2026-10-09. The test found no way in and no exposed data. These are the code findings.

Compressed draw.io files work with the hosted API. Describing or exporting a file whose pages are compressed, which draw.io wrote by default for years, used to fail with a server error. It now works, and a damaged compressed page is refused with a clear message saying what is wrong.

SVG pictures in an imported drawing are cleaned like pasted icons. An SVG image inside a .drawio file now loses any script and any reference to a website before it reaches the canvas or an export, so a shared file cannot carry either into an SVG you send on.

A label with an enormous unbroken word no longer stops a file from opening. It used to fail with "Maximum call stack size exceeded"; it now opens and the label is shortened to fit.

The site cannot be shown inside another site's frame, and the Mac and Linux downloads are served with their proper file types.

Considerations before you update: none.

v0.96.2 — 2026-10-09

The rest of the 2026-10-09 security review. Everything below was found in the same review as v0.96.1's fixes. None of it exposed a drawing or any other data.

A shared drawing cannot slip a web address into your exports as a logo. The title-block logo and the background logo now only ever hold an image stored in the drawing itself, like every other picture. A logo that pointed at a website, whether from a file or a collaborator, is left out, so an exported SVG or HTML viewer never fetches anything when someone opens it.

A drawing can no longer be frozen by impossible sizes. A position, size or font size that no real drawing has (infinite, or millions of times too large) is now made sensible as it arrives, whether it comes from a collaborator, a paste or a file. Before, one such value could stall the cable routing for everyone in a live session.

The local API answers only to your own machine's names. Drawbridge --serve now refuses a request that names any host other than 127.0.0.1, localhost or [::1], and one your browser marks as coming from another site. A web page could otherwise reach it by pointing its own address at your computer.

The desktop app runs on Electron 43.7.9, which carries the latest Chromium and V8 security fixes.

A web page can no longer cancel a cloud sign-in in the desktop app. While you sign in to Google Drive, OneDrive or Dropbox, the app listens on your own machine for the answer. Another tab could poke that listener and end your sign-in; now only the real sign-in page gets through.

Links in a drawing cannot disguise where they go. The desktop app no longer opens a link that hides a different site behind a name, such as https://trusted.example@somewhere-else.example/.

Compressed draw.io files are read more carefully. A file whose pages unpack to more than 64 MB in total is no longer unpacked page after page, and a page carrying a document type declaration is not read at all. Ordinary compressed files, including old draw.io ones, open as before.

The hosted API is sturdier. A render's upload now holds its place from the moment it is accepted, a render that runs over its time limit is stopped together with everything it started, and an error inside the service no longer shows its internal file paths to the caller.

The gallery takes screenshots up to 40 megapixels, which still includes an 8K screen. Larger images are refused with a message saying so.

The privacy page describes the gateway's log. The gateway in front of this site keeps a short technical log of requests, including the address they came from, for up to five weeks. The page now says so.

Running the desktop app from a script no longer pops up an error when its output is piped into a command that stops reading early, such as head.

Fixed: a custom SVG icon with styling inside it was damaged when the drawing was saved, and showed broken when the file was opened again. It now saves and reopens intact, including icons you added before this version.

Considerations before you update: none.

v0.96.1 — 2026-10-09

Security fixes for the hosted API and the feedback form. A security review of the whole project on 2026-10-09 found ways for one person to make a service slow or unavailable for everyone else. None of them exposed a drawing or any other data. This release fixes the ones that mattered most.

The hosted API stays responsive whatever it is sent. A document built to trip the step that suggests a file name could keep one render server busy for minutes, outside the time limit meant to stop exactly that. That step now takes under a millisecond on any input.

One MCP request is one request. The hosted MCP door accepted a batch of up to a hundred calls in one request and ran them all at once, past every limit it has. It now answers a batch with an error asking for one request at a time, which is how assistants already call it.

The size limit holds when you edit, too. The hosted API refuses a drawing with more than 2,000 devices and cables, but an edit could add any number of them to a small one. Edits are counted now, and one change set carries at most 10,000 changes. Desktop and command-line edits get the 10,000 limit as well.

The feedback form can no longer be knocked over. It could be crashed on purpose, and every crash reset its limits. It now turns a flood away before reading it, refuses submissions another website tries to send through a visitor's browser, and files at most 20 reports an hour across everyone. A report sent from the form itself works as before.

The desktop app ignores two ways of injecting code at launch. Starting Drawbridge with NODE_OPTIONS set or with a debugger flag no longer runs anything inside it.

Fixed: in Save to a cloud, a file name you started typing straight away could lose its keystrokes when the folder list finished loading, and the drawing was saved as Untitled. The name field now keeps the cursor.

Considerations before you update: if you call the hosted MCP door from your own code, send one JSON-RPC request per POST: a batch is now refused. A single edit through the API or the command line is limited to 10,000 changes.

v0.96.0 — 2026-10-08

Note: this release shipped without the usual pre-release QA pass — The full hands-on test pass of the editor was run the night before this release.

Turn two switches into one MC-LAG pair, or any number into a stack. Select the devices and pick MC-LAG or Stack under Type in the inspector. A pair lines up side by side inside one outline, with the ICL drawn between them. A stack lines up as a numbered column, with its stacking cables ringing down one side and back to the top. Both follow the devices: stand the pair one above the other and the ICL moves to the sides that now face each other; lay a stack out as a row and the ring runs along the bottom. The ICL and stacking cables are drawn for you and stay out of the cable schedule and the optics count. Collapse either one and it becomes a single tile that keeps its outside cables. Pairs and stacks are saved with the drawing, shared in live sessions, drawn in every export and kept in .drawio and Visio files.

A Desktop and a general Endpoint. The Laptop now has two neighbours: a Desktop for the machine under the desk, and an Endpoint for a client you cannot or need not name. Searching for "desktop", "pc" or "workstation" finds the Desktop, and "client" or "end device" finds the Endpoint. An imported switch neighbour that reports itself only as a station now arrives as an Endpoint.

Find a disk shelf as Storage. Searching the palette for "das", "jbod" or "disk shelf" now finds Storage, which is how a direct-attached shelf is drawn.

MC-LAG is easier to find. The manual and the inspector now say that binding cables that run to two peers makes an MC-LAG, and point to the new MC-LAG pair.

Copper SFP modules are counted. A new cable type, RJ45 copper on SFP, is for a copper cable between two SFP ports. The optics block, report and CSV now ask for a copper module at each end, from 1G to 10G, instead of counting nothing. Above 10G no such module is made, so the count shows a gap rather than a part you cannot buy. A cable type cannot tell when one end is a built-in RJ45 port, so the count says so: take one off for each such end.

Small labels get small boxes. Drag a Text block or a Callout smaller and it now stops at one line of its own font size, so an 8 px note hugs its line instead of sitting in a box three lines tall over what it labels. Large text keeps a box big enough for its first line.

Copy and paste with draw.io. Shapes you copy here paste into draw.io as shapes, not as one text box full of code, and shapes copied in draw.io paste here as shapes too.

Fixed: when you collapsed a group, its cables could leave the tile from the far corner and run back across it. They now leave towards where they are going.

Fixed: in a saved HTML viewer, switching a device type off in the legend now also hides the marked paths that run through those devices, instead of leaving their arrows behind.

Fixed: pasting a device and its cable into a different drawing could connect the cable to an unrelated device there. The cable now reconnects only to the device it was copied from, and is left out when that device is not in the drawing.

Considerations before you update: a drawing with an MC-LAG pair, a stack, a Desktop or an Endpoint needs this version or later to look right. An older version shows a pair or stack as an ordinary group, without its link or ring. It keeps the type when you move or add devices there, but loses it if you rename, recolour, collapse or regroup the pair or stack; this version then opens it as an ordinary group, and choosing MC-LAG or Stack under Type again brings it back. An older version shows a Desktop or an Endpoint as a plain box. Update every machine that edits the drawing before you use them.

v0.95.0 — 2026-10-06

Note: this release shipped without the usual pre-release QA pass — marked paths were tried by hand on a copy of the production build, in light and dark; the full manual pass runs overnight, and anything it finds ships in the next update.

Keep a traced path on the drawing. After Trace path, press Mark this path and the way it found becomes arrows from the first device you picked to the second. With several ways, mark the one you want from its row. The arrows run beside the cables, never on top of them, and go round the outside of a bundle. They follow when you move a device or reroute a cable, and they thread through a device you cable in between. Select a path to change its colour, thickness, line style, arrowheads and name, just like a connector. To mark a way of your own, Shift-click three or more devices in order. Marked paths are saved with the drawing, shared in live sessions and drawn in every export.

Considerations before you update: a drawing with marked paths needs this version or later. An older version shows each path as a stray object and loses it when it saves, so update every machine that edits the drawing before you mark paths in it. Saving as Visio (.vsdx) leaves marked paths out, and says so.

v0.94.20 — 2026-10-06

Stop sharing is immediate again in the desktop app. After the Join dialog had checked a saved session whose host was offline, stopping a shared session, or starting one on the local network, paused for about three seconds. It doesn't any more. Checking whether a saved session is online also no longer shows that host your app's identity.

Sharing a drawing no longer fills your browser's storage. While you hosted, the app quietly kept up to five copies of the drawing in the browser, which nothing ever read back. With photos in the drawing, they could crowd out the crash-recovery copy. They're gone, and old ones are cleared the next time the app starts.

Saved SVG and HTML files are a little smaller. Styles that only matter while editing (hover, selection, grab bars) are no longer written into exported files.

Tunnels that arch over the SD-WAN hub row start apart. Two arches ending at the same hub used to leave it at one point and run as one thick line for a stretch. Now each starts at its own point, the longer one outside.

A very large drawing stops retrying full-quality cabling on every open. If the background pass that refines cables ran out of time once, the app remembers that drawing's size until the next update, instead of spending up to eight minutes trying again each time.

Considerations before you update: none.

v0.94.19 — 2026-10-05

The website and the web app stay up while a new version goes live. Every release used to make the whole site unreachable for about ten seconds while it switched over; now the switch takes a fraction of a second. The first release to show the difference is the one after this. This one still switches over the old way.

Considerations before you update: none.

v0.94.18 — 2026-10-05

Updates download only what changed. A new version used to make the app fetch the manual, the importers and the file converters again, about 690 KB compressed, even when none of them had changed. From the next update on, a new version costs about 60 KB.

The SD-WAN generator draws three and four regions cleanly. A tunnel between two regions that are not neighbours now arches over the hub row instead of running straight through the hub of the region between them. When several tunnels arch, each one rides above the ones it passes over, so no two of them are drawn on one line.

For self-hosters, the render service is never built from an installer that has not been checked. The auto-deploy now waits for the release's checksum file instead of building without it.

Considerations before you update:

v0.94.17 — 2026-10-05

The hosted render API can only be reached through the website. The render and MCP service behind drawbridge.fortiknight.com/api/ used to answer on the server's local network as well, which skipped the website's size limit and its request log. That way in is closed. Calls to the public address work exactly as before.

For self-hosters, a deploy that changes deploy/deploy.sh now runs the new script. Until now, the auto-deploy ran the previous release's script for that one deploy, so a new deploy step took effect a release late.

Considerations before you update:

v0.94.16 — 2026-10-05

A zone's name gets out of the way of a cable. When a cable crosses the top edge of a zone where its name sits, the name slides along that edge to a clear spot. If you picked a position yourself with Name position, it stays where you put it.

An aggregate that leaves a device on opposite sides gets a ring round the whole device. A ring across the cables could never reach members leaving east, west and south at once. Now it circles the device and visibly takes in every member. Dragging it makes it an ordinary ring again.

The regional SD-WAN template's hub-to-hub tunnels arch at three heights instead of lying on one line along the hub tops, so each tunnel and its padlock can be told apart.

A link that is not WAN or wireless no longer draws a carrier caption. Switch a WAN link back to Normal and its Telia · SE-12345 caption goes with the fields that edit it. Switch back, and it returns as it was.

Every SR optic is named with its 850 nm, so the bill of materials counts one part as one line. A plain 25G SR link and the children of a 100G SR4 breakout are now the same SFP28 25G SR 850 nm.

Shared sessions stay responsive while someone else drags. On a large drawing, a collaborator's drag used to make your app re-route the whole page on every frame. Cables now follow their drag straight, and route once it stops.

Considerations before you update:

v0.94.15 — 2026-10-05

Importing a big drawing no longer freezes the window. Automatic layout now runs in the background. On a drawing of 1,400 devices, the second-long pause where nothing responded is gone.

The app starts faster. The template thumbnails no longer carry the whole world map, so the gallery builds from a third of a megabyte instead of 17.

Diamonds, ellipses, hexagons and stars name themselves inside the shape. Their caption used to sit at the bottom of the bounding box, across the outline.

Cables keep out of each other's way:

Cable labels:

Joining a collaboration session downloads the drawing once, however many people are already in it. It used to be once per person.

Considerations before you update: in drawings you already have, a diamond, ellipse, hexagon or star with its default caption shows that caption in the middle of the shape rather than at its bottom edge. Other shapes and devices are unchanged.

v0.94.14 — 2026-10-05

Share what you drew. The website now has a community gallery at /gallery/, showing drawings and setups people have made with Drawbridge. Use the gallery's form to send a screenshot of yours.

The privacy page says exactly what is kept and for how long. Nothing in the app itself changes in this release.

Considerations before you update: none.

v0.94.13 — 2026-10-05

The security updates announced for v0.94.12 are in this release. v0.94.12 did not contain them. Its notes said the desktop app had moved to Electron 43.7.7, and that the hosted render API and MCP server had picked up fixed versions of the libraries they parse requests with. That release was built from an older set of installed packages than the one it recorded. So the v0.94.12 desktop apps still run Electron 43.1.0, with the four security issues 43.5.0 fixed. The desktop app's own MCP server and the hosted service also still had the old libraries. This release contains what v0.94.12 described. The web app and the website were not affected.

The release checks now catch this. A release now refuses to build when the installed packages differ from the recorded ones. The finished Linux apps must also report the same Electron version the release records.

Considerations before you update: none. If you use the desktop app, install this version: it is the first release with the Electron security fixes. The hosted API and MCP server are updated on our side.

v0.94.12 — 2026-10-05

Correction: this release did not contain the security updates described in the next paragraph. Its desktop apps still run Electron 43.1.0. v0.94.13 contains them; see its notes.

Security updates. The desktop app now runs on Electron 43.7.7, which fixes four security issues in Electron's sandboxing and in how its protocol handlers check cross-origin reads. The hosted render API and MCP server pick up fixed versions of the libraries they parse requests with.

The hosted API and MCP server accept only what they document. An argument a tool does not list, or a query parameter a route does not list, is now refused with invalid_input and the field's name. It used to be quietly ignored, which left a caller believing they had asked for something they had not. A theme other than light or dark is refused the same way. A document that is not well-formed draw.io XML now gets invalid_input instead of a server error. A document carrying a DOCTYPE is turned away before anything reads it.

Considerations before you update: if a script sends the hosted API or MCP server a field or query parameter it does not document, that request now fails with invalid_input instead of succeeding without it. The command line exits with code 2 rather than 1 when a --doc file is not readable draw.io XML, the same code as any other bad input.

v0.94.11 — 2026-10-05

A zone's name can sit anywhere along its top or bottom edge, on more than one line. Select a zone and pick Name position in the inspector: top left, top centre or top right, or the same three along the bottom. Press Shift+Enter while typing a zone's name to break the line, so a site can read its name over a second line. A zone's Subnet now has a line of its own under the name, so it reads Stockholm DC, then 10.20.0.0/16. The position is kept in .drawio and Visio files, travels with the format painter from zone to zone, and is shared with collaborators.

Editing big drawings does less work. Typing a device's name no longer redraws every cable on the page with each keystroke; on a drawing of almost 600 devices a keystroke now costs about a third less. Dragging a device redraws its own cables, not all of them. Auto-save no longer interrupts a drag to save the whole document mid-gesture; it waits until you let go.

The web app opens sooner on a first visit. The connector router used to start loading only after the rest of the app had arrived, in four steps one after another. It now loads alongside, about 0.2 seconds sooner to the canvas on a slow connection. Later visits were already instant and do not change.

Cables look right in three more places. On a diagonal fan of parallel Direct cables, the outer cables now end on their devices instead of floating beside them. Two devices about 20 px apart are joined by a square cable, out, across and in, instead of one slanted line ending inside a tile. A cable's highlight goes out when the pointer leaves the canvas quickly, instead of staying lit. A cable's caption no longer sits between two cables running side by side, where it could be read as either one's: it moves to its own cable's outer side, unless you have placed it yourself. A ring waiting for its second cable is named by its cable in the Ring picker, for example "Ring 2 ×1 — Hub–Core-SW", and the Connections tab points you to it the same way, so making another ring no longer leaves you looking for a number that has moved.

Imports and templates. A UniFi device export is drawn top-down, gateway on top and access points at the bottom; it used to come out upside down. The AMER, EMEA and APAC regional templates open at a size where device names can be read, instead of at a third of that.

The desktop app is 7.6 MB smaller to download and install. It no longer carries files only the web version can use.

Command-line runs keep stderr clean. A successful --export or --compare run writes nothing to stderr, so a script that treats any stderr output as a failure no longer trips on the browser engine's own log lines. Set DRAWBRIDGE_CHROMIUM_LOG=1 to see them when you are diagnosing the renderer.

Considerations before you update: a zone that has a subnet now shows it on a second line under its name, so its title is one line taller.

v0.94.10 — 2026-10-05

Working together is smoother on big drawings. When someone you share with drags a lot of devices, your screen now catches up in one step instead of redrawing every frame you missed. Their outline rings no longer repaint on every pan and mouse move. A big selection no longer rides along in full with every cursor movement, so sessions over the relay use far less bandwidth. Joining a long-edited drawing is lighter: the incoming drawing is no longer copied over and over as it arrives. And opening a file no longer keeps the history of earlier drags inside the document, which made later joins and saved snapshots slow and large.

Editing stays quick. Dragging a device on linked cable runs no longer slows every later route on that part of the drawing until you reload. Typing a device name no longer re-places every port label on the page with each keystroke, and labels that did not move are not touched. An inventory whose Type column holds model numbers imports instantly; at a few thousand rows each keystroke in the Import box used to wait half a second or more.

Small fixes. Double-clicking the middle of a Line opens its caption instead of adding a bend. The legend's Line row puts its name beside its sample line, not on it. The template gallery stays away while you type the first text block on an empty page. And entering Compare keeps the changed parts of the drawing clear of the Compare panel.

Considerations before you update: none.

v0.94.9 — 2026-10-04

Big pastes import without the wait. A one-line UniFi or Meraki controller export, which is what their APIs hand you, used to freeze the Import box for seconds, about six at six 48-port switches, and again on every keystroke after. A long note in a CSV row cost half a second. Both are now instant. A big controller export no longer stalls while each device is looked up line by line. And an import that fills in serials or other details on devices already on the page lands at once: 1,030 serials on a large drawing used to hold the window for 45 seconds.

Large drawings export as PNG. A wide drawing, a few hundred devices across, failed with "PNG encoding failed" because it asked for a bigger image than a browser can make. It now exports at the largest size that fits. The render API's error messages say what went wrong, without the renderer's internal log lines.

Editing big drawings is lighter. Dragging or nudging a large selection spends about a third less time per step. Dragging devices with hand-shaped cables between them redraws the page once per step, not once per cable. Duplicating or pasting a big selection is about three times quicker. With the Connections tab last open, edits no longer redraw it while the inspector is put away. A docked Drawing panel or Cable schedule no longer rebuilds itself on every drag step, or on every click that only changes the selection. A one-page PDF reaches the print dialog sooner, and saving or auto-saving an opened file no longer re-reads what it kept from the file. Using a My Shapes device's port list no longer makes every later click in the app slower until you reload.

A cable between two touching tiles is a joint, however it was drawn. A cable from a .drawio file or an import, which records no side to leave from, used to loop out over both tiles and back when the two were dragged together. It is now the short joint at the seam, as a cable you drew yourself already was.

An arrow fastened to a device stays pointing into it when you move the device over the arrow's bend. The arrow used to run back out the far side, head pointing away. The bend is kept, so moving the device back gives you the arrow you drew.

Unlinking one of two cable runs through a device keeps its cables flowing through the icon. The other run no longer pushes them out to the device's borders while Through icons is still on.

A cable with a width of its own swells by the same amount whatever its type when you point at it or select it. At 6 px, a fieldbus cable used to swell far more than a trunk, a management cable got thinner, and some types did not change at all.

Smaller fixes. The Save button's tooltip names the format the open document will be saved as, so a Visio file no longer reads ".drawio" (the auto-save switch too). The connector tooltip marks the type new cables are actually created with, instead of always claiming Auto. The Connections tab names link types the way the rest of the app does, such as IPsec tunnel, Trunk and HA / heartbeat, rather than their internal words. Compare's change list says a renamed device once: "Re-labelled SW-02 → SW-02B". A palette tile you put away with Escape no longer keeps a highlight that made it look armed.

The manual says what the app does about a device standing on a Purdue model's level rail, the PDF's colours (always the light theme, on white paper), what a Containerlab export brings back when re-imported (the topology, not the drawing), and pages you have not visited being routed before a PDF or HTML export.

Considerations before you update: none.

v0.94.8 — 2026-10-04

The hosted render API and MCP server stop turning callers away while renderers sit idle. Each renderer draws one diagram at a time, and requests used to be handed out blind to which renderers were busy. So a request could be refused as "busy" while others stood free: 37 times in the last month, at a few dozen renders a day. Each request now goes to a free renderer. A request that collides with a busy one is quietly retried on another. A burst waits a few seconds for a renderer to free up instead of being refused, and only if none does is the caller told, with a time to retry. More renderers now start before the free ones run out, up to twenty, as far as the server's memory allows.

An aggregate's ring reaches every cable in it. When some of an aggregate's cables left a device by one side and others by the next — eight going right and one going down, say — the ring was drawn round the eight and stopped short of the ninth, as if it were not part of the aggregate. The ring is now one thin oval across all of them, cutting across the device's corner if it has to.

One title for the whole document. Printed sheets, the PDF, the printed cable schedule and its labels, and the HTML viewer all name the document the same way now: the file's name without .drawio, or Untitled before it has been saved. They used to take the name of whichever page you happened to be on, and a PDF of an opened file kept the .drawio in its title. Each page is still named in its own place, and a title you give the document under Document info still comes first.

Star, note and triangle take cables. They always did; now the manual says so instead of promising otherwise. Only the Line and the Flow arrow take no connections.

Edit layout keeps docked panels in their dock. A Properties panel docked to the left was drawn 12 px past the window's edge, with its name cut off, and the pages bar hung over the edge of its dock.

Considerations before you update: an install link copied after this update is titled by the document rather than by the page you were on, so an installer who receives a re-sent link starts that link with fresh ticks on their phone. Progress they already sent back to you stays in your drawing. Before this, re-sending a link from a different page did the same.

v0.94.7 — 2026-10-04

When the host stops sharing, everyone hears at once. A view-only guest can never take over a session, so when the host stopped sharing with only view-only guests connected, they saw Reconnecting… for five minutes before anything said the session was over. They now see Session ended straight away, keep their copy of the drawing, and can share it themselves.

A refused join says why. After five failed attempts in a minute, or after the host has removed you, joining used to fail with an unreadable ApplicationClosed(…) error. It now tells you what to do: wait a minute and try again, or ask the host for a new link.

Panels keep up after you join a session. Joining a session with Replace & join left the Objects, Cable schedule and History panels showing your old file, and they stopped updating as people edited. They now follow the shared drawing. The Collaborators panel no longer names the host's page by a title from your old file.

Sharing reads right. A guest's status pill now describes its own connection to the host. It used to say "relay" as soon as anyone else in the room was relayed, even when that guest was connected directly. On the host, a view-only guest's name is shown in full in People: the view only tag and the connection tag move under the name instead of cutting it to three letters. If a session starts but its invite link cannot be built, the Share popover now says so and keeps Stop sharing, instead of losing the link, the People list and the way to stop.

The AI assistant can rejoin after being removed. When the host removed the assistant and then gave it a new invite, joining failed with "already in a session — call collab_leave first", though it had already been removed. The new invite now joins directly.

Bundles read the same whatever the connector type. Switching a hub's cables from Auto to Direct or Arc could reverse a bundle, or put its ports in an order like p1 p4 p3 p2 with a crossing. Direct and Arc fans now follow the port names, as Auto does. A device sitting exactly level with the hub no longer reads its ports the other way round from the same device one pixel higher or lower. Every bundle on one side of a device now reads in the same direction.

A cable is never hidden under a through cable. After you moved the device where a through cable turns, a second cable drawn between the same two devices could run underneath it, so a click selected the wrong one. It now keeps its own lane.

Imports report and draw what you gave them. A device that the source puts outside a group is no longer drawn inside that group's box. A mistake in a pasted DOT graph now gives the line it is on and says in plain words what is wrong, instead of the parser's list of expected tokens. A port-channel with nothing drawn is reported once, by name once.

The legend shows only what you can see. A device kind, link type, speed or carrier that exists only on a hidden layer no longer gets a legend row, in the editor, in an SVG export or as a switch in the HTML viewer.

Smaller fixes. Every Asset data field is now labelled, so a filled-in section says which value is the serial and which is the management IP. A disabled inspector button looks disabled. The Align menu's gap reading follows the selection while the menu is open. Tab reaches a palette tile's ★ and copy buttons. The View menu no longer ends on a stray divider. PDF can be exported whenever any page has something on it, not only when the page you are on does.

Considerations before you update: in Auto, a bundle that sits exactly level with a hub and shares a side with another bundle now lists its ports in the opposite order, the same order it already used one pixel off level. The Asset data section is taller because each field now has its name above it.

v0.94.6 — 2026-10-04

A very large drawing is kept between visits. After importing a campus of nearly two thousand devices, nothing was saved for next time: the drawing was too big for the browser's usual storage, and a reload came back empty. It is now kept in the browser's larger store instead, and comes back on reload. Only if that store refuses too does a message say, once, that the drawing is not being kept.

⌘Z / Ctrl Z works straight after you tick a box or move a slider. Tick Follow on a port, nudge the Thickness slider or change a dropdown, then press ⌘Z at once, and the change is undone. It used to do nothing until you clicked somewhere else first. Text fields still undo your typing.

One LLDP capture at a time draws each switch once. Pasting two switches' neighbour tables one after the other could draw a switch they both see twice, and the switch's own capture then drew it a third time. A device now remembers its LLDP Chassis ID — a new field beside Serial, which you can see, search and edit — so later captures find it.

Racks and their units stay together. Move here on a rack now takes the units mounted in it to the new layer, so hiding that layer no longer leaves a unit floating on an empty page. A plain click on a mounted unit no longer moves it down a U at a time.

Nothing takes a cable it should not. When a layer is hidden or locked while you are pointing at a device, the device's connect handles now go away at once, so you can no longer draw a cable from something invisible or locked. A legend row's coloured dot no longer starts a cable when pressed — it selects like anything else.

Applying a template or opening a file starts with nothing selected. A cable you had selected before could stay "selected" on whatever cable in the new drawing shared its internal number, so Delete removed a cable nobody picked.

Undo after editing the title block works step by step. Undoing a title-block edit could empty other fields or leave an empty block behind after a few presses. Each undo now takes back one edit, and adding a title block is one undo step instead of two.

Fit frames what you can see. With a map's layer hidden, or a note switched off in the View menu, Fit framed the hidden things too and left the visible drawing small in a corner. It now frames only what is drawn.

Exports and imports keep what belongs. A Graphviz DOT export keeps a cable that is drawn to a world map, and the map with it. A DOT import no longer draws a cable to a Purdue frame — the editor never allows one — and the import preview lists that line as skipped. In an isometric SVG export, flow arrows and title blocks now lie flat on the floor, as they do on screen.

Rings, outlines and Fit. An aggregate's ring label (Po1 and the like) no longer hides under a port name — the port names now move out of its way, as they already did for a cable's caption. A very thick cable keeps a visible selection outline: from about 19 px the outline used to be narrower than the cable itself. Fit no longer leaves a corner of the drawing under the minimap or another floating card; it slides the drawing clear, and only shrinks it a little when sliding is not enough.

A basic shape's caption opens in draw.io where you put it. Rectangles, ellipses, diamonds and the other basic shapes draw their caption at the bottom of the shape, but the saved file told draw.io to put it at the top, so the same file showed the caption in two places. It now says bottom. A file saved before this is corrected the next time you save it.

Imports and tracing say what is true. In a shared session where you can only watch, Import is switched off and says the document is view-only, instead of announcing "Imported 2 devices" while nothing arrived. A Containerlab import no longer draws two group boxes overlapping each other. In the trace panel, a way whose every cable already belongs to a shorter way says "shares every cable", rather than showing a colour you would never find on the drawing.

Updates download less. The manual now loads the first time you open it, rather than with the editor, and still opens offline. The map outlines no longer download again with every update, because they are no longer bundled with the part of the editor that changes every release.

Smaller fixes. Typing a device kind's exact name in the device picker and pressing Enter picks that kind — "Server" no longer becomes Auth server, "Switch" L3 switch or "Router" Cellular router. After ticking an entry in a suggestion list such as Functions, Escape closes the list instead of deselecting the device. The Settings button on the auto-link message, and Sharing… in the Collaborators panel, now open the app menu and leave it open. Gap + keeps every row level when a device has no partner in the row above or below. The cable checklist marks a missing port as "(no port)" at either end of a cable, not only the near one. A new, empty drawing with remembered branding no longer shows a clipped strip of the brand in the corner.

Considerations before you update: the inventory CSV has a new last column, Chassis ID, after Power; nothing before it moved. Basic shapes in a .drawio file you save now put their caption at the bottom in draw.io too, as the editor draws it; a file saved earlier is corrected the next time you save it.

v0.94.5 — 2026-10-04

Collaborating across versions no longer loses the drawing. When a host on this version shared a session with two or more people still on v0.91.0 or older, the drawing could be wiped for everyone, the host included. The host now sends each newcomer's answer to that newcomer alone, so an older guest can no longer take someone else's answer for its own.

Joining a session after a few office sessions works. After three LAN-only sessions in a row, joining an ordinary session from its link failed at once with "Could not join: … no join target", and nothing knocked. A reconnect left over from an earlier session was waking inside the new one and ending it; it now ends with its own session.

A file changed by another program no longer leaves a stale Reload on screen — and auto-save waits for your answer. In the desktop app, when the file you have open changes outside Drawbridge while you have unsaved edits, the message offering Reload now goes away as soon as you save. It used to stay, and its Reload would have loaded a version that was no longer on disk. With auto-save on, auto-save now waits while that message is up instead of writing over the other program's change a moment later: the Save button reads Save, and the message says what each answer does — Save keeps your version, Reload loads the one on disk.

Update now no longer gets stuck on an unsaved drawing. In the browser, Update now on a drawing with unsaved changes switched versions first and then asked "Changes may not be saved?" — and Cancel there left the tab half-updated, with a second Update now doing nothing. Now your drawing simply comes back after the update. Only if the browser could not keep a copy of it (its storage is full) are you asked, and before anything changes. A tab that was left behind is finished by Update now.

A corrected install link replaces the old schedule, even in the same tab. Pasting a new install link into the address bar of the tab showing the old schedule now shows the new one, with the phone's ticks intact; a broken link says so instead of leaving the old list up. An import link pasted into an open editor now opens Import too.

Exports draw every page's cables routed. The HTML viewer, the PDF book and the Visio export drew a page you had not opened this session with straight lines from centre to centre, through whatever stood between. Every page is now routed before the export, the way opening it would show. In the HTML viewer, opening a group no longer straightens every cable on the page — only the cables to the opened group change.

Cleaner cables and labels. Port names on a short cable with a caption stay beside their own device, clear of the caption and the line. A cable between two devices whose tiles touch is drawn as a short joint at the seam with both port names showing, instead of vanishing. An arrow or line drawn onto a device that sits a little lower goes straight between their borders with a full-size head, and an arrow end drawn inside a zone stays where you drew it instead of fastening to the zone.

Smaller fixes. In isometric view, a standing cabinet has a solid front, so a device behind it no longer looks mounted on it. Clicking outside Document info keeps what you typed. A Mermaid architecture-beta peer pair (--) imports side by side. A hexagon opens in draw.io as a hexagon rather than a box. A drawbridge --serve that is killed outright now takes its server with it, so the port is free for the next start.

Considerations before you update: in the desktop app with auto-save on, a change another program makes to your open file while you have unsaved edits now pauses auto-save until you choose Save or Reload.

v0.94.4 — 2026-10-03

Zooming a big drawing is smooth too. On a drawing of a couple of thousand devices, every turn of the mouse wheel took twice as long as a frame of panning, because the editor laid out every label on the page again — port labels far too small to read and labels far off screen among them. Port labels are no longer drawn once you have zoomed out too far to read them — below about a third of full size at the normal text size — and come back as you zoom in; device names always stay. On a big drawing, labels far outside the screen are drawn as the view comes near them. Zooming now runs as smoothly as panning, and exports always carry every label.

Considerations before you update: a zoomed-out canvas no longer shows port names below about a third of full size; an export of the same view still carries all of them.

v0.94.3 — 2026-10-03

Panning a big drawing is smooth again. With the overview map showing, panning a drawing of a couple of thousand devices ran at about eight frames a second, because the map redrew its whole thumbnail on every frame. Now only the "you are here" rectangle moves while you pan, and panning runs at your screen's full rate — the same as with the map hidden. Zooming is quicker too. One thing looks different: zoomed out past the drawing, the rectangle can run past the edge of the map while you are still moving, and the map re-frames as soon as you stop.

Placing a device into a rack mounts it. Clicking a shape into a rack, or dragging one off the palette onto it, now makes it a rack unit on the U you aimed at — the rack counts it and the 3D view draws it on the cabinet — exactly as dragging an existing device in always did. A device type you imported mounts at its own height and depth, as it does in the rack builder. Moving a full-depth unit along a rack that shows its rear no longer quietly turns it half depth.

A drawing brought back by autosave asks before it is replaced. If a drawing came back from autosave and is not saved in any file, opening a file over it, starting a new one, launching a file from your computer or dropping one onto the canvas now asks first — and the question says why. It used to count as saved and was replaced without a word. Nothing else changes: no unsaved dot, and closing the window still does not ask.

Undo goes back one edit at a time in the inspector. Renaming one device and then another, or recolouring one ring and then another, are now two undo steps — one ⌘Z / Ctrl Z no longer takes back both.

Smaller fixes. The first click after typing a port name on the Connections card now lands — Follow ticks, Copy and Delete work first time. With the Properties card open, dragging a device towards the right edge pans the canvas before the device disappears under the card. During Compare, the inspector no longer shows text the drawing refused. The overview map draws racks as solid frames, so they no longer look like zones. Searching pim finds the PAM shape, the Objects search hint fits its box, and the folder import's Add to My shapes button has proper padding.

Considerations before you update: the first time you open, launch or drop a file over a drawing that autosave brought back from before this update, Drawbridge asks even if that drawing is saved — older autosaves do not record whether a file holds them. Say yes, or save once, and it stops.

v0.94.2 — 2026-10-03

Big drawings get their finished cables in seconds, not minutes. On a page large enough that Drawbridge first draws its busiest devices' cables as curved fans, it then works out the properly routed version in the background — the "Refining cables…" pill. On a couple of thousand devices that used to take two to four minutes and started over after every edit. It now takes a few seconds, and renaming a device, recolouring it or editing its notes no longer throws the finished cables away. The cables are routed exactly as before: the same paths, the same crossings. While the curved fans are showing, a cable now has a line jump at every place it crosses one, not just at some of them.

Opening a file from your computer no longer replaces unsaved work without asking. In the installed web app and in the desktop app, double-clicking a .drawio or .vsdx while a drawing with unsaved changes is open now asks first, exactly as Open does — and saying no keeps your drawing.

Considerations before you update: none.

v0.94.1 — 2026-10-03

Big networks stay responsive when you move things. On a site read out of switch neighbour tables — a few hundred switches and a couple of thousand devices — letting go of a dragged device froze the editor for three to four seconds, every time, and so did the first edits after the import: each one re-routed the whole drawing. Drawbridge now re-routes only the part of the drawing a change can actually reach, so the same drop takes a tenth of a second, the import settles in a fraction of the time, and a move in the large hub-and-spoke example re-routes in a few milliseconds. After a move, only the cables that really changed are redrawn. The cables themselves are routed exactly as before — the same paths and the same crossings. On big drawings they now follow a device while you drag it, where they used to stay straight until you let go; only inside one very densely wired area do they still go straight during the drag and settle when you drop.

Considerations before you update: none.

v0.94.0 — 2026-10-02

Note: this release shipped without the usual pre-release test pass. The new link badge, Back and New page were each driven by hand on a copy of the production build, in light and dark themes; everything else rests on the automated gate.

Click through from an overview into a site, and back. A device whose Link goes somewhere now carries a small round badge on its top edge. Click the badge to follow the link: to another page of the drawing — from a WAN overview into a site's own design — or out to a web page, such as the device's NetBox entry, in a new tab. Clicking the device itself still selects it and double-clicking still renames it; only the badge follows the link. After following a page link, ← page at the front of the page tabs, or ⌘[ / Ctrl+[, takes you back. To link a site that has no page yet, choose New page "name" under its Link in Asset data: the page is made, named after the device, and linked in one step, and you stay on the overview to link the next site. One undo takes the page and the link away together.

Considerations before you update: devices that already carry a link — set in the inspector, or in a draw.io file you opened — now show the badge. It is drawn by the editor only: exports and saved files are unchanged. ⌘[ / Ctrl+[ now belongs to the editor, so in the browser on a Mac it no longer takes the browser back a page while you are drawing.

v0.93.0 — 2026-10-01

Note: this release shipped without the usual pre-release test pass. The changed import was driven by hand on a copy of the production build, with the 322-switch capture from the report that prompted it; everything else rests on the automated gate.

A whole site's switch captures, pasted at once, name every switch. Collect show lldp info remote-device from every ArubaOS switch, put the captures in one file and paste it, and the switches now name each other: ArubaOS prints a long system name cut short (Sw-Building-...), and each one is matched to the switch's own capture by a cable both of them report, so it arrives with its whole name. An access switch with two uplinks is one switch with two cables — it used to be drawn three times — and a cable to a modular or stacked switch is drawn once, on the port that switch calls B1 or 1/A3, where it used to be drawn twice. A name is never completed by its letters alone: a switch nobody captured keeps the cut-short name it was printed with rather than borrowing a look-alike's. Each switch also gets its management IP from the capture script's # Target : line, a big paste reads in a fraction of the time, and the report gives one line for the whole paste instead of one per switch. For certainty even where two switches only ever see each other, add show lldp info local-device to the capture.

Pasted networks are drawn as core, distribution and access. Neighbour output from any vendor is now laid out the way the network is built: core switches across the top, distribution and aggregation below them, access switches below that, read from names such as Core-…, Dist-… and Agg-… — and it no longer matters which switch's output came first. Access points, PCs and phones sit in a neat block under the switch they plug into instead of in one endless row. A single switch's output draws its distribution uplink above it and its endpoints below.

Considerations before you update: neighbour imports (CDP and LLDP) are now laid out in layers, with single-cable devices grouped under their switch, so a paste you have imported before will come out in a different arrangement — nothing already on your page moves. Paste a site's captures together: pasted one at a time, a switch with two uplinks can still be drawn twice if its two uplink switches arrive in separate pastes.

v0.92.2 — 2026-09-28

ArubaOS per-port LLDP detail imports cleanly, management addresses included. show lldp info remote-device <ports> is the capture to automate on ArubaOS-Switch: it prints every neighbour's name whole, its capabilities and its management address. Pasting it under the summary table used to draw extra tiles named ipv4 or after an IP address, each wired to the switch, because the detail lines were read as more rows of the table; and show lldp info local-device in the same capture drew the switch's own port list the same way. Both now read as what they are. Each neighbour's management address fills in the device's Management IP, and fields the drawing has no use for, such as a phone's PoE and LLDP-MED details, are no longer listed as problems.

Considerations before you update: none.

v0.92.1 — 2026-09-28

Two switches' LLDP output builds one network, not one pile. Importing show lldp info remote-device from two ArubaOS switches, one after the other, hung the second switch's whole neighbour table off the first switch's tile. Output collected by a script that strips the prompt and writes # Hostname : <name> above it never said which switch it came from, so both became Local device, and the second import took that for the tile already drawn. The name is now read from that header, the script's ===== banner and the command echo the switch wraps at its terminal width are no longer reported as problems, and Local device is never matched by name again — only by a cable the drawing already has on the same two ports. A paste holding several captures one after another is read as that many switches.

A name the switch cut short finds its own cable. ArubaOS prints system names in 18 characters, so Sw-Site-DD01 and Sw-Site-DD02 both arrive as Sw-Site-DD..., and an uplink could be drawn to the wrong one of the two. A cut-short name is now matched by its cable rather than its name: the uplink both switches report is drawn once, between the right two switches, and when a later paste knows the whole name, the tile takes it. The import report says how many names were cut short; show lldp info remote-device <ports> prints them in full, and the table picks them up by chassis id.

Considerations before you update: none.

v0.92.0 — 2026-09-28

A shared drawing no longer disappears when a third person joins. Letting a second guest into a session could wipe the diagram for everyone in it, the host included — every device gone, one empty page left, the host back on the template gallery — and with auto-save on, that empty drawing was then saved over the file. Two-person sessions never showed it, which is why it went unnoticed. The newcomer was mistaking another guest's part of the joining handshake for its own and starting from an empty drawing that then overwrote the real one. A guest now counts as joined only once it actually holds everything the host has, however the messages happen to arrive, so the third, fourth and fifth person all land on the same drawing as everyone else.

View-only guests see the drawing. Someone who joined with a View-only link never received the diagram at all: they sat at "Syncing…" over a blank canvas, or — if an editor was already in the session — at "Live" over a blank canvas, which looked like a drawing with nothing on it. The host was throwing away the viewer's request for the document along with the edits a viewer is not allowed to make. The request now gets its answer, once per connection, and everything else a viewer sends is still refused, so a view-only link still cannot change anything.

On a Mac, closing the window while you share hands the session on. Closing the last window does not quit a Mac app, and Drawbridge only left a shared session when it quit — so a host who closed the window went on hosting with no window and no drawing. Everyone else stayed connected with nothing to tell them, nobody took over, and a new person's knock waited in a lobby nobody could see. Closing the window now does what it always did on Windows and Linux, and what the manual promises: the person who has been in the session longest takes over, everyone else is told, and the session carries on. If nobody else is connected, it just ends.

Someone you remove is told so. Pressing Kick closed their connection without a word, so on their side it looked like the network had dropped: "Reconnecting…" for five minutes, every attempt quietly refused. They now see "The host removed you from this session. Your copy of the diagram is still here." straight away, and stop trying. An AI assistant you remove says so too, instead of reporting that it is reconnecting.

A Purdue backdrop no longer starts a cable. With Draw connector switched on, pressing on the thin border of a Purdue-model backdrop started a cable from the backdrop itself, and letting go on a device drew one. The world map was fixed for exactly this a while ago; the Purdue backdrop now refuses too.

Considerations before you update: update everyone who joins your sessions, not only the host. The fix that keeps a third person from wiping the drawing lives in each joining copy, so a guest still on v0.91.0 or older can still lose the drawing for everyone — you included — in a session of three or more. The web app picks up the new version when you reload it; desktop copies need the new download. A guest on an older version who is removed will still see "Reconnecting…" rather than the new message. View-only guests get the drawing from an updated host whatever version they run.

v0.91.0 — 2026-09-23

You can show a device's management IP — or serial, model or location — right on the drawing. The View menu (the eye in the toolbar) has a new Asset data section with one switch per field: tick Management IP and every device that has one shows its address in a small line under its name, and nothing else changes. Tick Serial, Model or Location as well and each gets its own line, in that order. They start off, the device names never move to make room, and exports (SVG, PNG, PDF, copy-image, the HTML viewer) carry exactly the fields you switched on — so a picture with addresses on it does not also carry every serial number. Like the rest of the View menu, the choice belongs to your browser, not to the file.

Considerations before you update: none.

v0.90.2 — 2026-09-22

A LAN-only session's invite is now a local link. LAN only (no relay) promises a session that never touches the internet, and then handed you https://drawbridge.fortiknight.com/app/#c=… to send — a link the other machine cannot even open without the internet, and which the web app refuses anyway because a browser has no way to make a direct connection. Pasting it into Join… always worked offline, but the link itself did not, which made a nonsense of the switch. A LAN session's link is now a nudge://… one: no web address in it, nothing to look up, opened directly by the copy of Drawbridge already installed on the other machine. Click it there and the app comes up on the join dialog with the internet unplugged. Copy app link is gone from a LAN session because this is the app link, and Copy code is still there for anything that mangles links.

Considerations before you update: a LAN invite from this version cannot be read by v0.88.0–v0.90.1, which say "update the app to join" instead — update both machines. Relay sessions are untouched and their links work across every version as before.

v0.90.1 — 2026-09-21

A panel dropped in the middle of the canvas stays reachable. In Edit layout, dragging a panel onto the middle of the drawing — the obvious place to aim — dropped it behind the Layout sheet, which sits centred and nearly full height while you are editing. The card was not merely covered but invisible, its header could not be grabbed, and the only way back was the sheet's own show/hide switch, which nothing tells you about. The drop now steps aside: the dashed preview shows where the card will really land as you cross the sheet, and it lands there, clear and reachable. It stays clear even though floating a docked panel widens the canvas and slides the sheet to a new middle.

The Properties card no longer swallows the Minimap panel in Edit layout. With nothing selected, the card kept the last thing you had selected — invisible in normal use, because the card is put away whenever nothing is selected. But Edit layout shows every panel so you can drag it, and there that leftover card stood about 830 pixels tall and covered the whole Minimap panel including its dock buttons: the one screen built for docking a panel was the one screen you could not dock it from. A card with nothing selected is now a short empty card. The Groups tab is unaffected — it is the one tab that means something with nothing selected, and it still keeps the card open.

A minimap docked from inside Edit layout is drawn where it belongs. It was drawn 12 pixels off the left edge of the window and clipped, and then quietly corrected itself the moment you left the mode.

The palette's World map tile stops stacking maps. Pressing World map in the shape palette three times gave you three identical world maps on top of each other, with nothing said — and because a map's interior is click-through, they could not be clicked off again and had to be hunted down in the object list. The tile now does what Add place… has always done: the second press selects the map that is already there and tells you so. One map per page, whichever way you ask for it.

Considerations before you update: none.

v0.90.0 — 2026-09-21

You can lock the panels so a stray drag cannot move them. The panels have always been resizable by dragging their edges, and most of those edges are invisible until your pointer is on them — the line between the Shapes list and the drawing, the side of the Properties card, and the very top and bottom-right corner of any card floating over the canvas. A drag that starts a few pixels off one of them rearranges your workspace instead of drawing. ☰ → Lock panels stops all of it: no dock edge, no divider, no card edge, no moving a card by its top strip, and the resize cursors go with them, so there is nothing left to aim at. Edit layout keeps working exactly as it does unlocked, so rearranging is never more than ☰ → Edit layout away, and the moment you leave that mode the lock is back. The switch is off by default and is remembered on this device.

Considerations before you update: none.

v0.89.3 — 2026-09-21

Trace path follows the icon you clicked, not the group around it. Clicking one device inside a group selects the whole group — that is what a group is for — but the trace was then asked about the group rather than about the device: a group of two answered with a path between its own two members, a pair you never picked, and inside a bigger group the Path section disappeared altogether, so a device in a group could not be traced from at all. Now the two ends are always the two icons you clicked. Click one inside a group, shift-click another anywhere on the page, and it traces between those two, whatever else the selection brought along. One icon is never a pair, and a group you have collapsed is a tile standing in for its devices rather than a device, so it offers nothing to trace until you expand it. The docked Trace a path panel names the same two devices the button traces.

You can see which icon in a group you clicked. Clicking one device inside a group selects all of them, and every ring looked the same — so the drawing could not say which device the inspector, the format painter and Trace path were actually about. The icon you clicked now wears the ordinary selection ring and the rest of the group is ringed faintly: still selected, visibly along for the ride. Click another member and the difference moves to it. A device on its own, a marquee and Select All look exactly as they did.

Shift-click marks a second icon in the same group. Clicking one member brings the whole group in and marks the icon you pressed; shift-clicking another member of that same group marks it too, without changing what is selected — so you can trace between two devices that live in the same group without entering it first. Shift-click a marked icon to unmark it; unmarking the last one takes the group out of the selection, which is what that press has always done. A selection you swept with a marquee is unchanged: there a shift-click still takes the whole group out.

Considerations before you update: none.

v0.89.2 — 2026-09-20

A named FortiLink stack's MCLAG pair is drawn side by side again. Pasting execute switch-controller get-physical-conn dot from a stack whose switches carry hostnames drew one of the two tier-1 switches a whole row lower — down among the access switches it feeds, ISL and all — which is a wrong drawing that looks perfectly plausible. Both peers now land on the row the FortiGate declared them on, however deep the subtree hanging off either of them. Every stack the layout already drew correctly is drawn exactly as before.

Importing the same file twice no longer draws a second set of zones. An Ansible inventory, a NetBox prefix list or a Containerlab topology re-imported onto the page it is already on matched up its hosts and its cables, and then drew every group box again — exactly on top of the first, which reads as one box until you drag it. A zone whose title or subnet is already on the page is now that zone, so re-importing an unchanged file reports "Everything in this paste is already here". A host the file has gained since lands inside the group it belongs to, and that group's box grows to hold it.

Nested groups are drawn as nested boxes, with space between neighbours. An inventory's hosts were laid out in one grid in the order the file listed them, and each group box was then wrapped around wherever its own members happened to land — so sibling groups overlapped, and a box could enclose another group's switch and say a firewall was in the access group. Each group is now laid out as its own block: child groups in a row inside their parent, the parent's own hosts below them, and a clear gutter between siblings. An import that brings cables is still laid out by its topology, as before.

A cable-schedule progress code only ticks the drawing it came from. A code pasted into a different document ticked that document's first few cables and reported "Ticked 1 cable · 3 are not in this document." — a line that reads like partial success, on the one feature that carries somebody else's word about physical work. A cable is now named by its two ends rather than by an internal id, so a code from another job is refused in one line and nothing is written. The same change means a cable you deleted and redrew is still ticked by a code that was already on its way back to you.

Tab walks a Connections card to the end and on into the next one. One press past a card's last button dropped focus out of the panel and rebuilt it, so filling in eight port names from the keyboard broke at every card boundary. The fix reaches every other inspector control that lost a Tab the same way.

The rack builder shows the units it carries after you turn "Show rear" off. A rack with hardware already in it came back as an empty 12 U column while its own header said 4 / 12 U, and clicking one of those free-looking Us did nothing at all. The drawing was never affected — only the builder's view of it.

The app menu stays on screen when you start sharing in a narrow window. At around 1200 px wide, starting a session pushed the menu button off the right edge and clipped the "Live" pill, leaving Join…, the manual, Storage, Templates, Document info, Cable schedule, Report a bug and the theme unreachable until the window was resized.

Considerations before you update: a progress code copied from an older build is refused as "made by a different version of Drawbridge" — open the shared checklist again and press Send progress for a fresh one, the ticks on that device are still there. Codes are a little longer than they were, because they now carry each cable's two ends instead of an id. And grouped imports are laid out by their groups from here on, which only affects imports you make from now on: nothing already drawn on a page moves.

v0.89.1 — 2026-09-20

A thick flow arrow looks like an arrow again. Setting a flow arrow's Thickness to a large width grew the shaft but left the arrowhead at its original size, so at the top of the range the shape came out as a band with a small nub on the end rather than an arrow. The head now grows with the shaft, and so does the second head on a double-ended arrow. Arrows at the default width are drawn exactly as before. The same fix reaches a quieter case that has been there longer: on a document whose line weight is Bold, every arrow's head was a little too small for its shaft, and now it is not.

Considerations before you update: arrows you have already drawn at the default thickness are unchanged. An arrow on a Bold or Fine document will have a slightly larger or smaller head than before — that is the fix, and it is the proportion the arrow was designed with.

v0.89.0 — 2026-09-20

Note: this release shipped without the usual pre-release QA pass — User directive 2026-09-20: ship task 15.138 without an AI-QA run. The change is gated by 9234 unit tests, 402 Playwright specs on macOS AND on Linux, perf, snapshots and the Windows leg, and it ships six new automated guards of its own.

A connector's thickness is now a width you set, not a step. Select a cable — or a plain line or a flow arrow — and the inspector's Thickness row has a slider and a box you can type a number of pixels into, from a hairline at 0.5 up to 20. The box shows the width the connector is currently drawn at, so an untouched cable reads 1.75 and a trunk 5.5; that is the width its link type gives it, and it is still what every connector you never touch is drawn at. Once you change one, a Reset button appears beside the slider to give the type's width back. It applies to everything selected at once, a whole drag of the slider is a single Undo, and the width travels with copy and paste, the format painter, collaboration, .drawio and .vsdx files, and every export. A .drawio file now carries it in draw.io's own stroke width too, so the cable opens at the width you chose in draw.io as well.

A width you set is absolute: changing the document's line weight to Fine or Bold moves everything that has no width of its own and leaves the ones you set exactly where you put them. And past about 8 pixels, cables that run side by side will touch — connectors sharing a route are spread a fixed distance apart and that spacing does not know how wide you have drawn them. The manual says so on the Connectors page, and it is not a limit the editor enforces: one thick cable on its own is often exactly what a drawing needs.

Considerations before you update: this replaces the three-step Thin · Normal · Heavy control that v0.88.0 shipped last week. Drawings saved with it still open, and each connector keeps the width its step stood for — a heavy plain cable becomes 2.45 px, a heavy trunk 7.7 px. One thing does change in those drawings: Heavy used to be capped so that it did nothing at all on a Bold document, and those connectors now draw at the heavier width they always asked for. Drawings that never used the control are unaffected and open byte-for-byte as before.

v0.88.0 — 2026-09-19

Neighbour tables from eleven more vendor forms import, and every form is now verified against real captures. Paste show lldp neighbors or its detail form from Arista EOS, display lldp neighbor brief or display lldp neighbor from Huawei VRP, display lldp neighbor-information list or … verbose from HPE Comware / H3C, show lldp neighbors all from Palo Alto PAN-OS, or /ip neighbor print detail from MikroTik RouterOS, and the devices and cables land on the page like any other import. NX-OS's show cdp neighbors imports too — its header spells Device-ID with a hyphen, and the importer used to answer "not recognised". The manual's import chapter now ends with a table of every vendor and command that is confirmed, each with the captures it was verified against; Extreme and Dell are named there as not yet confirmed.

Output from a vendor the importer does not read is refused, not guessed at. Block-style LLDP output from any vendor used to be read as Cisco's and came out as a wrong drawing — MAC addresses and legend lines as device names, every cable drawn twice. It now reads as "not recognised", with the commands that are read listed, and a paste that is plainly terminal output can no longer be mistaken for a one-column CSV.

Cables leaving one side of a device no longer braid. When one side carries cables to several other devices, the attachment points along that side are ordered by where each cable is going, so the bundles leave already in the order they fan out in; a side with cables to a single device routes exactly as before. And within a bundle the cables are ordered by their port labels — Gi1/0/2 before Gi1/0/10 — for Auto, Direct and Arc connectors alike, so the port labels read in order down the side of a device instead of in whatever order the cables happened to be created.

Collaborate on the local network with no relay at all. The desktop app's Share panel has a new switch, LAN only (no relay). Turn it on before you start sharing and the session never touches the internet: no relay is used, not even as a fallback, nothing is published anywhere, and the two machines talk to each other directly. The invite is the web link, which carries this machine's addresses on the local network; paste it into Join… on the other desktop. It is desktop to desktop only, since a browser cannot make a direct connection, and an invite stops working if this machine's address changes, so start sharing again and send the new one. The first share may prompt your firewall to allow Drawbridge to accept a connection.

A connector can be thin, normal or heavy. Select a cable — or a plain line or a flow arrow — and the inspector has a Thickness row with three steps. Heavy makes the line read heavier without changing what its width already says about the link type, and it is capped so two heavy cables side by side never merge; on a document whose line weight is already Bold, Heavy has nothing left to add and says so in the manual. The setting travels with copy and paste, the format painter, collaboration, .drawio and .vsdx files, and every export.

Considerations before you update: none. Drawings you have already made keep their routes unless a side of a device carries cables to more than one other device, in which case those cables reorder along that side the first time the page routes; nothing is stored, so an older Drawbridge opens the same file the same way it always did.

v0.87.3 — 2026-09-18

The template gallery on an empty canvas no longer covers a widened palette. If you had dragged the palette wider than its default, pressing New showed the "Start from a template" gallery starting under the palette's right-hand column, cutting the last letters off labels such as "Proxy" and "Jump host". The gallery now takes its width from the drawing area it sits in rather than from the window, so it stays to the right of the palette at any panel width, in both themes.

Considerations before you update: none.

v0.87.2 — 2026-09-18

Neighbour tables pasted from two switches now come out as one drawing. CDP and LLDP report a neighbour by its full name with the domain (sw-acc-07.corp.example.com) while a switch's own prompt gives the bare hostname (sw-acc-07), so importing the output of a second switch drew the first one again under the other spelling and the site came out as two disconnected clusters. A name with its domain and the same name without it are now recognised as one device everywhere the app matches names: inside one paste, when an import merges into the page, in the "already on this page" preview, in the differences report and in interface-description imports. Tiles keep the spelling that drew them; an IP address is never mistaken for a name with a domain; and when two devices on the page share a hostname under different domains, a bare name is drawn new rather than guessed.

Considerations before you update: none.

v0.87.1 — 2026-09-16

Releases now publish the web editor themselves. Everything a release produces — the download page, the desktop installers, the website — was already pushed straight from the release machine. The editor at /app/ was the exception: it was rebuilt on the server instead, which meant it only updated if that server could reach GitHub and the npm registry. When it could not, every other part of the site moved to the new version and the editor quietly stayed behind. It is now published like everything else, and a release fails if /app/ does not end up serving the version that was just tagged, instead of reporting success and leaving it stale.

A release now hands the server the tag, instead of expecting it to go and fetch one. The server learned about a new release by contacting GitHub, so if it could not reach the internet it never found out one had happened — and nothing downstream ran. The release now delivers the tag over the local network as it uploads everything else, so the server no longer needs to reach GitHub to know what to deploy.

Considerations before you update: none — these change how the site is published, not the app.

v0.87.0 — 2026-09-16

Note: this release shipped without the usual pre-release QA pass — task 15.75 only: one contained feature, hand-verified in a real browser, shipping with its own LABEL-15 scenario; 9088 unit + 398 e2e tests green, ci:linux green, and the seven macOS snapshot baselines unmoved

Bullet and numbered lists in text blocks and callouts. Select a text block or a callout and the Properties panel's new List row turns the whole note into a list: Bullets puts a • in front of every line, Numbers numbers them from 1, and pressing a pressed button takes the markers off again without touching a word. You can also just type one — start a line with - , * , • or 1. and, while you are typing, Shift+Enter carries the marker down to the next line and counts it up. Pressing Shift+Enter on an item you have left empty ends the list, so there is a way out that does not involve deleting a marker you never typed. The numbers are ordinary text, so inserting an item in the middle does not renumber what is below it — when that happens the Numbers button un-presses, and one press puts the numbering right.

A note that wraps still reads as the number of items you typed. An item too long for its block used to wrap back to the left margin, so a two-item note looked like four. Wrapped lines now line up under the item's own words instead of under its bullet. Indentation works too, where it never used to: put two spaces in front of a line and it becomes a sub-item, on screen and in the saved file.

Considerations before you update: if you had already written lists by hand — typing your own - or • at the start of a line — they will now be drawn as lists: wrapped lines hang under the text, and any spaces you had put in front of a line indent it instead of being ignored. Nothing in your file changes; it is the same text, drawn the way it reads.

v0.86.3 — 2026-09-16

A panel dragged off its corner keeps its shape. Moving one of the cards that float over the drawing — the page tabs, the overview map, the Properties card — to a different part of the window could stretch it: dragged upward, the page tab strip turned into a tall empty column, because it was still pinned to the bottom of the canvas as well as to its new position. It now moves without changing size.

The Drawing panel lists layers the same way up as the Layers popover. Both show the stack with the topmost layer first, as the Layers popover always has — the Drawing panel had them upside down, so the same drawing appeared to be stacked two different ways depending on which list you read.

The ☰ menu stays reachable however narrow the window is. In a window under about 735px wide the toolbar had run out of things to tidy away and started cutting off its right-hand end — taking the ☰ button with it, and with it the only way to the manual, the theme switch, the icon library, Document info and Edit layout. The toolbar now moves the zoom and undo buttons into ⋯ before it comes to that, and in a really narrow window it scrolls sideways instead of cutting anything off.

Port names stay readable on a short cable. Two devices sitting close together printed the cable's two interface names on top of one another, so neither could be read. They now go on opposite sides of the cable.

Escape in the Layout sheet's paste box closes just the box. It used to close the box and drop you out of Edit layout in one press. A second Escape leaves the mode, as it always did.

A folded group can be selected by dragging a box around it. A group of same-kind devices folds to a single tile with a ×2 marker, and a selection box drawn around that tile picked up nothing — while a box drawn over the empty canvas where the devices used to be picked the group up instead. The tile is now what the selection box looks at, which is what you can see.

⌘F opens Find wherever you are typing. From a device's Label box, an asset-data field or a page-tab rename, ⌘F (Ctrl F) did nothing and the browser's own find bar opened over the editor instead — which can only search the page's chrome, not your drawing. It now opens Drawbridge's Find from any of them.

Escape clears a traced path without losing your selection. Light the way between two devices with Trace path, and Escape used to put the highlight out and deselect both devices at once — so the Trace panel forgot which pair you were asking about and you had to pick them again. The first Escape now clears just the highlight, leaving the two selected so you can trace again or ask for longer ways; a second Escape deselects.

Considerations before you update: none.

v0.86.2 — 2026-09-15

The Properties card can be made wider — drag its edge. Every panel beside the drawing could be resized by dragging its edge; the cards floating over the drawing could not, and the Properties card is the one everybody meets. Move the pointer onto the edge facing the drawing and it becomes a resize cursor with a thin line along the edge, exactly like the Shapes panel's. Drag it and the card widens into the drawing — the side it is pinned to does not move, so it grows where there is room instead of sliding off the screen. Double-click that edge to put the width back. The bottom-right corner, which sizes both directions at once, no longer moves the card either.

The overview map stays out of the Properties card's way. The small map in the bottom-right corner slides left when a tall Properties card would cover it. Any change to the layout — resizing the Shapes panel, or the Properties card itself — used to send it straight back under the card, where it was both invisible and unclickable until you selected something else. It stays where it belongs now.

Considerations before you update: none.

v0.86.1 — 2026-09-15

The cloud rows under Storage… work on the web app. 0.86.0's site build lost the three provider identifiers on the way into the image, so Google Drive, Microsoft OneDrive and Dropbox all read "Not configured in this build" on drawbridge.fortiknight.com while the desktop app connected fine. The identifiers are in the site build again, and the build now refuses to complete without them.

Considerations before you update: none.

v0.86.0 — 2026-09-15

Note: this release shipped without the usual pre-release QA pass — user decision 2026-09-15: ship today; the full run was started (30 of 311 scenarios, 0 FAIL, three lanes) and stopped on the session's token budget — see docs/ai-qa/runs/2026-09-15-pre-v0.86.0-full-run/STATUS.md

Dropbox is connectable on the web app, as 0.85.0 said it would be. The 0.85.0 web build went out without its Dropbox app identifier — the site is built on the host from the release tag, where that identifier had never been placed — so Storage… showed Dropbox as "Not configured in this build". The identifier now travels with the code (it is public by design; it names the app to Dropbox and unlocks nothing on its own), and the Dropbox row offers Connect… as described in the 0.85.0 notes. Nothing else changed.

A Paste button in the Layout sheet. Under Move between computers the sheet now reads Export… · Import… · Copy · Paste. Copy on one computer, Paste on the other, and the workspace matches — the sheet reads the clipboard where the browser allows it, and where it does not (Firefox without the permission, a denied prompt) it opens a small box to paste into instead of doing nothing. A wrong text is refused with a message, and a paste is one undo step, as an import always was. The website has a gallery of twelve ready-made layouts to download or copy, at drawbridge.fortiknight.com/docs/layouts/ — examples, not presets.

Tab works in the Connections tab. Click the first port name, type, press Tab: the address field, then Side and Follow, then the other end, then the next card — and ⇧Tab walks back. Leaving a field used to rebuild the panel under the key press and drop focus on the page, so filling in a device's ports meant a click per field.

A Flow arrow drawn between two devices is fastened to both. Arm the arrow, press on one device, let go on another: the second lights up as the tip crosses it, and the arrow arrives attached at both ends, seated on the borders, following either device when it moves — the way a cable drawn between two devices always has. Dragging an end onto a device afterwards still works; this saves the two extra drags. A plain click on a device still drops a loose default arrow beside it.

A wider Shapes panel shows more shapes. Drag the palette's edge out and the tiles reflow into as many columns as fit — three at about 320px, five at the widest — instead of two tiles per row with a wide empty gutter between them. At the installed width nothing changes.

Cloud storage on the desktop app. The three cloud rows under Storage… were marked "Coming to the desktop app"; they now connect. Connect… opens the sign-in in your system browser and the app picks it up when you come back — the same PKCE flow as the web app, with nothing but the request to the provider leaving your machine. Google Drive on the desktop uses its own registration with Google, so a desktop build without it shows the row as "Not configured in this build" rather than a Connect… that fails. Two things found on the first real desktop sign-in are fixed in the same release: the desktop's own security policy had not been told about the providers' hosts, so the exchange after the sign-in failed silently; and Dropbox, which insists on an exact redirect address, now gets a fixed local port instead of a random one.

Google Drive connects on the web app. The first release where the site carries a Google client at all, and the sign-in's return trip now completes in Chrome, which hands the page Google sends you back to an empty session store: the pending sign-in is kept in the browser's origin storage for ten minutes instead.

The page your browser lands on after a desktop sign-in looks like Drawbridge now — the mark, the app's colours in light and dark — and the one-time sign-in code no longer stays in that tab's address bar.

Folders in your cloud folder. Open from… and Save to… now show the folders inside Drawbridge's own folder at your provider: click one to look inside, use the path above the list to come back up, and press New folder in the Save sheet to make one where you are. A drawing saved into a folder stays there on every later Save, and the same file name can live in two different folders. The app still sees only its own folder — nothing about what it can reach has changed.

Opening a file from a personal OneDrive works. Saving there did, but opening the file back said "Could not open the file: Failed to fetch": Microsoft hands a personal account's downloads out from a host the app had not been told to trust. It is trusted now, on the web and the desktop app.

Considerations before you update: none. Local files remain the default; nothing connects until you press Connect….

v0.85.0 — 2026-09-15

Arrange the editor the way you work — Edit layout. Open the app menu (☰) and choose Edit layout: every panel grows a header strip you can drag into the left, right, top or bottom dock, drop anywhere on the drawing to float it as a card, or drop onto another panel's strip to make it a tab there — the way Properties, Connections and Groups already share one card. Press × to hide a panel and flick it back on in the Layout sheet, which also holds presets (Default, Focus, Review, Present and Fresh), Reset to default, and undo and redo for layout changes while the mode is on (⌘Z / Ctrl Z, scoped to the layout, not the drawing). Escape or Done leaves the mode; the arrangement is kept on this device and the app opens that way next time. Outside the mode you can still drag a dock's edge, the line between two panels stacked in one dock, and a floating card's top edge or bottom-right corner.

Six more panels, off until you switch them on. Drawing (the page's layers and objects as a tree, click to select), Cable schedule (the checklist docked beside the drawing, ticks and all), Trace a path (the inspector's Path section, docked), Find (the ⌘F / Ctrl F box, always open), History (what you did, newest first, with Undo and Redo) and Collaborators (who is in the session and on which page — it floats in by itself the first time someone joins). The minimap is a panel too now, so it can be docked; the View toggle still shows or hides it wherever it lives.

Take your layout to another computer. The Layout sheet's Export… saves drawbridge-layout.json; Import… on the other machine — or dropping the file on the sheet, or Copy here and paste there while editing — applies it. A wrong file (a drawing, say) is refused with a message saying so, and an import is one undo step.

Your own cloud storage, if you want it. Open the app menu (☰) and choose Storage…: beside Local files — this computer, as always, and still the default — you can now connect Dropbox (Google Drive and Microsoft OneDrive are listed and greyed; they follow in a later release). Press Connect…, sign in on the provider's own page, and you come back connected. From then on Open lists the drawings in the app's own folder, Apps/Drawbridge Editor in your Dropbox — that folder, and nothing else in it —, Save asks for a name and puts the file there (a name already in the folder replaces that file rather than making a second one), and auto-save keeps the cloud copy current a couple of seconds after you stop editing, with the Save button reading Saving… / Saved as it does for a file on disk. Reload and the drawing is still bound to its file. A drawing saves back where it came from even if you switch Storage… afterwards; Save As follows the current choice, which is how you move one. Visio .vsdx works the same way. In this release the cloud rows are for the web app; the desktop app shows them as coming later, because its sign-in path is not yet verified against the real providers.

Nothing is ever overwritten by accident. Every save over an existing cloud file goes through only if the file is still the version you opened. If it moved on in between — you on another computer, a colleague with the folder shared — a Save asks at once, and auto-save pauses with a message that does not fade and offers Resolve…: Keep mine writes over the newer version, Take theirs loads it and drops your edits here, Decide later leaves everything as it is. Offline, auto-save pauses and resumes by itself when you are back; the local snapshot is written throughout. Disconnect deletes the sign-in from this device (and revokes it where the provider allows); the files stay in your cloud.

Considerations before you update: cloud storage is off until you turn it on, per device, and this release adds no network calls unless you do. When you connect a provider, your browser talks to that provider directly — its sign-in page, its storage hosts — and never through our server: no file, file name, token or account detail ever reaches drawbridge.fortiknight.com. Dropbox returns the single-use sign-in code through the address of our web app once (useless without the secret only your browser holds, and our server does not log it). The exact hosts, requests and scopes are written down, request by request, in the project's docs/10-CLOUD-STORAGE.md, and the app's content-security policy names those hosts and no others. The provider is new code against a real service, exercised against a stand-in and once against Dropbox for real — treat it as new. If you never open Storage…, nothing changes. And if you never open Edit layout, the editor looks and behaves exactly as before — the default layout is the previous UI pixel for pixel, and nothing is stored until you change something. A layout saved on one computer applies on another only through the file or the clipboard; it is never sent anywhere.

v0.84.0 — 2026-09-14

Trace path shows every way between two devices, not just one. Select two devices and press Trace path and you now get all the equal-cost cabled ways between them, each in its own colour — so a spine-and-leaf fabric finally answers with one route per spine instead of picking one and staying quiet about the rest. LEAF-01 to LEAF-04 across two spines reads "2 paths · 2 hops" and lights both. Underneath the count is a short list, one row per way in that way's colour, naming the devices it crosses ("2 hops · via SPINE-01"); hover a row and the drawing keeps that way alone lit.

Press again for the longer ways round. The first press answers with the shortest ways only. Press the button a second time and it widens to the next length up — the direct link first, the long way through a hub on the next press — and again until the drawing has nothing more to give, then back to where you started. The button says what the next press will do: Longer ways, then Shortest ways. So how much is on screen is your press rather than a number we picked for you, and a two-spine fabric never buries you in four-hop detours unless you ask.

The exported HTML viewer does the same. Click two devices in a handover file and every equal-cost way lights in colour, with the count in the status line; click either of them again to widen it. As before it needs no network, no app and no install.

Considerations before you update: none. A drawing with a single way between two devices reads exactly as it did — "2 hops", no count in front of it. Trace path still only walks the connectors you have drawn: no routing table, no addressing, no simulation. Handover files you exported earlier keep the old behaviour, because the viewer's code travels inside the file — re-export to pick this up.

v0.83.0 — 2026-09-11

A Directory shape, for the box your user accounts actually live in. The palette has a new Directory in the Data group — a database cylinder with a person inside it — for Active Directory, an LDAP tree, OpenLDAP, FreeIPA or Entra ID. It is the store of accounts, as distinct from the Auth server beside it, which is the RADIUS, TACACS+ or IdP box that answers a login by reading one. Find it by typing user database, ldap, domain controller, identity store or active directory in the palette search. The manual's Shapes chapter has a short section saying which of Directory, Auth server and User group to reach for.

A Visio file whose shapes are called "Directory server", "Domain controller" or "Active Directory" now imports onto the Directory; before this they arrived as a DNS server, which was the closest icon there was.

Considerations before you update: none. Drawings you have already made are untouched — the Visio names are read when a file is imported, not stored on a shape once it is on the page.

v0.82.3 — 2026-09-09

A connector caption sits in the middle of the line you can see. A cable attached at a device's centre runs under that device for half a tile, and the caption's middle used to be measured from the centre — so a cable attached at the centre of one device and the edge of the other carried its caption visibly towards the first. The middle, the room a caption has before it wraps, the link badge and the caption drag are now all measured between the two tiles. Cables attached the same way at both ends looked right before and are unchanged; a caption you dragged along such a mixed cable may sit up to half a tile from where you left it, once.

Considerations before you update: none.

v0.82.2 — 2026-09-09

A ring waiting for its second cable now says what to do, and cannot be made twice. Choosing New ring… on a single cable makes a ring that is not drawn until a second cable joins it. The panel used to say only that it "needs a second cable" and kept offering New ring…, so a second press, made because the first drew nothing, put the same cable alone in a second invisible ring. The line now names the ring and both devices — "pick Ring 1 on another cable of FW A or FW B to draw it" — and a cable already waiting like that is not offered another New ring…; nor is a cable no other cable could join. An aggregate member that has just taken + loses its + the same way until a second member follows it.

Considerations before you update: none.

v0.82.1 — 2026-09-08

A long connector gives its caption nearly all of its length. A caption kept a fifth of the connector clear at each end, whatever the length — on an 800-pixel cable that was 160 pixels of empty line on either side, and two cables of almost the same length could carry the same caption on one line and on two. The clearance is now a margin of about a port label's length on a long connector, so the caption gets the room the connector actually has; short connectors wrap exactly as before.

Considerations before you update: none.

v0.82.0 — 2026-09-08

Type one end of a point-to-point link and the other end fills itself in. Put 10.10.10.1/30 on one end of a cable on the Connections tab and, while the other end has no address of its own, it gets 10.10.10.2/30 — the other host of the /30. A /31 pairs the same way, and on a wider subnet the far end takes the next address up while that is still a host of it. It follows as you type, so the prefix arrives with the number, and it is one undo step with your typing. An address you put on the far end yourself is never replaced, and IPv6, dhcp or a word leaves the other end alone. Fill the other end's address in the app menu switches it off; the first time it happens, a message tells you where that switch is.

An address on its own sits where a port name would. An end that had an address but no port name drew the address a whole line further from the cable than the port name it did not have, and the two ends of a straight cable on Side: Auto were labelled on opposite sides — one number under the line, the other over it. An address alone now sits as close to the cable as a port name, and a cable that runs straight out of a device takes the same side at both ends: above a horizontal cable, to the right of a vertical one. A side you chose yourself is untouched.

Considerations before you update: none. If you would rather type every address yourself, untick Fill the other end's address in the app menu once; it is remembered.

v0.81.0 — 2026-09-08

Note: this release shipped without the usual pre-release QA pass — directed run only on the built bundle — PANEL-01, EXP-17, CONN-44 and REG-14 (docs/ai-qa/runs/2026-09-08-pre-v0.81.0-directed-run.md); the full 285-scenario pass was not run

The Properties panel is a screen, not a scroll. With a connector selected the panel ran to more than twice the height of a laptop window, most of it link types, speeds and cable types you had not picked. Link, Speed and Cable are now one-row pickers that show the value the connector has and open a list when you click — the same control the Connections tab has always used for the same fields — and everything on the tab sits in four titled groups, Look, Text, Facts and Arrange, each with a caret that folds it away. A fold is remembered, so the panel becomes the shape you want it and stays that way. Nothing was removed: every control is where its group says it is.

One line weight for the whole drawing. Document info has a Line weight row — Fine, Normal, Bold — that makes every connector and every outline lighter or heavier together. Trunks stay heavier than fieldbus and a dashed link keeps its rhythm, so the drawing reads the same, only at the weight the page or the projector wants. It travels with the file, with collaborators, and into every export. Individual connectors and shapes do not get their own width; that stays a decision the drawing makes once.

A caption on a long connector gets its line back. Every connector caption used to wrap at the same fixed width whatever the connector's length, and a word wider than that width was cut in half — Tunnel-Private-Group-ID 103 on a thousand-pixel arrow came out as Tunnel-Private-Gro / up-ID 103. A caption now wraps to the run of connector it sits on, so a long cable or arrow carries its caption on one line, and a word that is still too wide for a short one keeps its line whole and is shortened with an ellipsis rather than broken inside. Short connectors look exactly as they did.

Considerations before you update: if you had learned where a control sat in the Properties panel, it has moved into one of the four groups — Link, Speed and Cable are in Look, VLAN and circuit facts in Facts, Arrange and Group in Arrange. Nothing else changes; files saved by this version open unchanged in the previous one, which simply draws lines at Normal.

v0.80.1 — 2026-09-08

A rectangle drawn round a group of devices no longer bends their cables. Basic shapes are things cables route around, and a rectangle used as a frame — solid, rounded, a caption at the bottom, where a zone would look wrong — was a wall the cables inside it had to escape: an Auto cable between two devices in the frame went round the outside of it, or, hemmed in by neighbouring frames, gave up and drew a straight diagonal, live as the rectangle was dragged over them. A basic shape with devices standing in it is now a frame for the router: the cables between them ignore it, and a cable attached to the frame itself runs straight, as a zone's does. A shape with nothing standing in it routes exactly as before.

Considerations before you update: none.

v0.80.0 — 2026-09-07

Note: this release shipped without the usual pre-release QA pass — folder icon import verified by hand in Chrome against the real 1571-file vendor set; the rest of the release is documentation corrections; full local gate green

Import a whole folder of icons at once. Vendors publish their icon sets as a folder of hundreds of SVG files. Choose a folder… at the foot of the My shapes dialog takes the lot in one gesture: every .svg becomes a shape you can place, named after its file, so 3cx-Supply-Chain.svg arrives as "3cx Supply Chain". Most sets ship two copies of each icon — one of them named -white for dark backgrounds — and those are recognised as the same icon and merged, so a folder of 1571 files becomes 796 shapes rather than two near-identical rows for everything. Nothing is stored until you have seen what it found: the dialog shows the count, how many pairs it merged and anything it could not read, names the files it skipped, and asks the one question a bare picture cannot answer — Draw them all as, which starts at Generic. Drawbridge ships no vendor icons of its own and downloads nothing; these are files read from your disk and kept in your browser.

An icon that is an SVG stays an SVG. A custom tile icon used to be flattened to a small bitmap whatever you gave it. A photograph still is, but an SVG now keeps its vector shape, so it stays crisp however far you zoom in and on the biggest sheet the PDF export will print. If you have put a vendor logo on a device and printed it at A2 or A1, this is the difference you were seeing.

My shapes has room for a whole icon set. The list moved to browser storage that is measured in hundreds of megabytes rather than five, so it now holds a couple of thousand shapes instead of two hundred. Your existing device types are carried over the first time you open this version, and the old copy is left where it was.

Considerations before you update: none. Your device types move to the new storage on first launch and the previous copy is left untouched, so opening an older version still finds them.

v0.79.0 — 2026-09-06

A cable can say what it carries. A connector now has a VLAN field — free text, so 10,20,30 native 1, access 40 or Modbus/TCP are all fine — drawn as a quiet second line under the cable's own caption. Select ten uplinks and type once to set them all.

And what each end is addressed as. Each end of a cable has its own address field on the Connections tab, under that end's port name: 10.0.0.1/30, 2001:db8::1, dhcp, unnumbered. It draws under the port label on the same side, so it never crosses the line.

A WAN link can carry its circuit id and its carrier. Set a cable's link type to WAN link or Wireless and the inspector offers Circuit ID and Provider — SE-12345, Telia. A WAN link with no label of its own captions itself with them, every provider on the page becomes a legend row drawn in that carrier's own line style, and ⌘/Ctrl F finds a link by either, which is the search you do with a carrier on the phone.

A heartbeat cable looks like one. HA / heartbeat is a new link type — short dashes in pairs, with a paired-boxes badge — for the cables between two members of a cluster. Nothing guesses it for you; pick it on the cables you mean.

Breakout cables are counted honestly. Two new cable types, Breakout DAC/AOC (4×) and MPO breakout (SR4 → 4×SR), stand for one 4-lane port at one end fanning out to four at the other. The optics count reports them as 1 + 4 and says so out loud, rather than quietly costing a breakout as one link.

Print the stickers for both ends of every cable. Print labels, beside Print in the cable schedule, lays them out on A4 Avery L7159 stock: where this end is plugged in, where the other end comes out, and the cable's own label underneath, port names in a typewriter face because et1/1 and et1/l have to be different things at two in the morning.

Select two devices and see the cabled way between them. Trace path, in the inspector, lights the shortest route: a dashed ring round every device on it, the halo along every cable, and the hop count under the button. It is a walk over the cables you have drawn and nothing more — no routing table, no simulation — so it says No cabled path when the drawing does not show one, which is often exactly what you were checking.

Find looks at everything on a device, not just its name. ⌘/Ctrl F now matches management IPs, serial numbers, models, locations, notes and links, a device's role and functions, a cable's VLAN, its circuit or carrier, and the address at either end — and the counter says which field answered (2 / 7 · serial). Type a full IPv4 address and it also lands on the zone whose subnet contains it. The Objects list searches the same device fields, plus a Status column, so typing planned lists what is not in the building yet.

A device can link to another page of the same drawing. Pick Link to page… under the Link field and the tile jumps to that page — a site on a WAN overview that opens the site's own page. The link follows the page rather than its name, it is stored the way draw.io stores its own so the tile jumps there too, and it switches tab in the exported HTML viewer.

A collapsed group keeps its cables. Fold an HA pair, a switch stack or a whole access block down to one tile and every cable that ran to a device outside the group now runs to that tile; the cables between members are inside it. A group of one kind of device draws as that kind's tile with a ×N marker. Nothing is moved or rewired — expanding puts the drawing back exactly as it was, and the exports and the overview agree with the canvas.

Paste a port-channel summary and it binds the cables you have already drawn. show etherchannel summary (or show port-channel summary) creates nothing: every member port it names that is on the page goes into one aggregate ring, captioned Po1, Po2. Pasting it a second time does nothing at all.

Paste get system ha status and you get the cluster. Both members with their serial numbers and the model, PRIMARY and STANDBY on their role bands, and one HA cable per heartbeat interface. A firewall you drew under a different name is matched by its serial rather than drawn twice.

Paste show interfaces description and your port descriptions become cables. to SW-ACC-07 Gi1/0/49, uplink CORE-01, -> FW-A port5 — every description that names a device already on the page draws the cable to it, with the far-end port label where the description gives one. It never creates a device, and it says which lines named nothing here.

The import preview tells you where the paste and the page disagree. A third line counts the devices whose fields differ, and in which — "7 devices differ: 4 serial, 3 model — 2 devices on this page are not in the paste". Tick Update differing fields to overwrite exactly those asset fields; it never touches a name, an icon, a position or a cable, and the box is empty every time the dialog opens.

Six more things you can paste. A Containerlab topology (*.clab.yml), a Meraki link-layer topology export, a UniFi device export, a Mermaid diagram — fence, front matter and all, straight out of a README or a chat with an AI — a prefix list from NetBox or phpIPAM, which draws your subnets as labelled zones, and an Ansible inventory in either the INI or the YAML form, where groups become the zones their hosts sit in. Nothing is downloaded and no controller is contacted: these are files you export yourself and open here.

Export → PDF with schedules is the handover pack. The drawing sheets, then the cable schedule with a box to tick beside every cable, then the inventory — one file to print for commissioning and file with the site documentation, instead of a PDF and two spreadsheets stapled together.

The PDF picks the paper and the orientation for you. A drawing too big for A4 steps up to A3, then A2, then A1, so a DC floor plan gets the plot it needs; and a page taller than it is wide — a rack elevation, a stack of sites — prints portrait. Size is one for the whole document, orientation is per page.

The HTML viewer answers the questions a handover file gets asked. Search across every page — names, management IPs, serials, models, locations — click a device to light its neighbours, click a second to light the way between them, open a folded group, click a legend row to take a device kind or a link type out of the picture, and read the cable schedule on its own tab with the ticks exactly as you exported them. Still one file, still offline, still no network requests.

Export → NetBox devices CSV. The hardware in NetBox's device bulk-import columns — name, device_type, role, site, rack, position, face, serial, status — to import before the cabling. And a NetBox device export imports back without renaming anything: device_type is read as the model, primary_ip4 as the management address, and site/location/rack join into one Location.

Compare copies out as text, and can compare with a file. Copy as text in the Compare panel puts the whole change list on the clipboard as Markdown — + Added switch SW-ACC-07, ~ Re-roled FW-01 EDGE → ISFW — to paste into a change request. Compare with file… compares the drawing with any other .drawio on disk instead of with one of its own revisions: last month's copy, the version a colleague sent back.

Two more generated blocks. Blocks → Revisions puts this file's saved revision history on the sheet as the REV/DATE/BY/DESCRIPTION table an engineering drawing carries beside its title block. Blocks → Flows lists every flow arrow on the page with what each one runs from and to.

Say what is really installed. An Installed tick at the top of the Asset data card: ticked draws as normal, unticked draws the tile with a dashed outline so a floor plan of what is planned and what is in the building reads at a glance. A device nobody has said anything about is neither and draws solid, so an older drawing never becomes a wall of proposals. It reaches the inventory CSV, the object list's Status column and every export.

Racks say how full they are, where they stand, and what they are fed from. The rack card reads 18 / 42 U, per elevation where there are two. A rack carries a Location that everything mounted in it inherits, so documenting forty units is one field. And a rack unit can say which power feed it is on — A, B or A·B — drawn as a small chip at its right edge, so a column of chips answers "what goes dark if I drop feed A" at a glance.

Import a device type and mount the real thing. The My shapes group in the palette takes a .yaml from the community NetBox devicetype-library — several thousand models, public domain — and gives you a tile that arrives with its Model filled in, wearing the picture you chose, mounting at its real U height and depth, and offering that model's interface names in the port field. Nothing is downloaded: the file comes from your disk or your clipboard.

An assistant can change a drawing instead of redrawing it. The MCP server gained edit_diagram — add, update and remove devices and links in a .drawio and get the edited document back, with every position a person chose left exactly where it was — and validate, which reads a topology source and reports what it would skip or adjust, line by line, without drawing anything. Both have CLI twins, --edit changes.json and --validate, and HTTP twins at /api/edit and /api/validate.

--export plan.clab.yml turns a drawing into a lab. Containerlab YAML is a new CLI and Export-menu format: every device becomes a node with the NOS kind its icon implies, the zone it stands in becomes group, and every cable naming an interface at both ends becomes a link. It will not invent a port or guess an image — it lists what it could not write in a comment at the foot of the file.

Considerations before you update: a collapsed group opens expanded in vanilla draw.io — the file still stores every member, so nothing is lost, but draw.io does not know about the fold. Files you save gain attributes for the new cable and device facts (VLAN, addresses, circuit and provider, installed, power feed); older Drawbridge builds preserve them on save but do not show them. The CSV inventory has new columns — Rack, U, Zone, Installed, Power — appended after the existing ones, so a spreadsheet or script that reads by position still works, but one that expects a fixed column count will see more. And the PDF may now choose portrait, or A2/A1 paper, where it always produced A4/A3 landscape before: check the paper size in the print dialog if you are printing to a fixed plotter.

Known issues. Found by the test pass before this release and not yet fixed. None of them lose your work, and each has a way round it:

v0.78.0 — 2026-09-04

Note: this release shipped without the usual pre-release QA pass — directed run only — docs/ai-qa/runs/2026-09-04-pre-v0.78.0-directed-run.md: the recording's gesture and the Connections card driven on the built bundle and looked at; the full 248-scenario pass not run

A selected cable can be grabbed through a note lying over it. A text box laid across a cable used to take every press inside its box — on the cable's own line, and on its endpoint handle — so you selected the cable, reached for it, and dragged the note away instead. Now, while the cable is selected, a press on its line or its handle inside a plain note reaches the cable, and the cursor says so before you press. With nothing selected the first click still picks the note, so a note sitting on a cable is still a note you can grab.

A port's name and where that name sits are now in one place. The two interface-name fields and the eight buttons that placed them have left the Properties tab: select a cable, open Connections, and each port has a column of its own — the device's name, the field you type ge-0/0/1 into, a Side picker (Auto, Above, On, Below) and a Follow box that turns the label to the cable's angle. The columns are captioned with the devices, so you are choosing "the switch's port", not "the from end", whichever way round the cable was drawn. The connector's own midpoint caption keeps its Label placement section on Properties, where it still applies to a whole selection at once.

Considerations before you update: the Port labels fields and the Port label — from end / to end buttons are no longer on the Properties tab — they are on the Connections tab, on each cable's card. Nothing in your drawings changes, and every placement you have already set is untouched. One cable at a time now: setting a port's side across several selected cables in one press is gone, because each cable gets its own card. A cable inside an aggregate is listed as a row of port names on the ring's card without these controls — click that cable on the canvas to get its own card, with the full set.

v0.77.0 — 2026-09-04

Note: this release shipped without the usual pre-release QA pass — directed run only — docs/ai-qa/runs/2026-09-04-pre-v0.77.0-directed-run.md: every new key pressed on the built bundle and looked at; the full 247-scenario pass not run

Press a letter to reach for a tool. T arms the Text tool, Z a Zone, R a Rack and F a Flow arrow — the same toggle C already gave the connector: press it once to arm, press it again (or Escape) to put it away. Each tool's tooltip now prints its letter, so you can learn the key from the tool itself. A letter typed into a search box or a label is still just a letter.

Press / to search the palette. Slash puts the caret in the palette's search box from anywhere on the canvas, and Enter there arms the first shape in the list and hands the canvas back — so a shape is a slash, a word and a click away without reaching for the mouse. It is the same slash that already jumps to the search box in the manual, the Objects list and the icon library.

⇧1 (Shift+1) fits the drawing to the window, exactly as the Fit diagram to window button does. It is matched on the physical key, so it works on any keyboard layout.

⇧⌘F brings to front and ⇧⌘B sends to back (Ctrl+Shift+F / Ctrl+Shift+B on Windows and Linux) — draw.io's own keys for the two ends of Arrange. ⌘B (Ctrl+B) on its own still bolds a label, and ⌘F (Ctrl+F) still opens Find.

⌥⌘C and ⌥⌘V copy and paint a look — the format painter's Copy and Paint buttons on the keyboard (Ctrl+Alt+C / Ctrl+Alt+V on Windows and Linux), carrying exactly what the buttons carry and saying exactly what they say when a target is the wrong kind.

⇧⌘L opens the Layers panel (Ctrl+Shift+L on Windows and Linux), and a second press closes it again.

Tab and ⇧Tab (Shift+Tab) step through the shapes on the page, one at a time, once you have clicked the canvas — a way to read a busy drawing from the keyboard. Locked and hidden shapes are skipped and the walk wraps round at the end; from the toolbar, Tab still moves between buttons as it always has.

The manual's Shortcuts page now lists ⌘B, ⌘I and ⌘U (Ctrl+B, Ctrl+I and Ctrl+U). Bold, italic and underline have worked from the keyboard for months and the one page you would look them up on did not mention them. All the new keys above are on that page too, with the tool keys in their own Tools section and Arrange in a new one.

Considerations before you update: none.

v0.76.1 — 2026-09-02

Dragging a ring follows the mouse, whichever end it hugs. The ring at the far end of a pair of cables slid the opposite way to the pointer — drag it left and it ran right, all the way to the other device. Every ring in a stack of one, two or three now stays under the pointer as you drag it.

Mouse-wheel zoom glides. A notch of the wheel with ⌘/Ctrl held eases to its ×1.22 step over a fraction of a second instead of hopping there, and quick notches run together into one smooth zoom, with the point under the pointer held still. Trackpad pinch and scroll are unchanged, and a reduced-motion setting gets the plain step.

Considerations before you update: none.

v0.76.0 — 2026-09-02

Note: this release shipped without the usual pre-release QA pass — directed run only — docs/ai-qa/runs/2026-09-02-pre-v0.76.0-directed-run.md: every changed behaviour driven on the built bundle and looked at, the full 246-scenario pass not run

A set of cables carries one, two or three rings — and no more. Binding the same cables again used to put another ring on the midpoint every time, without limit. Now the button reads Add another ring, then Add a third ring — one in the middle, one at each end, or all three — and goes quiet at three with a line saying why.

Unbind removes the ring you meant. Press a ring on the canvas, or pick one in the Ring list, and Unbind takes that ring alone; the other rings those cables are in stay exactly as they were. It used to clear every ring the selected cables touched — three at once on an HA pair.

Rings stand square across their cables, and clear of the device. The end rings over a pair of cables were drawn tilted; every ring now sits perpendicular to the cables it holds. A ring that hugs a device is measured from the edge of its tile rather than its centre, so it no longer stands on the icon when a cable starts from the middle of a shape.

A new ring never wears another ring's name. Ring names, colours and positions are kept per document while ring ids were only unique per page, so a ring bound on a new page — or after every ringed cable had been deleted and the tab reloaded — could come up already named after a ring that no longer existed. Ids are now unique across the whole document, and deleting a ring's last cables takes its name with them.

Press C for the connector tool. The same toggle as the palette button: C arms it, C or Escape puts it away. A C typed into a search box or a label is still just a letter.

Mouse-wheel zoom is a step, not a leap. One notch of a mouse wheel with ⌘/Ctrl held was a ×2.7 jump — 50% to 250% in two clicks — while a trackpad felt fine, which is why it never reproduced on a Mac. A notch is now one ×1.22 step; trackpad pinch and scroll are unchanged.

"Skip this version" in the browser skips the version that is waiting, and only that one. Skipping while the release feed was unreachable used to hide every later release's marker for as long as that tab stayed on the same build — which, after a skip, was forever. The skip now covers the waiting build alone and lifts the moment the next one arrives. A tab left open through two releases also lights the marker for the second one again.

Considerations before you update: none — no file format, session or setting changes. A drawing that already carries more than three rings over one set of cables keeps them; the limit applies to new rings.

v0.75.0 — 2026-09-02

Note: this release shipped without the usual pre-release QA pass — directed run only — docs/ai-qa/runs/2026-09-02-pre-v0.75.0-directed-run.md: the embedded icons proven in the real draw.io through the compat spec and looked at in a prototype, plus the full automated gate; the full 246-scenario pass was not run

Your drawing looks the same in draw.io. A saved .drawio now carries each device's icon, so opening the file in draw.io shows the tile you drew — the icon in its colour, the name below — instead of a coloured box with a name. Custom icons come along too, and so do the legend's rows. draw.io treats the icon as part of the tile: move, copy or delete the tile there and the icon follows.

Considerations before you update: a file saved by this version grows by roughly 700 bytes per device for the embedded icons, and older Drawbridge versions ignore them. Nothing else changes on disk. A drawing you re-save gains its icons on that first save.

v0.74.1 — 2026-09-02

Port labels stay outside the device. A cable drawn to the middle of a device — every imported cable, and any you drew from a device's centre — could put its far-end port label inside the tile when it arrived from the side, across the icon and the name. The label is now placed from where the cable visibly meets the device, so it sits beside the tile. Cables that meet a device from above or below are drawn exactly as before.

The Share panel tells you when your tab is behind. If a newer build is waiting in your browser, the panel says so before you start sharing and offers to update on the spot, so everyone who joins runs the same build as you. Nothing is refused.

An AI assistant in a three-person session now names the right host. The agent reported the last guest it saw as the host and listed the host among the guests; it now keeps the host it actually connected to and lists the other guests.

Considerations before you update: none — no file format, session or setting changes.

v0.74.0 — 2026-09-02

Note: this release shipped without the usual pre-release QA pass — directed run only — docs/ai-qa/runs/2026-09-02-pre-v0.74.0-directed-run.md: the five shipping scenarios driven in Chrome against the built bundle plus the full automated gate; the full 244-scenario pass was not run

A pasted device list merges into the drawing you already have. Paste a neighbour table — CDP, LLDP, a FortiLink tree, a CSV — onto a page that already holds some of those devices and the import reuses them instead of drawing them twice: cables attach to the existing device, empty fields such as the management address are filled in, and nothing you have already set is overwritten. A cable already drawn between the same two ports is not added again. The preview says how many pasted devices are already on the page and how many are new before you press Import, and the whole paste is still one undo step. Each import is its own undo step, too: undoing a second paste no longer takes the first one with it.

FortiSwitch neighbours import as cables. Paste the output of diagnose switch-controller switch-info lldp neighbors-summary from a FortiGate and every port with a neighbour becomes a cable from the managed switch to that neighbour, with both port names on it — including the servers, access points and third-party gear the FortiLink tree does not show. Ports that are down are mentioned once in the preview rather than listed one by one. Together with merging, this is how you add cable terminations to a switch you drew from the FortiLink tree.

Cisco and Aruba LLDP output imports too. Paste show lldp neighbors detail from a Cisco IOS, IOS-XE, NX-OS or IOS-XR box, show lldp neighbor-info or show lldp neighbor-info detail from an Aruba CX switch, or show lldp info remote-device from an ArubaOS-Switch, and the neighbours arrive as devices and cables with the port names on both ends; a management address fills the device's management-IP field, and the advertised capabilities pick the icon. Cisco's plain show lldp neighbors table already worked. The device the command ran on comes in as a switch when the command only exists on one, and a device the output says nothing about takes its icon from its name — CORE-SW-01 is a switch, 6300-core an L3 switch, AP-LOBBY-01 an access point — while anything the output does state wins over the name.

Delete a legend row and it stays deleted. The legend still builds itself from what the page uses, but a row you delete is now remembered and does not come back on the next edit. Undo brings it back, and switching the legend off and on rebuilds every row.

Files open in draw.io without an arrowhead on every cable. draw.io draws an arrowhead on any connector whose style does not say otherwise, and our files never said otherwise, so a drawing opened there showed an arrow at the end of every cable. Cables now say so explicitly; flow arrows keep their heads. A file saved by an older version picks this up the first time you save it again.

For maintainers: the feedback relay watches its own tokens. It logs each token's expiry at start and daily, warns a month ahead, reports it on its internal health endpoint, and the publish script reads that before a release. It was added after a check found the attachment token four days from expiry.

Considerations before you update: a file saved by this version adds endArrow=none to every cable's draw.io style, and a drawbridgeLegendHidden attribute on the legend frame once you delete a row; older Drawbridge versions and draw.io ignore both. Importing now merges by name: a pasted device whose name is already on the page is reused rather than drawn again — rename the existing one first if you really want a second copy.

v0.73.0 — 2026-09-01

Note: this release shipped without the usual pre-release QA pass — directed run only — 13.11 verified live in Chrome (docs/ai-qa/runs/2026-09-01-pre-v0.73.0-directed-run.md) plus the full automated gate; the 239-scenario pass was not executed

Shapes now snap to the size of the shapes you already have. Drag a corner and, as the shape comes within a few pixels of another one's width or height, the drag sticks there and takes that measurement exactly — with a marked span drawn over the shape you are resizing and over the one it matched, so "the same size as that one" is something you can see while you do it. The two dimensions are decided separately, so a tile can take its width from one neighbour and its height from another. Only comparable shapes are offered — device tiles match device tiles, zones match zones — and anything the app sizes for you, like a rack or a rack unit, stays out of it. Keep dragging and the size comes free again; nothing is added to your drawing, and no export carries a trace of it.

Hold Shift while resizing to keep a shape's proportions. The shape scales as one — useful for a photo, a logo or any tile you want kept square — and the side you have pulled furthest leads. Shift can go down or come up in the middle of a drag and the shape follows immediately, without waiting for you to move the mouse. Size matching still works while it is held, so shift-dragging a tile onto a neighbour's width lands its height there too whenever the two were drawn in the same proportions.

On the website: documentation links land where they point. Opening a link to a particular heading on a narrow screen used to park that heading behind the sticky header, so the page appeared to open in the wrong place. The offset now measures the header instead of assuming its height, at every window width.

Considerations before you update: none — no file format, session or setting changes. Resizing without holding Shift behaves exactly as it did, with one addition: it now stops on a neighbour's size instead of only on the 8 px grid.

v0.72.1 — 2026-08-31

A damaged invite link now tells you what went wrong. Chat apps sometimes wrap or cut long links, and until now clicking a shortened invite did nothing at all — the app opened as if you had never been invited, with no way to know why. Now the join dialog opens by itself, showing the link that arrived and, in plain words, what is wrong with it — "this invite is incomplete, copy the whole link" — so you know to ask for it again rather than wondering whether sharing is broken. The link also stays in your address bar so you can send it back to the host and ask. (Tip that works today, on any version: the Copy code form of an invite survives chat apps better than the long link.)

The Share panel opens where you'd look for it. Opening Share… from the app menu used to drop the panel in the middle of the canvas, attached to nothing — it anchored to the menu entry you had just clicked, which vanished as the menu closed. It now opens at the toolbar's top right, under the menu button, exactly where the Live pill appears once you start sharing.

Considerations before you update: none — no file format, session or setting changes; invites made by older versions work unchanged.

v0.72.0 — 2026-08-30

Old draw.io files now just open. Files saved by older draw.io versions store their pages compressed, and until now those pages arrived locked — a read-only tab and advice to re-save the file elsewhere. Drawbridge now unpacks them itself: every page opens ready to edit, and saving writes it back as plain, readable XML. A page that is genuinely damaged still opens the safe way — preserved untouched, marked read-only — so nothing is ever lost to a bad byte.

PDF exports the whole document. Export → PDF now prints every page of your drawing, one sheet per page in tab order, each with its own title block naming the page. Want just one page? Use the print dialog's own Pages field — the sheets line up with your page tabs. Paper stays automatic and uniform: A4 landscape, and the whole book steps up to A3 when any one page needs the room. Empty pages don't waste a sheet.

A device can carry a link. Asset data has a sixth field, Link — put the device's NetBox page, management UI or runbook there. An Open button sits beside it (http and https only, so a link in a file someone sends you can never run anything), the HTML viewer export shows it as a real clickable link, the CSV inventory gets a Link column, and it is stored as draw.io's own link attribute, so the shape is clickable there too. Copies deliberately leave it behind, like the serial number — it names one particular box.

Your own icon on a device. Select a device and the inspector's new Icon section takes a PNG, JPEG or SVG of your choosing — a vendor logo, a product face — while the card, label, role band and colours stay Drawbridge's. Whatever you upload is stored as plain pixels, so nothing inside an SVG can ever run; copies keep the icon, the format painter deliberately doesn't paint it, and Reset brings the standard icon back. It shows everywhere the drawing does: canvas, minimap, and every picture export. (The one place it can't follow is a .vsdx — Visio interchange drops it.)

Considerations before you update: none — existing documents open and export exactly as before; single-page PDF output is unchanged.

v0.71.0 — 2026-08-30

Note: this release shipped without the usual pre-release QA pass — partial AI-QA run — 132 of 235 scenarios reached before the session hit its usage limit; report at docs/ai-qa/runs/2026-08-30-pre-v0.71.0-partial-run.md. Regression watchlist 26 PASS / 0 FAIL; the release's own new work verified by hand in a real browser. Human-gated and two-participant scenarios (most of file 11, incl. COLLAB-09's multi-participant steps) remain outstanding.

Drawbridge has a new licence: still free, now with one limit. Use Drawbridge for anything — at home, at work, commercially, for as long as you like, without paying and without asking. Copy it, share it, change it, run it on your own servers. Nothing about how you use it changes, and nothing costs money. The one thing the new licence does not allow is using Drawbridge to build a product that competes with Drawbridge.

The old licence, Apache 2.0, let anyone take the code, rebrand it and sell it as their own. That was never the intent, so it has moved to the PolyForm Shield License 1.0.0 — a short, plain-English licence you can read in about two minutes. The full text is in the app under About → Licenses, and on the website at /licenses/.

The name and the logo are trademarks and always were: the licence covers the code, not the brand. A fork is welcome under its own name. The new TRADEMARK.md spells out exactly what you can do without asking — and "built with Drawbridge", "compatible with Drawbridge files" and screenshots are all fine.

You can let a roomful of people in without standing at the door. Ten people arriving at a workshop used to be twenty clicks — every one of them knocking, and you clicking Allow. Now there is Let anyone in in the Share popover: press it, and for the next twenty minutes anyone holding this session's invite or view-only link walks straight in. The popover counts the time down and offers End now, and the toolbar pill reads · open so you can see from anywhere in the app that the door is standing open.

Then it shuts by itself, which is the half that makes it worth having. It is an action, not a mode: nothing is stored, there is nothing to find switched on next week, and every new sharing session starts with the door shut. The twenty minutes are not adjustable — a choice of durations would put a decision in front of you at the one moment you are busy letting people in. And it never applies to your personal link. That one is deliberately reusable and long-lived, so it is the one link that must never admit a stranger who saved it months ago; whoever uses it always waits for you, open door or not.

A shared link no longer leaves the secret sitting in your address bar. When you open an invite in a browser, the app now takes the invite out of the URL as soon as it has read it. It used to stay — visible in the address bar, saved into history, and captured by any bookmark you made of the page, which meant reloading the tab asked you to join all over again. A link that is not an invite is left exactly as it was, so nothing else that uses the address bar is affected.

Considerations before you update: none for how you use Drawbridge, and the open door is off until you press it. Two things worth knowing. While it is open, anyone holding that session's link joins without your approval — that is what it is for — so end it early with End now if the room fills up sooner than you expected; your personal link is never included either way. And on the licence: if you redistribute Drawbridge or build on it, read the new LICENSE, which ships in every download. That change is not retroactive — every release up to and including v0.70.0 was published under Apache 2.0 and stays that way permanently, so nothing you already have is affected.

v0.70.0 — 2026-08-28

An AI assistant can now join a live session and draw in it while you watch. Until now an assistant could only hand you a finished diagram: you asked, it generated, and anything you wanted changed meant asking for the whole thing again. It can now join a collaboration session as an ordinary participant instead. Press Share…, give it the ordinary invite link, and admit it from the lobby like anyone else — it turns up in People under a name of its own, with a colour, and everything it draws appears on your canvas as it happens. So you can say "no, put the firewall above the core" while the drawing is still in front of you. It behaves like any other collaborator from then on: your undo undoes your own work and never its, the pages bar shows which page it is working on, and Kick takes the diagram back whenever you want it.

It joins through the MCP server on your own machine. That is Drawbridge --mcp, the local door, and it needs an ordinary editing invite — a view-only link is refused in words rather than accepted and then quietly ignored, which is how that mistake used to look from the assistant's side. The hosted server at drawbridge.fortiknight.com deliberately cannot do this: joining a session means holding the invite secret and sitting in the path of every edit, and that secret is a password to your diagram. It stays on your machine.

The manual's AI assistants page now starts with the thing most people want. Drawbridge has been reachable as a hosted MCP server for some time — one line of configuration and an assistant can read, render and generate your diagrams, with nothing to install and no account — but the page said so in a paragraph near the bottom, under a heading about running local models. It now opens on the two ways in, hosted first: the command that connects it, the configuration for assistants that take a URL, why a connection that is set up as the wrong kind of endpoint just hangs, and the limits stated plainly instead of left to be discovered. The chapter overview, the automation page and the website's front page point at it, so it is findable from where people actually land.

Considerations before you update: none — nothing changes unless you go looking for it, and an assistant can only reach a session you have started and admitted it to. One thing worth knowing before you do: an invite link is a password, so handing one to an assistant hands your diagram to whoever runs that assistant, exactly as handing it to a person does.

v0.69.0 — 2026-08-28

The hosted API and MCP door no longer runs out of renders. It had an hourly render budget, and it was charging things to it that were not renders: every time an assistant connected and asked what the tools were, that counted against the same allowance as actually drawing a diagram. A few sessions could therefore exhaust a budget of 120 drawings an hour having drawn perhaps thirty, and the only way out was to wait for the hour to roll over. Introductions are free now — and beyond that, the per-caller limits are switched off entirely for the beta. There is no requests-per-minute cap and no hourly ceiling: a long job is just a long job. The caps that protect the drawing itself are unchanged, so a single request still cannot ask for an unbounded amount of work: 2000 elements per diagram, 5 MB per request, and a hard stop on anything that runs too long.

If a burst does outrun the servers, retrying works. Where you would previously have been told the hour's budget was gone, you now get a "busy, try again shortly" that is true within seconds — and the service starts more containers when it sees callers being turned away, rather than adding one at a time and hoping. It also keeps more capacity warm than it used to, so a burst does not have to wait for a cold start before anything happens.

The MCP door no longer stalls under load. Sending several drawings at once used to put them in a queue nobody had asked for: with a busy server they would sit until they timed out a minute later, so the caller waited sixty seconds to be told nothing at all — and while it happened, the server reported itself as idle, so it never started the extra containers that would have cleared the backlog. Now it answers straight away, either with your drawing or with "busy, try again shortly", and the load is visible so more capacity actually arrives. The REST API always behaved this way; only the MCP door did not.

Considerations before you update: none. Nothing changes for the desktop or browser app, and nothing changes for Drawbridge --mcp or --serve running on your own machine — the limits described here only ever applied to the hosted service at drawbridge.fortiknight.com.

v0.68.0 — 2026-08-26

A browser and the desktop app can now actually work in the same session. The last release said they could. They could not: the desktop was reaching the world through a public relay, the browser app is only allowed to talk to Drawbridge's own, and two people on different relays never find each other. So every invite the desktop produced was unjoinable from a browser, in any format, however you sent it. Both ends now meet on the same relay and it works in both directions — host on your desktop and let someone join in their browser, or the other way round.

The desktop hands out a link that opens anywhere. It used to give you a nudge:// link and nothing else. That opens the installed app beautifully and does absolutely nothing in a browser — no error, no tab, nothing — so there was no way to invite anyone who had not already installed Drawbridge. The link in the box is now an ordinary https:// one that opens on any machine, and Copy app link is right underneath it for people who would rather it opened the app they have. The browser app offers both too, which it never did either.

The share panel is a panel again, not a wall. It had grown to three link boxes, seven buttons and three paragraphs of explanation stacked in one narrow column. It is now one link with Invite, View-only and Personal tabs above it: you see one link, one sentence about that link, and that link's own buttons. Nothing was removed — the view-only and personal links live on their own tabs, with Regenerate and Reset where they belong.

Considerations before you update: when the desktop app cannot make a direct connection between two machines, it now falls back to Drawbridge's relay rather than to a public one run by n0 — the same relay browser sessions have used since the last release. Your drawing is encrypted end to end either way and the relay cannot read it, but the machine in the path is ours now, and the privacy page says so. Direct connections between two desktops are unchanged and still go straight between the machines. Both people need this version for a browser-and-desktop session; if you self-host and would rather keep n0's public relays, put {"relays": "n0"} in collab-relays.json.

v0.67.0 — 2026-08-26

Collaboration in the browser now runs through Drawbridge's own relay. Until now a browser session was carried by a public relay run by n0. It is now carried by one running on this site. Nothing about how you use it changes, and your drawing is still encrypted end to end between the participants — but the machine in the middle is ours now, and the privacy page says so plainly.

Why we did it: one address, one port. Everything the browser app touches is now drawbridge.fortiknight.com over 443 — nothing else, no other hostname. That is the difference between "works" and "does not work" on a corporate network where somebody has to justify every firewall rule: there is now exactly one to ask for. Previously the app also reached out to several relay hosts and a discovery service, none of which a firewall team would have been told about.

The desktop app is unchanged — it still connects directly between machines where it can, and falls back to a public relay when it cannot. Desktop and browser can still work in the same session together, either way round.

Considerations before you update: if you self-host Drawbridge, browser collaboration now expects a relay on your own instance; without one it falls back to the public relays as before. Nothing to do for anyone using drawbridge.fortiknight.com.

v0.66.0 — 2026-08-26

Invite links are much shorter. A link to join a session used to run to around 290 characters, which chat apps wrap, break across lines, or turn into a half-clickable mess. The same invite is now about 172 — it survives being pasted into a message. Nothing about how it works changed: the secret still sits after the #, which your browser never sends to any server.

Links you have already shared keep working. The older, longer form is still understood, so an invite you sent yesterday is fine.

And the Join box now says what it actually accepts. It read "Paste a nudge:// link or an invite code", which had stopped being true — it takes a browser link too. It now says "Paste the link or invite code you were sent".

Considerations before you update: none.

v0.65.0 — 2026-08-26

You can change your name in the middle of a session. Open the share panel — click the Live pill, or App menu → Share… — click your own name in the People list, type a new one and press Enter. Everyone sees it straight away: nothing reconnects, nobody is dropped, and the drawing carries on. It works whether you are hosting or have joined, and the new name is remembered for next time. Escape puts the old one back if you change your mind.

Considerations before you update: none.

v0.64.1 — 2026-08-26

Three fixes to sharing, all found within an hour of it going out.

The share panel opens where you can see it. Clicking the Live pill in the toolbar appeared to do nothing at all. The panel was opening every time — it was just being positioned off the left edge of the window, because it anchored itself to the Share… item in the app menu, which has no position while the menu is closed. It now anchors to whichever control you actually clicked. This affected the desktop app too, and it mattered most to whoever was hosting: the pill is how you reach the People list to let someone in.

"… wants to join" now goes away once you have dealt with it. The notification stayed on screen for the rest of the session unless you dismissed it by hand — including after you had already let the person in, or after they had given up and disconnected — still offering to review a request that no longer existed. It now disappears the moment the request is resolved, however it was resolved.

You can paste a browser invite link into Join. Pasting the https://… link that the browser build itself hands out was rejected with "Not a nudge:// link (scheme https)". The Join box now takes any of the three: a browser link, a desktop nudge:// link, or a plain invite code.

Considerations before you update: none.

v0.64.0 — 2026-08-26

You can now collaborate straight from the browser. Open Drawbridge in a browser tab, press Share…, and you get an invite link like any other — no download, no account, nothing to install for the people you send it to. They open the link and they are in the same drawing as you, live.

It is one session, not a separate browser one. Someone in a browser tab and someone in the desktop app can work in the same diagram together, either way round: the browser can be the host and the desktop app the guest, or the reverse. Everything you already had comes with it — the approval lobby, kicking someone out, view-only invites, live cursors, following another person's view, and the hand-over that keeps a session alive when the host closes their window.

It works from anywhere without setting anything up. No port forwarding, no VPN, nothing to open on your router or your office firewall. Two people on different networks — one on office WiFi, one on a phone — simply connect. Your diagram travels end-to-end encrypted; a browser participant is always passed through a public relay operated by n0, which forwards traffic it cannot read, and the status pill says relay whenever that is happening.

Considerations before you update: three things are worth knowing about the browser version specifically. It only appears on https:// — if you self-host Drawbridge and serve it over plain http://, the sharing controls stay hidden, because browsers withhold the encryption the invite handshake needs on an insecure page; serve your instance over HTTPS. Your identity in a browser lasts as long as the tab — reloading is fine and your invite keeps working, but closing the tab and reopening it makes you someone new, so a reusable personal link shared from a browser stops working once that tab is gone; the desktop app remembers it properly. And a self-hosted relay stays desktop-only for browser participants. Nothing about the desktop app changes.

v0.63.2 — 2026-08-26

The Role and Functions fields on a device now show you what they know. Both have a ▾ that opens a proper list, in the app's own panel, under the field — the role one used to be the browser's own drop-down, which appeared over at the right-hand edge of the window and stayed invisible until you had typed the first few letters of something it already knew. The role list shows each tag beside the name it stands for, so you no longer have to remember that "internal segmentation" is spelled ISFW, and searching finds either.

Functions gained a list at all, and it is much longer than it was. It never had one — the three names in the empty field were a hint, not an offer, so the field looked like it had heard of VPN and IPS and nothing else. A firewall is now offered twenty-five functions grouped the way you would describe the box (inspection, access, network, platform), and you tick as many as apply: the list stays open while you work down it, and ticking something already on takes it off. Switches and routers grew their vocabularies too. Both fields are still ordinary text, so TRANSIT, PCI or a function nobody else uses go in exactly as before — the list is an offer, never a rule.

Considerations before you update: none.

v0.63.1 — 2026-08-25

AI assistants are told what Drawbridge is for the moment they connect. The MCP server now answers the opening handshake with instructions — what the tool does, which of the three capabilities answers which question, and the two things that decide whether a generated diagram is what you pictured: put a device kind on everything, and let Drawbridge do the layout. Assistants see that before they decide to call anything, which is earlier than a tool description is read and much earlier than a reference page would be. Version 0.63.0 taught them how to call the tools correctly; this tells them what the tools are for.

And they can now look up any device Drawbridge draws. A new drawbridge://kinds reference lists the whole catalog — every device type, grouped, and for each one the other names it answers to. It matters because the short guidance can only name the thirty or so kinds a drawing usually reaches for, while the catalog has over a hundred: ask an assistant for a data diode, a protection relay or a bastion host and until now it had no way to know those symbols existed, so you got a plain box. It can look them up instead, including by the word you used rather than ours.

Considerations before you update: none.

v0.63.0 — 2026-08-25

Every device can now say where it sits and what it runs. Two new fields in the inspector, and they are deliberately different from each other so you never have to work out which is which. Role is one short tag drawn on a tinted band across the top of the tile — EDGE, ISFW, DCFW, CORE, ACCESS — in the device's own accent colour. Functions is a comma-separated line under the name, in ordinary text: VPN, IPS, Web filter. The band on the tile is where the box is; the line under the name is what it does. Both are free text with the common answers offered per device — a firewall is offered edge, internal segmentation, data center, DMZ, branch, cloud, OT, distributed and host-based; a switch gets core, distribution, access, top-of-rack, spine, leaf and management — so type TRANSIT or PCI if that is what your site calls it. They travel everywhere the rest of a drawing does: through .drawio and .vsdx, to the people in a live session, into the auto-legend (a kind used at two roles gets a row for each, which is usually the point), the inventory CSV, Ctrl/⌘+F, and the device panel of an exported HTML file. Compare calls a changed role re-roled rather than a restyle, because it is a fact about the network and not a look — and for the same reason the format painter leaves it behind, while duplicate and paste carry it.

The desktop app notices when a file changes underneath it. If something else edits the diagram you have open — an AI assistant driving the MCP tools, draw.io in another window, a git pull or a branch switch — you no longer have to close and reopen it. With nothing unsaved, the drawing reloads on its own and the view fits to it. With unsaved edits, nothing is touched: a message stays on screen, without fading, offering to reload when you are ready. Your own saves are silent, and it waits for a file to stop changing before reading it, so a program part-way through writing a diagram never loads as an empty one.

AI assistants get told how to draw well, not just what the tools accept. Ask an assistant for a diagram and the result is only as good as the topology it writes. The MCP tools now say what actually decides that: set a device kind on everything or it draws as a plain box, put speeds and link types on the cables, never place devices by hand because layout and routing are the product, and read the importer's notes and fix the source until they come back empty. The full guide — the device vocabulary, the attribute reference, a worked example, and which export format answers which question — is served to assistants that ask for it, so the ones that want it get everything and the rest are not slowed down.

And every result now says what to call the files. Generating two topologies in one session used to leave a heap of files in one directory with no consistent naming, because the tools hand back content and the assistant invented the rest. Each result now carries a suggested name taken from what the diagram calls itself, with the convention stated to the assistant: one directory per diagram, every file for it named after it. You can override it by passing a name of your own.

Considerations before you update: the inventory CSV has two new columns, Role and Functions, inserted after Kind — a script that reads that file by column position needs adjusting, one that reads it by header does not. The auto-legend now lists a device kind once per role in use, so refreshing the legend on a drawing where you set roles will add rows.

v0.62.1 — 2026-08-24

The hosted API reports its own load. /api/health now answers with inFlight and maxConcurrent beside the name and version, which is what lets a deployment scale render capacity with demand instead of guessing. Nothing else changed in the apps.

Considerations before you update: none.

v0.62.0 — 2026-08-24

Drawbridge can now tell you what is in a drawing, not just make one. A new command-line question — Drawbridge --doc network.drawio --export audit.describe.json — answers with the document as structured JSON: every page with its devices (kind, label, layer, asset data, rack position), every cable (both ends with ports, speed, type, aggregates) and the layers. It is built for scripts and AI agents that audit existing documentation ("every device with no management IP", "what changed since last quarter"), and every other export works from a document too: --doc network.drawio --export network.png re-renders a finished drawing headlessly. All of it pairs with the new describe, export and create_diagram tools that AI assistants can call when the app runs as an MCP server (Drawbridge --mcp) — an agent can hand over topology text and get back the routed, laid-out drawing, with the importer's notes about anything it had to skip or adjust. The manual's new AI assistants (MCP) chapter has the client setup and the tool reference, and the privacy page says plainly what crossing that boundary means: the server makes no network call of its own, and what an assistant reads or draws is shared with that assistant by your choice. And for pipelines that prefer HTTP over spawning processes, Drawbridge --serve runs the same capabilities as a local web API on 127.0.0.1 — describe, export, generate — described by OpenAPI at /api/openapi.json so API tooling can consume it without a hand-written client.

Imports and Tidy up now center parents over their children. Generated and tidied drawings used to sit sixty pixels off symmetric — the core over its first switch instead of over the row. Layout now balances every tier, so a tree comes out looking the way an engineer would have drawn it. The manual's example images are re-rendered with the new layout.

Considerations before you update: none.

v0.61.4 — 2026-08-24

Naming an aggregate ring now shows you where its caption goes. Type a port-channel name — Po1 — and the caption appeared on the drawing, but the Along, Side and Follow the ring controls that place it did not turn up until you happened to click something else. They arrive as soon as you finish typing the name.

Your notes and callouts now show up in the overview. The minimap drew your devices, zones, racks and cables but silently left out every text block and callout — so a page whose point was a title note and three annotations looked almost empty in the corner of the screen. They appear as faint blocks at their real size and position, and a group shows the dashed frame the canvas draws round it. The map still never draws words: at that size they would be a smudge, and what you need from it is "something is here, that shape, there".

Colouring a flow arrow colours its caption too. Pick a colour for an arrow or a line annotation and the shaft and arrowheads changed while the caption stayed grey, so one object came out in two colours. The whole annotation takes the colour now, and the default swatch puts all of it back. A cable's caption still stays neutral — a cable's colour means its speed, and a caption wearing it would read as data.

Considerations before you update: none.

v0.61.3 — 2026-08-23

The ring colour can be changed on a cable that belongs to two rings. In a spine/leaf pod every cable is in two aggregates at once — its leaf's and its spine's — and in exactly that drawing the Ring color control never appeared, because it could not tell which ring you meant. It asks instead: pick the ring by name (its port-channel label, or its number in the drawing) and the colour, Reset and Set default act on that one.

Adding a connector to a cable run no longer destroys the run. Selecting a linked cable and the next connector — the obvious way to extend it — offered Unlink cable, and pressing it broke the run apart. It now reads Add to this cable and the run takes the newcomer in, keeping its name and everything else about it.

A dragged caption goes back where the button says. Drag a connector's label along its cable and the inspector still reads Middle and Below, so pressing either of those buttons did nothing at all and you had to go somewhere else and come back to undo your own drag. Pressing the button that is already marked now puts the caption where it says.

The watermark fits the drawing on a small diagram. On a drawing of one or two devices the first and last letters of the watermark were cut off by the edge of the sheet — on screen, in the SVG export and on the printed page. It is sized to the drawing it crosses now, so the whole phrase is always there.

Searching the manual finds the word, not the middle of another one. Searching ips returned two dozen paragraphs about t·ips, and city found "capacity" and "opacity" rather than the one about map cities. A search now matches the start of a word — typing the first few letters of a term still finds it.

Closing a page you are not looking at is recorded. The list of recent actions in a bug report said nothing at all when you closed a page other than the current one, so a report could describe a missing page with no sign of how it went missing.

Exporting a PDF no longer logs errors to the browser console. Nothing looked wrong on the sheet, and nothing was — but the print document carried styling the browser was always going to refuse, and a console full of refusals hides the messages that matter.

Considerations before you update: none.

v0.61.2 — 2026-08-23

Adding a country no longer joins a layer that merely shares its name. If you had renamed a layer to Sweden, adding the Sweden map put the map on that layer — so hiding it took your devices with it. The map gets its own layer again, beside yours.

The action trail no longer says working with pages deleted your shapes. Adding a page, closing one or switching between them wrote "removed 5 shape(s)" into the trail attached to a bug report, and "added 5 shape(s)" coming back. Nothing was removed any of those times — the trail now says what you actually did.

Searching the manual for a word in the singular finds it. Typing city found nothing about map cities, because the manual writes the plural. Common singular/plural pairs now match either way, without short searches like ips turning into a page of unrelated results.

Considerations before you update: none.

v0.61.1 — 2026-08-23

Rack units can be dragged between Us again. In the rack builder, dragging a mounted device to a different U did nothing at all — in any browser. It has never worked; the gesture starts properly now.

Watermarks and classification markings reach the printed sheet. Set a classification or a watermark and the canvas showed it, the SVG export carried it, and the PDF — the copy that actually leaves the building — carried none of it. A marking that vanishes when you print is the one place it needed to be.

Switching something off in the View menu stops you editing it. Hide notes or lines while one is selected, and the inspector went on offering its Label — and typing there really did change the document, on an object you could no longer see. Anything you hide is now deselected, whether you hide it from the View menu or by switching off its layer.

A menu opened from inside ⋯ no longer covers the rest of the list. At narrow window widths the ⋯ menu holds Align, Layers and the rest, and opening one of them painted it straight over the others — they could not be clicked until you closed it again. Nested menus now open beside the list.

Connect handles stay the size they look. The small circles for dragging a cable off a device kept whatever size they were given when they first appeared, so zooming in after working on a large drawing left a big translucent disc sitting over a device. Hovering the invisible grab area also lit it up as a solid blob; it stays invisible and lights the small dot instead.

Undoing an import takes one press. On a file with a name in it, the first Ctrl/Cmd+Z after importing appeared to do nothing and the second undid the import — so anyone who pressed twice out of habit lost more than they meant to.

Considerations before you update: none.

v0.61.0 — 2026-08-23

Dashed and Filled, for the basic shapes. Select a rectangle, an ellipse, a diamond — any of the eight basic shapes — and the inspector now has a Shape section: Solid or Dashed for the outline, Outline or Filled for the body. The two are independent, so they give four looks between them. The manual has described these switches since the shapes shipped; until now the only way to get a dashed shape was to open a file that already had one, or to copy the look off it with the format painter. A Line is offered the dash and not the fill: it has no body to fill.

Fit really does fit, however big the drawing. On a very large drawing — a few hundred devices imported at once — pressing Fit left the topology running off both sides of the window, and no zoom level would show all of it, because Fit stopped at the same 8% floor as the zoom buttons. It now goes as far below that as it needs to, because "show me all of it" is what you asked for. The − button still stops at 8%: you can arrive under the floor by asking for the whole drawing, but you cannot walk down there a step at a time, and + brings you straight back.

City names on a crowded map stay readable. With Show cities on, Dallas, Ft. Worth and Arlington were printed straight through one another on the Texas map — three of the state's ten biggest cities share one metroplex, and every name was drawn at the same offset beside its own dot. Names are now placed around a cluster: one to the left, one to the right, one underneath, never across another city's dot. All ten stay named, and this was not only Texas — the same crowding was quietly there on the world map and on a dozen countries.

The overview keeps the view you fitted. On a very large drawing, one click in the overview map used to throw away the zoom Fit had just given you and jump the camera back in. Clicking or dragging in the overview moves you around the drawing and leaves the zoom alone, which is what a navigator should do.

Considerations before you update: none.

v0.60.2 — 2026-08-23

The editor starts in a browser that blocks site data. If you have told your browser to block all cookies and site data, Drawbridge did not open — the palette was there, but nothing could be placed on the canvas and the console filled with errors that named nothing useful. It now starts and draws normally in that setting. Nothing is remembered between visits, which is what you asked your browser for, and everything else works.

The out-of-subnet hint reads the Management IP. Give a zone a subnet and a device inside it a Management IP outside that range, and you now get the gentle hint you should always have had. It was only ever reading an address out of the device's label, which is why filling in the field properly appeared to do nothing. Labels still work, for drawings that use them.

Undo brings a legend back with the devices it describes. Deleting the last thing on a page took the legend with it, permanently — the undo restored your devices and the legend stayed gone, with its own switch quietly turned off. A block now goes empty rather than away when there is nothing left to list, and fills straight back in. One undo puts the whole picture back.

Widening the gap on a grid keeps your rows. On a two-row grid, pressing Gap + once could deal a device onto a row of its own, report gaps that did not match the drawing, and make the vertical gap smaller than it was. All three came from the same miscount, and rows now stay rows.

Considerations before you update: none.

v0.60.1 — 2026-08-22

Compare mode really is read-only now. The panel said "read-only" while the drawing behind it was fully editable — you could drag a device, rename one, and the change was quietly kept. Worse, it reached the crash-recovery snapshot, so an edit you never meant to make survived a reload. While a comparison is open, the drawing is now held still: dragging, resizing, F2 and double-clicking a label all do nothing, and leaving the comparison puts you back exactly where you were.

The Subnet field only takes a subnet. Typing anything else — a note to yourself, a half-finished address — used to land in the zone's title bar looking exactly like a real network. The field now outlines itself in red and writes nothing until what you have typed is a subnet, so the drawing never claims something it cannot back up. Clearing the field still removes it, and an IPv6 subnet is accepted as a label.

A callout that grew to fit its text is no longer cut off. A bubbled callout grows downward as its caption wraps. Exports and Fit to view were both still measuring the box you drew rather than the one on screen, so the bottom of a long callout ran off the edge of an exported picture, and Fit framed a shape that was not the one you were looking at. Both follow the bubble now — as do the selection ring and the resize handles, which sat a hundred pixels above the border they were supposed to grab.

Isometric pictures are framed to what they actually draw. Text, images and basic shapes stand upright in isometric view rather than lying flat, and the export was sizing the page for the flat, tilted shape instead. A tall image lost a few pixels off its top, and everything else was surrounded by empty space it did not need.

A colour dragged in the system picker is one undo step. Dragging around the macOS colour wheel left a trail of undo entries, so a single ⌘Z (Ctrl+Z) walked back through the drag a frame at a time instead of past it.

The colour swatches follow the theme. The eight family accents in the inspector are read from the current theme, and switching between light and dark left them showing the previous theme's colours until you reloaded.

Smaller things. The format painter no longer copies a label position onto a zone, which our own drawings ignore and draw.io acts on. A bug report's attachment list says "11 kB", not "0.0 of 4 MB used". Four city names on the maps — Ft. Worth, St. Paul, St. Petersburg and Mt. Hagen — had a doubled space in them. A mounted rack unit is no longer offered a label-position control it cannot act on.

Considerations before you update: two things you could do before, you cannot now, and both are deliberate. Editing the drawing while a comparison is open is refused rather than kept — if you have been using compare as a way to look at an old revision while working, close it first. And the Subnet field rejects text that is not a subnet, so a zone that was carrying a note in that field keeps it, but you will not be able to type a new one. Isometric exports are framed slightly differently from before; the picture is the same, the margins around it are tighter.

v0.60.0 — 2026-08-21

The corner of a linked cable, properly this time. v0.59.1 fixed one of the two ways this could go wrong and shipped believing it had fixed both. Where the next device sits directly under the edge of the one the run passes through, the cable still came out as two pieces with a gap. It is one continuous cable now, on every connector type. The measurement that was missing: a device tile is 64 pixels wide, so its centre is exactly 32 from the side — and the rule deciding whether to draw the connecting stretch gave up at 28.

An Auto connector stays near the middle of a device. When two devices are not quite in line, an Auto connector shifts where it meets each of them so the cable can still be drawn as one straight line. It had no limit, so a device dragged well out of line was still joined by a straight cable that left from the very corner of its icon — and then snapped into a step. It now shifts only within the middle half of a device's side and takes the step sooner, which reads as a decision rather than as the cable clinging on. Connectors set to Direct are unchanged.

Two cables between the same pair of devices always look like two. At one particular alignment a parallel pair could be drawn exactly on top of each other, so the page showed a single link where the drawing had two — and the buried one could not be clicked either. They are now kept apart at every position.

A group of parallel cables stays a group, everywhere along its length. Several cables between the same pair used to separate nicely on the straight stretches and then pinch together — or cross — at the bends. The whole fan now travels as one: every cable keeps its own lane through every jog and corner, evenly spaced on both axes, in the same order end to end. A crowded side also earns a little more room, so six cables never squeeze into a smudge.

Cable runs pass through a device cleanly, whatever the angle. A linked run crossing a middle device now turns inside it as one tight nested bend — at right angles, at a slant, or dead straight through — instead of scattering hooks and squiggles over the icon. The two halves are welded exactly where their drawn lanes cross, so there is no stub or blip at the joint even fully zoomed in. Runs drawn out of an icon's centre pick the sensible border to leave by on their own.

Devices pushed edge-to-edge no longer flatten their cables onto one line. Dragging a device until its edge sat exactly on a neighbour's line made every cable between them collapse onto a single stacked line that could not be clicked apart. They keep their own lanes now, however the tiles touch.

Considerations before you update: none.

v0.59.1 — 2026-08-21

A linked cable that turns a corner is drawn as one cable again. Where a run passed through a device and turned there, it could come out as two separate cables with a gap through the icon — one half stopping at the middle, the other starting at the edge. It depended on where the next device happened to sit, so nudging it made the gap vanish and reappear. The corner is drawn properly whichever way the run leaves.

And the overview keeps up. The map in the corner was showing the drawing as it was one edit ago: cables it had already re-routed kept their old shape there until something else was changed. It now repaints as soon as the routing settles, so it always matches the canvas.

Considerations before you update: none.

v0.59.0 — 2026-08-21

The update offer tells you what you would be getting. In the browser it used to say two words — "Update available" — and leave you to decide on that. It now names the version and shows that version's release notes, the same way the desktop app has, by asking the site it was loaded from what the waiting version is. Offline, or on a copy of Drawbridge hosted somewhere that publishes no version file, it says what it always said and works exactly as before.

And Download update now gets you the newest release. The amber marker remembers the release it was lit for, which may have been weeks ago, so the button checks once more before it opens anything and hands you whatever is current — moving the panel to that version, notes and all, as the download starts. It also cannot do nothing any more: a marker restored from a previous run carried a link the app would no longer open, and pressing the button produced no window and no error at all. If the link has gone stale the download page opens instead.

Several connectors can be one cable. A run that passes through a device — an internet cloud, a patch panel, a firewall in the middle of a span — is drawn as separate connectors, and Drawbridge already joined them into one line wherever there was only one way to read it. Where a device has two cables in and two out there isn't one: which arriving cable continues as which leaving one is something only you know. Select two connectors that meet at a device and press Link as one cable, under Through icons, and they become one cable flowing through the icon. Link a third to either end and the run grows — it can cross as many devices as you like.

A linked cable then behaves like one. Clicking any part selects the whole run, so colour, speed, the format painter and Delete act on the cable rather than on the piece you happened to click; hold Alt to reach a single part. It carries one caption instead of one per part, and each part keeps its own text in the file, so Unlink cable gives you back exactly what was there. Where two cables pass through the same icon they now run parallel through it, each keeping its square corner, instead of converging on one point.

A through connector's own ends stay on the border. Through icons used to move both ends of the connector to the middles of the devices it joins. Now only a device the line actually passes through gets crossed at its middle — the connector's own two ends keep their normal anchors on the edge of the tile, like any cable. A junction where several cables merely end no longer has them all punching through to the centre, which also removes a whole class of cable crossings on top of the icon.

Two connectors running through one icon can turn a corner. Through icons was built for a cable passing straight through a device, and that is the only shape it looked right in: when one connector arrived from above and the other left to the side, the two pushed into the middle of the icon and stopped dead against each other, leaving a hard corner and a visible join on top of the glyph. They now meet in one rounded bend — the same rounding every other corner in a connector gets — so the pair reads as one cable turning inside the device. Exports show the same bend.

The bend closes, whichever router drew it. A run turning a corner inside an icon left a small gap there when the connectors were on Auto, while the same pair on Direct bent cleanly — the same picture, two different results depending on a setting that has nothing to do with the corner. It is one closed bend either way now.

And an icon can sit in front of a through cable. A through connector is drawn on top of the devices it crosses, which is the whole point of it — but that was a law rather than a default, so there was no way to put a cloud or a badge over the line. Arrange ▸ Bring to front on the shape now does exactly that; clear the connector's Through icons setting and it goes back to wherever you have arranged it.

Crossing cables get their bump back. Where two cables cross, Drawbridge draws a small hop so you can see that they pass rather than join. Cables set to cross an icon were missing theirs in three separate situations — over the icon itself, when the hop landed on the cable underneath instead of the one on top, and when the crossing sat close to a corner. Every crossing that is visible now carries the hop.

Considerations before you update: none.

v0.58.0 — 2026-08-20

A connector can run through an icon instead of stopping at it. Some devices are things a cable passes through rather than ends at — an internet cloud, an ISP hand-off, a patch panel in the middle of a span — and drawing that meant two separate cables bumping into opposite sides of the same tile. Select a connector and press Through icons, under the connector-type buttons, and it runs to the middle of each device it joins and is drawn on top, so the line visibly crosses the icon.

Set it on the cable arriving and the one leaving and they both end on the same point at the centre, so the pair reads as one long line with the icon strung on it. The device stays exactly as easy to grab as it was: a click in the middle of a crossed icon still picks the device, not the cable. Off is the default and will stay the default — cables belong under the shapes.

Any colour you like, including the one from your style guide. The Color row in the inspector was nine chips and there was no way at all to reach a colour that was not one of them. It now carries six brand colours as well, and a Custom… chip that opens three ways to pick: a sheet of 66 shades and tints, a box to type or paste a hex value into, and Pick…, which opens your system's own colour panel — with its eyedropper, its sliders and whatever swatches you have saved there.

The format painter now carries the whole look. Copy a style and paint it, and a connector's wavelength, label size, bold, italic, underline and typeface travel with it — as do a shape's typeface, dash, fill and opacity. All of them were being worked out correctly and then quietly left behind. Worse, if the thing you copied differed from the target only in one of those, the painter reported that it had changed nothing and did nothing, which looks exactly like a broken button.

Considerations before you update: none. Existing drawings are unchanged — connectors keep stopping at their tiles unless you turn Through icons on — and a file with a through connector in it still opens in draw.io, where the cable is simply drawn stopping at the tile as before.

v0.57.3 — 2026-08-20

Import and Export stay together when the window gets narrow. The toolbar gives controls up as the window shrinks, moving them into the ⋯ menu and bringing them back when there is room again. Import and Export are meant to go as a pair — they sit side by side and read as one thing — but at certain widths the bar was letting go of Import and keeping Export on its own. It only took surrendering one of them to make everything fit, so the bar stopped there and left the other stranded.

Now they always travel together: at every width you either have both on the toolbar or both in the ⋯ menu, where they still appear under their own names.

Considerations before you update: none.

v0.57.2 — 2026-08-20

Crossing cables bump again where they cross close to a device. Draw three straight links between two firewalls and two more into one of them from a third, and the cables arriving from below cross the horizontal ones a short way out from the device — where, until now, they were drawn flat. On a wiring drawing a flat crossing means "these two are joined", so the picture said something you did not draw.

The rule that caused it was meant for something real: cables fanning out of one switch meet near that switch, and a bump on every one of those meetings is noise, not information. It was written as a fixed distance — anything crossing within about half a device's width of where both cables reach the same box was treated as a junction. That works for cables that leave a device at right angles and turn away. It cannot work for straight ones, because two straight cables ending at the same device can only ever cross close to it: the exception swallowed every crossing there was.

Now the question is simply whether you can see the crossing. If the device's own tile covers it, there is still no bump — nothing to mark on a piece of cable nobody can see, and a fan of wires arriving at one switch still reads as a junction. Anywhere the crossing is actually visible, the upper cable hops over the lower one, however close to the device that happens.

Considerations before you update: none. Drawings gain bumps they should always have had; nothing moves, and no file changes.

v0.57.0 — 2026-08-18

Layers decide what is on top, and "Send to back" finally means it. A tester pasted a picture to use as a background, sent it to the back, and every connector under it disappeared — the device icons stayed, the cables went, and nothing they tried brought them back. Changing the routing didn't help, nor recolouring, nor moving the picture onto its own layer and dragging that layer to the bottom of the stack. None of it could have: the drawing was painted in three fixed passes — zones, then cables, then everything else — so what a thing WAS outranked both the layer it sat on and where you had put it in the order.

Now there is one order for the whole drawing and no exceptions in it:

The same order now reaches the SVG, PNG and PDF exports and the saved .drawio, so all four finally agree. That last one fixes something nobody had reported: a file saved here listed every shape before every cable, and because <root> order is paint order in draw.io, opening our own file there drew the cables over the devices — the opposite of what you were looking at when you saved it.

Aggregate rings, endpoint port labels and group frames follow the same rule. They are drawn about your cables and shapes rather than being things you can arrange yourself, so each one now travels with the layer it belongs to: hide or restack a layer and its rings and labels go with it.

And you can now choose which layer you are drawing on. Each row in the Layers panel has a dot at its left: click it, and from then on everything you draw lands on that layer instead of the bottom one — a shape from the palette, a text box, a picture pasted or dropped in. Press it again to go back to the default. It is yours rather than the document's, so it is never saved into the file and a collaborator keeps their own. Copies and Import still keep the layer they came from: a duplicate belongs where its original lives.

That came with a bug worth naming, because it was silent. A new shape used to land on the bottom layer no matter what — so if you had hidden that layer, your shape arrived invisible and it looked like nothing had happened, and if you had locked it, the shape arrived unclickable and could not even be moved off. New shapes now go somewhere you can see and reach, always.

Considerations before you update: nothing you have already drawn changes position, and a document with a single layer looks exactly as it did.

v0.56.0 — 2026-08-18

The Line and the Arrow are connectors now. Testers said the line was hard to grab and impossible to connect to anything — it behaved like a square that happened to look like a line. It doesn't any more. Clicking anywhere within a few pixels of the stroke selects it, along its whole length, at any angle. Selecting it shows endpoint handles instead of a resize rectangle. And you can drag either end onto a device: it snaps with the same feedback a cable gives you, stays fastened when the device moves or is resized, and detaches when you drag it away. A line with both ends free still works — that's the whole point of it — and the arrow keeps its head through every one of those operations. Files save as real draw.io connectors, and lines drawn in earlier versions still open.

Re-stack your layers by dragging them. The Layers panel now reads the way every design tool's layer list reads: the layer on top of the canvas is at the top of the list. Each row has a grip you can drag — or nudge with ↑/↓ — to change which layer paints over which, live on the canvas, in one undo step, synced to collaborators and saved into your .drawio file. The map layer stays pinned to the bottom where it belongs.

A hidden layer is now genuinely hidden. Turning off every layer used to leave port labels and cable rings floating on an otherwise empty page. Those adornments follow their layer now — hide it and everything it contributes to the canvas goes with it.

A locked layer is actually protected. The ✕ used to delete a locked layer and its contents as readily as an unlocked one; a lock that stops a marquee but waves through a delete protects you from the small accident and not the big one. Deleting a locked layer, moving shapes into it, and dropping a map onto it are all refused now, with the lock given as the reason. And the Layers panel stays open while you click around the canvas, so "Move here" works in one pass instead of needing the panel reopened for every shape.

One clear button on every search field. The ✕ that clears a search box was the browser's own: present in Chrome, absent in Firefox and on the Mac, and a few pixels wide where it did exist. Every search field in the app — the icon palette, Find, the object list, the template pickers, the manual — now has our own: the same size and the same look everywhere, big enough to hit, clearing and refocusing the field in one click. Escape does the same thing from the keyboard where that field filters a list you're looking at.

The left panel survives your font settings. On some browsers and operating systems the icon palette wrapped its headings onto two lines, pushed counts onto the row below and clipped "Expand all". It now degrades gracefully under any reasonable font metric — bigger minimum font sizes, substituted faces, a webfont that never arrives — with long labels ellipsized and their counts staying welded to them.

Plus a round of polish on all of the above, from a code review of the release: duplicating a dashed or faded line keeps its dashes and its fade, a click on a fastened endpoint no longer detaches it, dragging a line's caption does something instead of nothing, a labelled line can't be hidden by switching views, and pressing Escape while composing text with an IME no longer wipes the whole search box.

Considerations before you update: none.

v0.55.0 — 2026-08-17

Groups got the polish they deserved. The inspector's tab strip no longer wraps its counts onto a second line — Properties, Connections and Groups sit on one clean line, each count in a small rounded badge. New groups name themselves the moment you press ⌘G (Ctrl+G) — "Group 1", "Group 2", and so on, always the lowest free number — so every group is findable in the Groups tab from the moment it exists, and you can rename it whenever you like. And a named group now wears its name on the canvas itself, in a small label just above its frame: click the label to select the whole group, drag it to move the group.

Considerations before you update: none.

v0.54.0 — 2026-08-17

PDF export works again — and looks like the drawing. Exporting to PDF (and printing the cable schedule) had been producing a broken page: the whole diagram collapsed into a solid black shape, the type fell back to a serif font, and the paper came out portrait instead of landscape. The cause was the app's own security policy leaking into the hidden print page and stripping every one of its styles — so the installed app and the PWA were affected even though every test looked green. Exports now come out the way the canvas looks: white device tiles, colored icons, hairline cables, the title band, landscape paper. A new automated check exports through the real production build so this cannot quietly break again.

Name your groups, and find them in a list. The inspector has a third tab, Groups, next to Properties and Connections. Every group on the page is listed there with a name you can edit, its member count and member names — and clicking a card selects the whole group and centers it on the canvas, so you can jump to "Rack 12" from a list instead of hunting for it on the map. Names are saved in your .drawio files, travel through Visio export/import, sync to collaborators, and renaming is a single undo step. Extending a named group keeps its name; merging two differently-named groups starts unnamed.

Considerations before you update: none.

v0.53.5 — 2026-08-17

FortiLink imports now work when your switches have names. If the FortiSwitches in your stack have been given hostnames — which, on any stack somebody looks after, they have — the FortiGate prints those hostnames in its topology dump instead of serial numbers. Pasting one of those dumps used to import nothing at all: the dialog reported a single line of parser error and stopped there. Site-coded names like 10405-001-sw02 are the reason. The FortiGate writes them into the file unquoted, and a Graphviz file is not allowed to do that — Graphviz itself refuses to read the same dump — so the importer now repairs the file on the way in rather than handing you the vendor's syntax error. Paste the output of execute switch-controller get-physical-conn dot exactly as your terminal shows it, prompt lines and all, and you get the whole stack: the FortiGate on top, an MCLAG pair side by side, access switches below. Cables the FortiGate lists once per aggregate member are merged into one and the merge is reported, so the count you read in the dialog is the count of real cables.

Considerations before you update: none.

v0.53.4 — 2026-08-17

The top bar is arranged by what each button is for. It had grown a control at a time, and while nothing in it was broken, the groups had stopped describing anything: Replace sat with the file actions although it edits labels and never touches the file, undo and redo floated alone in the middle, and the zoom controls sat at the other end of the bar from Fit to window — the one button they belong beside. Nothing has been added or taken away, and every button does exactly what it did; they are simply in the order you would group them yourself. The bar now reads: the file actions (New, Open, Save, Revisions, Blocks), then Import and Export side by side, then the editing actions — undo, redo and Replace. The right-hand end is everything about what you are looking at rather than what you are changing: Layers, Align, the ★ quick-shapes menu, the eye, zoom, fit and isometric.

Import sits next to Export now. They are the two ways a drawing meets another tool — the Export menu has been holding Import's counterparts all along (Graphviz DOT out for DOT in, NetBox CSV out for CSV in) — so they are a pair, and on a narrow window they are the last two buttons the bar gives up, together.

Considerations before you update: three buttons have moved, so if your hand knows where they are, it will be wrong once. Replace is now on the right of undo/redo instead of after Blocks; Import has moved left, next to Export; and the zoom controls have moved right, next to Fit to window. Nothing was removed and no button changed what it does. On a narrow window the ⋯ overflow menu now gives up the ★ quick-shapes menu, Align and Layers before Import and Export, which stay to the end.

v0.53.3 — 2026-08-16

Text stays inside its box. Drawbridge decides where a caption breaks by estimating how wide each letter is, and that estimate was too small — so a line it believed would fit could be painted a few pixels past the edge of its own text box or tile. It showed up worst on Linux, where the system font is widest, but it was never only a Linux problem. Every letter has now been measured against what the browser actually draws, at normal and bold weight, so the estimate errs on the safe side instead of the sorry one.

Considerations before you update: captions now break a little earlier than they used to, so a label that squeezed onto one line may fold onto two, and a long name on a small tile may end in … where it did not before — hover it, or open it in the inspector, and the full text is still there. Nothing about your files changes: this is only where the line breaks are drawn, and reopening a diagram anywhere will now break it the same way it does here.

v0.53.2 — 2026-08-16

A vendor's name only where that vendor's kit is actually being read. Drawbridge is a general network drawing tool, and a few places had picked up a specific vendor's product names as decoration — the Branch — SD-WAN template, for one, described itself as "Dual WAN into one FortiGate" when the template draws a plain firewall. It now says firewall, because that is what it draws. Where a vendor name is doing real work it stays exactly as it was: Import still names the commands you can paste, still recognises a FortiLink topology dump and FortiOS LLDP output, still reads serials into the asset fields and derives the model from them, and the icon search still finds the VDOM shape whether you type "vdom", "fortinet", "context" or "partition".

Considerations before you update: none. Nothing about your files, your imports or your exports changes. One built-in template's one-line description is the only thing you will see differently.

v0.53.1 — 2026-08-16

The "detached" mark moved to where the question is asked. v0.53.0 put a small pin on a detached object for as long as it stood inside a zone — which turned out to read exactly backwards: the badge was loudest where the object looked like it belonged, and a pin is a strange way to say "not attached". Now the drawing stays completely clean until you select a zone or rack — and at that moment, anything it will not take with it simply fades back: the detached object, and also a device that sits on another layer or a locked one, each saying why in its tooltip. Everything still vivid travels. Deselect, and the drawing is just the drawing again.

And the inspector counts it out for you. With a zone selected it now reads Carries all 3, or Carries 2 of 3 — 1 detached, or Carries nothing after Release contents. That line is also how you catch the device that looks half inside but is not: you placed three, the zone says it carries two.

Considerations before you update: none. Nothing about your files changes — this is purely how the editor shows a state that already existed, and exports never carried any of these marks in either version.

v0.53.0 — 2026-08-16

A zone takes its contents with it, whichever way you move it. Dragging a zone has always carried the devices standing on it — but the arrow keys did not, so nudging a zone slid the box out from under its own contents. Neither did Align, and a nudged rack left its mounted hardware hanging where the cabinet used to be. All three now behave like the drag. Hold Alt — while dragging, or while pressing an arrow key — to move the container alone and leave everything where it is.

And you can take one object out of a zone's grip for good. Several people asked for a way to "ungroup" something from a zone without moving the zone itself. Select it and press Detach in the inspector, or Alt-drag the object; either way that object stops travelling with the container, and a small pin marks it while it stands inside one. Reattach puts it back, and so does simply dragging it and dropping it into the zone again — an ordinary drop means "this belongs to the box you dropped it in". To release a whole zone at once, select the zone and press Release contents.

The app now explains the carry the first time it happens, rather than leaving you to discover it. The first time a move takes a zone's contents along, it says so once and mentions the Alt key — once per install, never again. App menu → Show one-off tips again brings that (and any other one-off tip) back.

Considerations before you update: the detach mark is stored in your .drawio file as one of Drawbridge's own attributes. An older version of Drawbridge — or draw.io itself — opens such a file with every object present and in the right place, but without knowing that anything was detached; save it there and the mark is preserved, not lost. Nothing else about existing drawings changes.

v0.52.0 — 2026-08-15

The manual's cross-references are links now. Every "See Shapes." in the in-app manual was plain text — it looked like a reference and did nothing. There are now 37 real links across twelve pages, and three of them take you to the exact section rather than the top of the page. The website's copy of the manual gains the same links, and its headings gain anchors, so you can send somebody a link to one section of the docs.

And the manual stops opening pages half-way down. If you had scrolled through one page and then picked another from the sidebar, the new page opened wherever the old one had been left — sometimes thousands of pixels in, in the middle of a sentence. Search results had the same problem in a quieter way: they took you to the right page but not to the section you searched for.

The legend no longer has a broken row. On a page containing a text block, Blocks → Legend drew a row with no icon and the word "Text" split across two lines, colliding with the row underneath. The legend explains what the device symbols mean, and a text block is not a symbol — so it, and callouts, are simply left out. The rest of the legend is unchanged. This one mattered more than it looks: the legend is part of the drawing, so the broken row was going out in exported files.

The app starts faster. About 370 KB of typeface data was being loaded by everyone on their first visit, including people who never export anything. It is now fetched the first time you export, and exported files carry their fonts exactly as before.

Considerations before you update: none.

v0.51.0 — 2026-08-15

You can drag a diagram file straight onto the canvas to open it. Drop a .drawio or a .vsdx anywhere on the drawing and it opens, without going through Open first. It asks the same question beforehand if what you have open has unsaved changes, and it opens the file as a document rather than pasting it into the drawing you are already working on. One thing to know: because a dropped file hands over its contents but not permission to write back to it, Save will ask you where to put it. Dropping an image still adds the image to the drawing, exactly as before.

Cable labels read the right way round in the isometric view. Turning the camera used to leave every connector caption and port name mirrored at two of the four corners — the device names were fine, the cables' text was backwards. All of it now turns to stay readable at every angle, in exported SVG, PNG, PDF and HTML files as well as on screen. A caption you have set to follow its cable also keeps following it through those turns, which it did not before.

Hiding a layer now hides its port names too. Switching a layer off took the devices and the cables but left the little port labels behind, floating over an empty page attached to nothing.

The manual reads properly. Parts of the in-app manual were showing their own formatting marks — See _Shapes_. instead of Shapes — on twelve of its fifteen pages, including the first one. The website has always rendered those pages correctly; now the app does too.

Considerations before you update: none.

v0.50.0 — 2026-08-15

Three new typefaces, and these ones travel with your drawing. Inter, Lato and Roboto Mono join the four faces already there, and unlike those four they ship inside Drawbridge itself — their letterforms are written into every SVG, PNG, PDF and HTML export you make. A diagram you send to someone looks the way it looked on your screen, on a machine that has never heard of the font and with nothing fetched from the internet to make that happen. Roboto Mono is the one to reach for on a busy drawing: like Mono it lines up IP addresses and interface names, but you get to choose which of the two you prefer the look of.

Picking a typeface is now a drop-down rather than a row of buttons. Seven faces did not fit four buttons' worth of space. Every row is drawn in the face it sets, so the list shows you the fonts instead of describing them, and the closed control does the same. Below it, a line tells you what you have just chosen — whether it travels with your exports, or (for Comic) that Linux machines usually have to substitute something.

What the other tools see. A .drawio or .vsdx file records a font by name and has no way to carry the letterforms, so draw.io and Visio substitute something sensible of their own — Helvetica for Inter and Lato, Courier New for Roboto Mono. Drawbridge remembers your real choice and puts it back when you open the file again, so passing a drawing through another tool does not quietly flatten your typography.

Considerations before you update: none.

v0.49.0 — 2026-08-14

Changing the font now updates text you have already written. In v0.48.0 the new Text style controls set the weight and typeface correctly — the change was saved to the file and shared with anyone you were working with — but the text on your own screen kept its old look until something else made the page redraw. It reads as "the button does nothing", and it is fixed.

The format painter carries the whole look now, not most of it. Copy the style from one object and paint it onto another and you get the weight, the slant, the underline and the typeface as well — previously those stayed behind, which was easy to miss because everything else travelled. The painter also carries the label size between any two objects, where before it moved only between text blocks; and it carries an optical wavelength alongside the cable medium it belongs with, which it never had.

Shapes, zones and backdrops can be faded. A new Opacity slider in the properties panel makes a basic shape, a zone, a virtual context or the Purdue backdrop as solid or as faint as you want — useful for putting a shape behind your devices without it competing with them. It fades the outline along with the fill, so the whole thing recedes together, and it is carried by the format painter like every other part of a look. Devices do not offer it: a faded icon reads as broken rather than subtle.

Considerations before you update: one, and only if you use the format painter on text sizes. Painting from an object that uses the document's default text size now RESETS the target's own size to that default, instead of leaving it alone. That is how the painter has always treated colour and alignment — an unset value is a look, and painting it clears — and font size is now consistent with them. Nothing changes unless you paint.

v0.48.0 — 2026-08-14

Labels can be bold, italic and underlined, in four typefaces. A new Text style row in the properties panel styles the caption of anything you select — a device, a connector, a text block — and the three switches combine, so a caption can be bold and italic at once. Select several things and one press styles all of them, as one undo.

The four typefaces are Sans (what every drawing already uses), Mono, Serif and Comic. Each button is drawn in the typeface it sets, so the row shows you what you are picking. Mono is the one worth knowing about for network drawings: interface names, IP addresses and port numbers line up under each other and are far easier to compare when every character is the same width. Nothing is embedded in the file, so a typeface is a request that falls back to whatever the machine opening the drawing has — which matters most for Comic, present on Windows and macOS and usually missing on Linux. Changing the typeface changes how wide the text is, so a caption may re-wrap onto another line.

Eight plain shapes for annotating a drawing. A new Basic shapes section at the bottom of the palette holds a rectangle, ellipse, diamond, triangle, hexagon, star, note and line. They have no icon — the shape itself is the drawing, so it fills whatever box you drag: a rectangle stretched wide is a wide rectangle and an ellipse stretched wide is an oval. Two behave deliberately differently: a star keeps its proportions whatever box you give it, and a line is drawn corner to corner, so dragging its box sets both the angle and the length.

Each shape has Dashed and Filled switches that combine into four looks, and takes a colour like anything else on the page. They are marks rather than containers — they do not capture the devices you draw on top of them, which is still what a Zone is for. Cables attach to the rectangle, ellipse, diamond and hexagon.

Both travel into draw.io properly. Weight, typeface and every shape are written using draw.io's own keys, so a drawing opened there shows the same bold text and a real ellipse rather than a rectangle. Opening a file somebody else made works the other way too: a label they made bold in draw.io now arrives bold here instead of rendering plain.

Considerations before you update: none. Existing drawings are untouched — nothing gains a typeface or a style it did not have, and a document that never uses the new controls saves byte-for-byte as it did before.

v0.47.2 — 2026-08-14

Saving on Windows no longer fails when two saves overlap. On Windows only, a save could come back as an error if another write to the same file was already in flight — auto-save firing at the moment you pressed Save being the easy way to meet it. The app writes your file by writing a temporary one beside it and then renaming it into place, which is what stops a crash mid-save from truncating your work; macOS and Linux allow that rename even while something else is touching the destination, and Windows refuses it. The rename now waits a moment and tries again, for up to half a second, before reporting a failure — so the overlap resolves itself and the save lands. A save that genuinely cannot be written still fails promptly and tells you why.

Considerations before you update: none. If you are on Windows and have seen a save fail with an EPERM or "operation not permitted" message, this is that.

v0.47.1 — 2026-08-14

The icon palette keeps its width while you search. Type something broad into the palette's search box — a single letter matches most of the library — and every section opens at once, so the panel runs past the bottom of the window and a scrollbar appears inside it. On a Mac set to always show scrollbars, that scrollbar was taking its width out of the panel rather than sitting over it: both columns of icons narrowed the moment you typed, and names that had always fitted — "Load balancer", "Network TAP" — broke onto a second line. Because it only happened once the list was long enough, the grid looked like it was rearranging itself at random as you searched. The panel is now the same width whether it is scrolled or not, and the wheel, trackpad and keyboard scroll it exactly as before.

Considerations before you update: none.

v0.47.0 — 2026-08-13

This release is one long repair pass. A full read of the code turned up 55 defects, and all of them are fixed here — most of which you would only ever have met as "that is odd", because almost none of them announced themselves.

A device dropped on a cable is noticed again. Drop or drag a device onto an existing link and the cable now bends around it. Before, the cable stayed drawn straight through the device, permanently, until something unrelated happened to make that part of the drawing recalculate.

A locked layer holds on the way in, not just against deletion. You could still draw a cable to a device on a locked layer, or drag an existing cable's end onto one — and the cable that appeared could then be neither deleted nor clicked on again, so the only way out was unlocking the layer.

Your keyboard belongs to whatever you are typing in. Pressing Backspace while correcting a value in Document info used to delete the devices you had selected behind the dialog, with nothing on screen to say so. Arrow keys in a dropdown nudged the drawing instead of changing the value, and Space could not open a picker at all.

Captions stay the size you set them. With the document text scale at anything other than 100%, a connector's label was re-laid out at 100% every time the cable rerouted — so its lines overlapped, it sat on the cable instead of clear of it, and it could run past its own width. It happened on first load and after every drag, and never corrected itself.

Exports stop cutting captions off. A caption placed to the left or right of a device — or a tall multi-line one above or below — was clipped at the edge of every exported SVG, PNG, PDF and HTML file, while the canvas showed it whole. An ordinary name like fw-edge-01 lost about 22 pixels.

Compare tells you the truth about how a page looks. It read seven of the twenty things that can change a shape's appearance, so a dashed flow arrow, a boxed callout, a rack's depth or a map showing a different region all counted as no change at all — and the panel said "no differences" about two pictures you could see were different.

Racks keep what you told them. A rack's rear elevation and a unit's mounting depth were dropped every time you saved a file you had opened, and un-ticking Show rear could write a front unit and a rear unit into the same slot — the rear one invisible behind the other, recoverable only with undo. Units displaced by losing the rear face now move to the nearest free U.

Pictures keep their captions where you put them. A caption moved above or inside an image came back below it on reopen — and draw.io drew that same file differently from us, because the two of us disagreed about which of the two conflicting instructions in it to follow.

Flow arrows stay in their group, saved files with a hand-edited coordinate no longer become files draw.io cannot open, and a Visio file whose stencil definitions are damaged now imports the drawing instead of refusing the whole file.

Shaped arcs survive a Visio round trip. A curve you had shaped by hand slid further from its cable every time the document was saved as .vsdx.

Layers behave. Deleting a layer no longer re-homes its devices onto a world map's layer — where hiding the map would have hidden them too — and a pasted map no longer joins an unrelated layer just because the names match.

Sharing. If you had opened a view-only invite, then later shared a document of your own, you were locked out of your own drawing and told you were a guest. And when a host left, the person who took over got a share panel with no link in it, no invite code and no way to reach the button that would make one.

Opening two files at once keeps both. One of them lost its permission to save, silently — and you found out a session later, when it came back untitled with auto-save switched off while the file sat untouched on disk.

The feedback form takes your report. Its rate limit was counting everyone as one person, so five submissions from anywhere in an hour turned the sixth away; a report split across network packets could arrive with ? where a non-ASCII character had been; and an oversized one failed as a dropped connection instead of saying it was too large.

Smaller things: a custom link speed typed by an import is now visible and editable in the Connections panel instead of showing blank (and picking "None" no longer wipes it); the ring picker no longer offers a ring a cable is already in, which used to draw a ring around a single cable and quietly dissolve another; the minimap keeps a recoloured map's colour; and a hand-edited file with a broken map region opens instead of failing to draw at all.

And it is quicker in the places you notice. Sweeping a selection box across empty canvas did about 2,000 pointless screen updates and sent 40 network messages to everyone you were sharing with; moving the pointer across one card in the Connections panel re-checked every cable 27 times; and saving a multi-page Visio file walked the whole page once per cable.

Considerations before you update:

v0.46.0 — 2026-08-12

Every map now comes from one place in the palette. The Map button is gone, and the Add place… picker it sat next to has taken over its job: the list opens on a Backdrop group holding the world map and the five regions — Americas, EMEA, APAC, Europe, Nordics — with every country underneath as before. Picking a region drops it behind the page as scenery, on its own layer, the same way the Map button dropped the world.

And a region now arrives shaped like that region. Choosing Europe used to mean adding a world map and then reframing it in the properties panel; the map that lands is now Europe's own shape from the start, and the same for the Nordics, APAC and the rest. There is still one backdrop per page — pick another and Drawbridge selects the one you already have and points you at the extent field, which reframes the map and carries the devices standing on it.

The palette's tools sit together. With the Map button gone, the search box and the place picker are now side by side at the top, and Collapse all and Connector share the row beneath them. Collapse all has not moved from the left edge where it has always been.

Considerations before you update: none. Existing diagrams, including their map layers, open and save exactly as before.

v0.45.3 — 2026-08-10

The minimap keeps its corner a little longer. When the properties panel grows tall enough to reach the bottom-right of the window, the minimap moves out of the way to the left of it — by design, so neither covers the other. On a laptop-sized window the panel was reaching that point sooner than it needed to, because its section headings ("LABEL", "COLOR", "ARRANGE") were spaced by a measurement that changes from one operating system to the next. They now have a fixed spacing, so the panel is the same height everywhere and the map stays put until the panel genuinely needs the room.

Considerations before you update: none.

v0.45.2 — 2026-08-10

Every toolbar menu is drawn the same way now. The rows with a checkbox — the View menu's ten switches, the Blocks menu, the app menu's Auto-save — were drawn a size smaller and a shade greyer than the rows without one, and highlighted differently when you pointed at them. A menu row now looks like every other menu row, whether or not it carries a tick, and the More menu's section headings match the headings in the other menus.

And the same tidy-up across the dialogs. Buttons came in three sizes, the titles in two, and text fields in four — Revisions, Document info, the icon library, the manual, the inspector and the palette search had each grown their own. There is now one size for a button that closes a dialog, one for a button inside it, one for a text field and one for a title, so the app reads as one product rather than as the order its windows were built in.

Considerations before you update: none.

v0.45.1 — 2026-08-10

Toolbar menus now open under the button you pressed. They used to line up their right-hand edge with the button, which meant a narrow menu — Blocks, with its three short rows — spread out to the left across its neighbours and looked like it belonged to whatever word it happened to cover. Every menu in the bar now starts under its own button, and menus near the right-hand edge still slide back onto the screen rather than running off it.

Considerations before you update: none.

v0.45.0 — 2026-08-10

The Blocks menu is three switches now. Legend, Optics and Title are checkboxes rather than buttons: a tick means that block is on this page, so ticking one builds it and clearing it takes it away — the same one press, and one Ctrl/⌘ Z either way.

And the menu stays open while you use it. Putting a legend and a title block on a page is two clicks in one menu rather than four through a menu that closed itself each time. It closes when you leave it — click the canvas, press Escape, or open another menu.

A switch that cannot build anything says so and goes back off: a legend on an empty page, or an optics block where no cable needs port hardware. So a tick always means the block is really there.

Considerations before you update: none.

v0.44.0 — 2026-08-10

Take a block off the page from the same menu that puts it on. The Blocks menu could only add: to get rid of a legend, an optics block or a title block you had to find it on the drawing, select it and press Delete — which is a hunt when the block has drifted behind a rack or off into a corner, and not an obvious thing to try for the three things you never place by hand.

Every row now has a × on the right. Press it and that block is gone, with nothing selected on the canvas and one Ctrl/⌘ Z to bring it back.

The × only appears while that block is on the page, so the menu is also where you see which of the three this page has — and removing one leaves the others alone. Nothing you typed is lost either: a title block's contents belong to the document, so removing the grid and adding it back brings your title, author and revision back with it.

Considerations before you update: none.

v0.43.1 — 2026-08-10

Toolbar menus no longer pile up. Opening a menu while another one was open left the first floating on top of the second — you had to press Escape or click the canvas to clear it. Opening any menu now closes whichever one was already open. This was never specific to one pair: all eight menus in the bar behaved this way, it just showed most when two of them sit side by side. Menus opened from the More button are the deliberate exception — they leave More itself standing, since that is what you would be reaching back into.

v0.43.0 — 2026-08-10

A View menu — turn off what you do not want to look at. There is a new eye in the toolbar, beside the ★ Quick shapes star, holding ten switches for what the drawing shows:

Two things make it useful rather than just tidy. Nothing moves: cables are still routed around every device whether you can see it or not, so switching the notes off never redraws the diagram — turn everything back on and you have exactly the picture you started with. And your exports follow what you are looking at: SVG, PNG, PDF, copy-image and the HTML viewer all get the view on screen, so you can hand over a clean topology without editing the document to make one.

It is yours rather than the document's — remembered in this browser, never saved into the file, and a collaborator sees their own view. To hide something for everybody, use layers. While anything is switched off the eye is struck through, so you can always tell, and Show everything at the bottom of the menu puts it all back in one click.

Also fixed: Select all followed by Delete could remove devices on a hidden layer — objects you could not see, with nothing on screen to say they had been selected. Select all now skips anything hidden, exactly as a marquee already did.

Considerations before you update: none.

v0.42.0 — 2026-08-10

The SD-WAN generator now wires every box it draws. Generating a multi-region topology left three kinds of device with cables missing, and the bigger the design the more obvious it was:

A new first question: how much detail do you want? The generator opens by asking whether to draw every device or one box per site. At site level an HA pair — at a hub or at a branch — becomes a single object, and each site draws exactly one tunnel to its regional hub: a two-region, eight-branch design goes from eighty-eight connectors to nine. The questions that no longer change that picture (hubs per region, WAN links, branch HA, branch LAN) stop being asked. Pick "every device" when you are documenting the build, "one box per site" when you are explaining the shape of the network to someone.

Tidy up no longer flattens a generated SD-WAN page. Once both the hubs and the branches were HA pairs, pressing Tidy up put the whole topology on a single row. Cables drawn top-to-bottom are now always read as hierarchy, so hubs stay above their branches and paired devices stay side by side.

Considerations before you update: existing diagrams are untouched — this only changes what the generator draws next time you run it. If you have a generated SD-WAN page you want brought up to date, generate it again with the same answers.

v0.41.1 — 2026-08-10

The overview map is a real picture of your drawing again. Two things were wrong with it, and both showed up most on large diagrams:

Editing a pasted topology no longer throws the paste away. In the Import dialog, selecting the first rows of a long paste — say the two prompt lines a terminal copy brings with it — by dragging up past the top edge of the box closed the dialog and lost everything you had pasted. Selections that end outside a dialog are now understood as selections. The same fix applies to every dialog in the app: the manual, the icon library, the cable schedule and the rest still close when you click the dimmed page beside them, and no longer close when you were only selecting text inside them.

Considerations before you update: none.

v0.41.0 — 2026-08-10

The update panel now tells you what is in the update. When Drawbridge finds a newer version, the amber panel in About used to give you a version number and three buttons; it now shows that version's release notes above them, so you can read what you would be getting before you decide. While the panel is up, the "What's new" notes for the version you are already running step aside — one set of release notes at a time, and the one you are deciding about wins.

Huge network drawings are now genuinely workable — import in seconds, edit without freezes. This release rebuilds how the router spends its time on big topologies, in four layers that add up:

Drawings below this scale are completely untouched: your existing diagrams route, render and export exactly as before — that equivalence is verified byte-for-byte by the test suite, not assumed.

Considerations before you update: none.

v0.40.1 — 2026-08-09

Nothing changes in the app. This release carries a fix to the project's own test suite: one check on the country maps was slow enough to time out on the Linux and Windows machines that verify each release, which had been reporting the last two releases as failed even though nothing was wrong with them. The check now runs sixteen times faster and tests exactly what it did before.

Considerations before you update: none — if you are on v0.40.0 there is nothing here for you.

v0.40.0 — 2026-08-09

About now tells you what's new. Open About — the Drawbridge logo at the far left of the toolbar — and under the version line you will find the release notes for the exact version you are running, in plain language, including anything worth checking that came with it. They are part of the app, so they are there with no network and can never describe a different version from the one you have. Long releases scroll, with the bottom edge fading while there is more to read, and All release notes at the foot opens the full history for every version.

Considerations before you update: none.

v0.39.0 — 2026-08-09

"Add country…" is now "Add place…". The palette picker has held the fifty US states and DC alongside every ISO country for a while, so its name caught up: the button, its search field and the inspector's extent search now say "place". Nothing behind the button changed — same list, same behaviour, and your existing maps are untouched.

Country and state maps stand upright. A single place is now drawn flat on its own centre line, the way it looks on its own local map — the United States sits square instead of leaning the way it does at the edge of a world wall map, and the same goes for Japan, Australia, Chile and every US state. Countries the world map's edge used to cut in half draw whole: a solo map of Russia is one contiguous country. World and region maps keep the classic world-map look, showing a country's neighbours draws them around it without moving it, and devices standing on a map are still carried to the same place on the globe when you switch extents. Nothing is squashed or stretched — it is the same geometry, looked at from straight on.

Considerations before you update: none.

v0.38.0 — 2026-08-08

The whole map is redrawn from reference cartography. Every country outline now comes from Natural Earth's 10-metre dataset — the reference cartographers use — instead of a 2005 political map traced at low fidelity. Coastlines have their real shape (the Netherlands has its Wadden Islands and IJsselmeer, Denmark its isles, Greece and Croatia their archipelagos, Norway its fjords), borders between neighbours knit exactly by construction, and major lakes read as water. Detail scales with size, so small islands keep their shape instead of collapsing into blobs.

Fifty-six countries and territories join the map. Singapore, Hong Kong, Malta, Macao, the Maldives, the Faroe Islands, Barbados, Liechtenstein, Monaco and the rest of the world's small states are now drawn and pickable — the picker covers every ISO country. The ten-biggest-cities table covers the newcomers too.

US states redrawn to match. The state outlines ship at the same fidelity as the new world map, still knitting seamlessly with each other.

Considerations before you update: none — but if a device sat on a coastline the old map drew wrongly, it may sit slightly differently against the corrected shore.

v0.37.0 — 2026-08-08

Every country on the map verified against real-world geography. All 185 country outlines were checked against Natural Earth, the reference dataset cartographers use. Eighteen island nations that earlier simplification had reduced to invisible slivers or stripped of their islands — Bahrain, Cape Verde, Dominica, Mauritius, Réunion, the Comoros, Samoa, French Polynesia, Vanuatu, the Bahamas, the Solomon Islands, Fiji, the Falklands and more — are redrawn from that data, and Cyprus lost a stray spike it never should have had. If you have placed a device on one of these maps, it may sit slightly differently against the corrected coastline.

US states are countries now. The map picker has a United States group with all fifty states and DC. Pick Texas from Add country… and it lands as a silhouette on its own layer exactly like a country; set a map's extent to a state and, with neighbours shown, the surrounding states are drawn with their borders. The outlines come from US Census Bureau geometry, drawn in the same projection as the rest of the map.

Show cities marks the ten biggest cities. A new checkbox on any map draws its extent's ten biggest cities as quiet dots with names — the world's ten, a region's, a country's, a state's — so "the Göteborg site" can sit on Göteborg. Off by default: existing drawings look exactly as they did.

Considerations before you update: none.

v0.36.1 — 2026-08-07

The legend no longer lists flow arrows. A flow arrow is an annotation about the drawing, not a device symbol — a legend row saying "Flow arrow" explained nothing, and it is gone.

Considerations before you update: none.

v0.36.0 — 2026-08-07

Draw where the traffic goes. A new Flow arrow in the palette's Annotation family puts a bold red arrow on the page — packets into the DMZ, an attack path, a replication direction. Drag to draw it (right-angle bend on the dominant axis, Shift for a straight diagonal), reshape it by its point handles, add bends with the mid-segment diamonds, and label it exactly like a connector — same caption, same placement controls, same drag. The inspector switches solid/dashed and one-way/both-ends, and the colour swatches recolour it. In isometric view it lies flat in the floor plane like a cable, so it keeps pointing at what it annotates from every corner, and saved files carry it as a native draw.io arrow.

PDF export is readable from a dark editor again. Exporting a PDF while the app was in dark mode printed near-black tiles and pale cables onto the white sheet — every shape a black box. A PDF is ink on paper: the print sheet now always uses the light theme's colours, whatever the editor is showing.

Considerations before you update: none.

v0.35.0 — 2026-08-07

Your most-used shapes, two clicks closer. Hover any palette tile and a small star appears — star it and the shape joins a pinned ★ Favorites group at the top of the palette; star a section heading to pin the whole category. Separately, a new ★ button in the toolbar opens a Quick menu of shapes you choose for it (press Customize… inside the menu), handy when the palette is a long scroll away. The two lists are deliberately independent, and both are remembered per browser.

Text boxes finally wrap. A long sentence typed into a Text or Callout block used to render as one line running straight off the edge of the box, and resizing the box did nothing about it. The writing now follows the box: it wraps at the block's width and re-flows live as you drag a corner. Line breaks you typed yourself stay exactly where you put them, and nothing is ever cut off to fit — text that outgrows a short box simply runs below it until you give it room.

Searching malware now finds the Malicious file first. Both it and the Infected laptop answered to the word; the file — the thing that is the malware — now owns it, and the laptop still answers to compromised, pwned and infected.

Considerations before you update: text blocks whose long single-line text used to overflow their box will now show it wrapped — if you relied on the overflow look, widen the box once and it reads as before.

v0.34.1 — 2026-08-07

A session hand-over is now confirmed, not hoped for. When a host closes their window, each participant now explicitly acknowledges receiving the hand-over before the departing host hangs up. Previously the host flushed the message and closed; on a very busy machine a participant could lose the hand-over in that gap and spend half a minute reconnecting to a host who had left. The wait is bounded, so a participant who has genuinely vanished cannot hold the host's window open.

Joining tells you things in the right order again. On a host set to admit automatically, the "waiting for approval" and "you're in" messages could arrive swapped on a busy machine. They are now always sent in sequence.

Considerations before you update: none. Older and newer versions still collaborate; the acknowledgement is skipped automatically when the other side predates it.

v0.34.0 — 2026-08-07

Verdicts now carry their colour, and the attack shapes get their own palette section. The clean file and clean website are green, the unknown pair grey, and the malicious pair red — the same three verdicts whether stamped on a file or a website, and the only place in the palette where colour means status rather than category. The badge mark always says the same thing as the colour, so nothing depends on telling red from green. The Attacker and Infected laptop have moved out of People into a new Attack section alongside the six verdict shapes, so the whole story-telling vocabulary lives under one heading — and People is back to being only people and their machines.

Considerations before you update: diagrams already using the clean or unknown file/website shapes will change colour (green and grey instead of red) the next time they render or export. Nothing else about them changes — same shapes, same names, same DOT ids.

v0.33.0 — 2026-08-07

Draw an attack, not just a network. Nine new shapes cover the story security diagrams keep needing to tell. An Attacker — the black-hat figure, drawn on the same shoulders as a User but never in the same colour — and a Home site for the remote worker, next to Branch office in Places. A new Files & websites palette section holds six verdict shapes: a clean, malicious or unknown file, and a clean, malicious or unknown website. Each pair shares its mark — a check, a radiation trefoil or a question mark — so once you have read one badge you have read them all. And an Infected laptop: the Laptop shape with the radiation mark ringed on its screen, for the endpoint after the malicious download ran. All of them are searchable the way you would type them — hacker, phishing, malware, wfh, pwned — and each hands you its DOT name for diagrams written as code.

Considerations before you update: none.

v0.32.3 — 2026-08-06

New starts you at 100% zoom. Pressing New used to keep the previous document's view — start a fresh drawing after zooming far out and your first shapes landed on a page you could barely see. A new document now opens at 100%, and a cancelled New (when you keep your unsaved work) leaves the view exactly where it was.

Import reports a bad line once. When a pasted CSV row was both too short for the header and missing its device name, the import dialog listed the same line twice. One line, one entry now — and a line that was skipped no longer also claims it was imported with adjustments.

Long names stay whole at large text scales. At 200% document text scale a name inside its tile used to break in the middle — "Firewall" became "Firewa / ll" — and the icon shrank to a speck under the two-line caption. A single word that cannot fit now stands a little proud of its tile instead, whole, with its halo keeping it readable, and the icon keeps its room. Only a name too long even for that is shortened with an ellipsis. Ordinary multi-word names wrap exactly as before.

A session hand-over no longer strands anyone. When a host closes their window, the session hands itself to the longest-connected editor and everyone else follows it there. Very rarely, a peer could miss that hand-over: the message naming the new host could be discarded while connections were closing, and the app then spent half a minute silently re-dialling the host who had just left before giving up with "Connection lost". Both halves are fixed — the hand-over message can no longer be cut off mid-send, and a dial to an address that no longer answers gives up in ten seconds instead of thirty. Joining from a link whose host is offline reports it faster for the same reason.

Considerations before you update: none.

v0.32.2 — 2026-08-06

New gives you a genuinely new document. Pressing New used to keep the previous drawing's identity — its title, its revision, its dates, and its classification. If you had marked a drawing CONFIDENTIAL, the blank sheet you started next came up stamped CONFIDENTIAL, banner and watermark, and it exported that way. New now clears all of it. The one thing it still carries is what you explicitly asked it to: tick Remember this logo, organization and name for new drawings in Document info and those fields keep coming back, which is what that checkbox has always been for.

Considerations before you update: if you had been relying on New keeping your organization name or your classification, tick Remember this logo, organization and name for new drawings in Document info once — after that it carries over deliberately instead of by accident. Drawings you have already saved are unaffected; this only changes what a brand-new one starts with.

v0.32.1 — 2026-08-06

The Font size box now works on zone titles, rack titles and rack-unit names. It was offered on those in v0.32.0 and quietly did nothing — the field took a number, said nothing, and the drawing did not change. It applies now.

An aggregate ring's caption can be sized. It is the one label that had no size control at all: a ring's caption belongs to the aggregate rather than to any one cable, so it now has its own Font size in the Connections tab, beside where you set where the caption sits.

A ring's caption survives being saved. Naming a ring wrote the name into the .drawio file correctly and then dropped it on the way back in, so a ring you had called Po1 reopened nameless — along with its position, its side, and which device it hugs. This affected every version that has had ring captions. Files you have already saved were never damaged: the name is in them, and it comes back when you open them in this version.

Considerations before you update: a ring caption you set and thought you had lost will reappear when you reopen that file, which may move a label back onto a drawing you had since worked around it on. Nothing else changes.

v0.32.0 — 2026-08-06

You can set how big the writing is. Open Document info and there is a new Text scale: one setting that sizes every label on the drawing at once — device names, connector labels, port labels, zone and rack titles, text blocks. It is the answer to "this prints at A3 and nobody can read the port labels", and it is one choice rather than a font size on every shape. Anything you export — SVG, PNG, PDF, the HTML viewer — comes out at the size you set, and a .drawio file opens at that size in draw.io too.

And you can override it on one thing. The inspector's Font size field now works on any device, zone, text block or connector, not just on Text and Callout blocks. Leave it empty and that object follows the document scale and keeps following it when you change the scale later; the grey number in the field is the size that currently produces. Type a size and that object stops following — so a heading you made big stays big when you scale the rest of the drawing. Reset puts it back. A connector's size covers its own label and both port labels together, because one connector with two differently-sized port labels looks broken rather than configured.

"Update all" sits beside the text scale and clears every per-object size on the page in one go, so a drawing somebody has hand-tuned into a mess goes back to following its setting. It tells you how many objects it changed, and it is a single Undo.

A zone can be moved without taking everything with it. Hold Alt as you start dragging a zone or a rack and it moves alone, leaving its contents where they are. Until now there was no way to do this at all — you had to drag the contents out and back, or resize the zone off them. The inspector says so whenever a container is selected, so it is not a secret.

And a zone minds its own layer. What a zone carries is now scoped to the layer it is on: a zone on your physical layer no longer picks up an overlay object that happens to sit on top of it. It also stops moving things on hidden and locked layers — which was the worse half, because a hidden device would be dragged across the page with nothing on screen to show it had happened.

Ring labels sit where they say they do. On an aggregate ring, Above put the caption below the ring and Below put it above, on any ring running down-and-right — and the same control behaved correctly on a ring running the other way, so the two words meant opposite things on two rings that look identical. Above is now above, on every angle, and Start is reliably the upper end of the ring.

Font sizes set in draw.io survive. Opening a .drawio file where somebody had made a device's label bigger used to silently reset it to ours, and saving wrote their sizing out of their own file. Those sizes are now read on every kind of shape and on connectors, and written back.

Considerations before you update: two things change how existing drawings look, both of them corrections. If you have an aggregate ring whose label is set to Above or Below, that label will move to the other side of the ring — the side it was always meant to be on; a ring label set to Start or End may likewise swap ends. And if you have a zone sitting over objects on a different layer, dragging that zone no longer carries them; move them onto the zone's layer if you want them to travel with it. The document text scale starts at 100% for every existing drawing, so nothing changes size until you ask it to.

One thing worth knowing about the scale: a label that sits inside its tile has only the tile's width to work with, so at the largest settings a long name will wrap — and a single long word will break across two lines. 150% is comfortable on the standard shape size; 200% wants either Label position: Below, which gets the caption six rows and lets it overhang a little, or a bigger shape.

v0.31.0 — 2026-08-06

A page is named in one place. The text field that sat beside the Drawbridge wordmark at the top of the window is gone. It never named your drawing — it renamed whichever page you happened to be looking at, which the page bar along the bottom of the window already shows and already renames when you double-click a tab. Two boxes for one name is one box too many, and the top one had no context: on a second page it read as a bare Page 2 sitting next to the logo, with nothing to say what it belonged to.

Considerations before you update: to rename a page, double-click its tab in the page bar at the bottom. Nothing in a saved drawing changes, and no page has been renamed — only the second place you could type the name has gone.

v0.30.0 — 2026-08-06

Two new shapes: PAM and User group. PAM joins the Security section for privileged access management — the system that holds the credential, hands out the session and records it. It is drawn as a screen with a user on one side and a padlock on the other, and you can find it by typing pam, credential vault, session recording or break glass. It is a different shape from the Jump host on purpose: the jump host is the box the traffic passes through, PAM is what decides who may pass and keeps the recording. Drawings that show both now have a shape for each.

User group joins the People section for a set of people rather than a person — a department, a role, an AD or LDAP group, the contractors. It is the User figure drawn three times, so a page that mixes individuals and groups reads at a glance. Search group, role, team or ad group.

Considerations before you update: typing pam in the palette used to return the Jump host, because the acronym was one of its search aliases. It now returns the new PAM shape only. Nothing in a saved drawing changes — a jump host you have already drawn is still a jump host.

v0.29.0 — 2026-08-06

The Layers panel tells you which layer your selection is on. The row for that layer is highlighted, and where its Move here button would be it now says current — because moving something onto the layer it is already on does nothing. If your selection spans several layers, every layer it touches is highlighted and all of them stay clickable, since gathering a mixed selection onto one layer is a real change.

File sizes read like file sizes. A small bug-report zip used to be described as "0.0 MB" — indistinguishable from a file that failed to save — in the toast that tells you what to attach, and again on the feedback form. Sizes now say what they are: 40 kB, 1.2 MB. They are also measured the way your operating system measures them, so the number matches what Finder or Explorer shows for the same file.

Considerations before you update: the bug-report attachment limits are now 4 MB and 5 MB exactly, rather than 4 and 5 binary megabytes. That is about 5% less room than before — far more than any report needs, and it makes the limit the app states the limit it actually enforces.

v0.28.0 — 2026-08-05

Being turned away from a session now tells you why. If you tried to join with a wrong or out-of-date link, or the host declined your knock, roughly one attempt in five said only "could not connect" — the same thing it says when the network is down. The reason was being sent and then thrown away as the connection closed. You now get the real answer every time: that the link or password is wrong, or that the host said no.

When a session changes hands, you are told what you are really waiting for. After the host leaves and someone else takes over, everyone has to ask the new host to let them in — the new host has approved nobody yet. The status pill called that "Reconnecting…", as though the network had dropped, and kept saying so for as long as the new host took to answer. It now reads Waiting to be let in….

Exported DOT keeps its Purdue bands when you render it with Graphviz. If you took a .dot export to dot itself, any device drawn level with another inside a band — an HA pair, most often — was quietly removed from that band, and a band left empty was dropped from the picture altogether. Opening the file back in Drawbridge was never affected, so the exports looked fine until you rendered one. They now render with every band intact.

A long diagram name no longer gets a letter sliced in half. In a narrow window the title field cut its text off mid-letter, which looked like the app had drawn it wrong. It now ends in an ellipsis, and the name itself was never affected — click into the field and it is all still there.

The toolbar gives up the Drawbridge wordmark before it hides a button. In a narrower window the name beside the logo now shrinks to just the mark, and that recovered space goes to your diagram's name and to the controls. Tools only start moving into the ⋯ menu once even that is not enough.

The icon palette now hands you each shape's DOT name. If you write diagrams as code, the palette is the picture book for the kind= vocabulary — but you still had to go and look the words up. Hover any shape and its kind= name is in the tooltip, with a small copy button in the tile's corner that puts the bare id on your clipboard. It appears only when you hover or tab to it, so nothing about the palette got busier. The search box takes those ids too, hyphen and all — typing l3- finds L3 switch — so you can go the other way as well, from an id you have read in a file back to the picture it draws.

Considerations before you update: none.

v0.27.1 — 2026-08-05

A view-only guest stays view-only when the host leaves. When you stopped sharing and someone else picked up hosting, anyone you had invited with a read-only link came back able to edit — silently, with nothing on screen to say so. Read-only invites now survive a change of host as read-only.

Removing someone from a session means it. If you removed a guest and then pressed Regenerate link, a guest holding your personal invite link could rejoin without knocking — no prompt, no decision from you. They now have to ask again like anyone else.

A locked layer really is locked now. Dragging a selection box across a locked layer used to skip the devices but still pick up the cables between them — and pressing Delete then removed those cables, which is the one thing locking a layer is meant to prevent. Hidden layers had the same gap: a selection box could pick up devices you could not see, with no highlight to show it, and the next drag moved them. Neither happens any more.

Two ways a file could refuse to open, both closed. Device names pasted from a coloured terminal capture carry invisible control characters; they used to be written into the saved .drawio as-is, which made the file unopenable — it saved without complaint and then failed to load, including the crash-recovery copy. And a single odd character code anywhere in a file you were opening could fail the whole document rather than the one page it was on. Both files open now, and nothing else about them changes.

Visio exports and cable speeds keep what you gave them. Export Visio dropped your speed colours and bundle rings, where Save As kept them — the same document exported two ways gave two different results. And a speed written with a semicolon or an equals sign (10G;LR) was quietly renamed on save, so it stopped matching the colour you had assigned to it.

Smaller download. The desktop app ships about 15 MB less per platform — it was carrying a second copy of code already inside it.

Smaller things you may have noticed. Pasting near the left edge of the canvas no longer jumps the view; pressing Escape while drawing a connector from a device's centre now clears the preview instead of leaving it on screen; toggling a callout's bubble repaints straight away; the watermark resizes as soon as you hide a layer rather than on your next edit; and double-clicking a connector label works on files whose connector ids came from another tool.

Considerations before you update: none. Two notes if you use sharing: a view-only guest connected while you handed a session over could edit from that moment on, and a guest you removed could have rejoined after a link regeneration. Neither affects the drawing itself — and both are fixed here.

v0.27.0 — 2026-08-04

Mark a drawing before it leaves the building. Document info… → Branding adds a watermark across the sheet, a classification printed as a strip above and below the drawing, and your company logo behind the diagram. DRAFT, CONFIDENTIAL, INTERNAL, FOR REVIEW and SUPERSEDED are one click each, and the field takes anything you want to type.

Setting a classification fills the watermark too, so marking a sheet CONFIDENTIAL is one choice rather than two — type something different in Watermark and you get both, which is how you stamp DRAFT across a CONFIDENTIAL sheet.

It sits behind the drawing and its strength is capped, on purpose: a watermark that hides a device name has made the drawing worse to protect it. It appears on every page, in everything you export, and in what you print — a mark that only existed on screen would be decoration rather than a control.

Branding belongs to the document, not to shapes on the page. You cannot select it, drag it or delete it by accident, it never turns up in the object list or the cable schedule, and switching it off leaves nothing behind. Tick the remember box and your logo, organization, name and classification carry over to your next drawing.

A multi-page drawing numbers its sheets. The title block gains a SHEET cell — 2 of 3 — on any document with more than one page. It reads its numbers off the page list rather than anything typed, so it cannot disagree with reality, and it stays out of the way on a single-page drawing.

Saved revisions got much smaller. A revision is a snapshot of the whole document, so a drawing carrying a logo used to store that logo again in every one — twenty revisions of a lightly-drawn diagram could be well over a megabyte of history. Pictures are now kept once per file however many revisions reference them. Existing files keep working and shrink the next time you save a revision.

Considerations before you update: none.

v0.26.0 — 2026-08-04

A drawing can say who made it. Blocks → Title adds the bordered title block an engineering drawing carries in its corner: your logo, the drawing's title, the date, the file name, who drew it, and the revision. It is off unless you ask for it — no new document, template or opened file grows one on its own. Double-click a cell to fill it in.

What you type is stored on the document, not on the cell, which is why a multi-page drawing shows the same author on every page and correcting it once corrects them all. Document info… in the app menu fills in every field at once and is where you choose the logo; tick the box there to remember your name, organization and logo for the next drawing. The FILENAME cell follows the file you save as — including the moment you Save As, so what lands on disk already says the right thing.

The block moves as one: click any cell and drag, and the whole thing comes. Select it and drag a column divider to change a column's width — the neighbour gives up what you took, so the grid stays a grid, and the widths you set survive every later refresh. When a page carries a title block, a PDF export drops its own small footer band, so a printed sheet has one title block rather than two.

Save a revision of a drawing, and load it back later. Revisions in the toolbar snapshots the whole document and lists what you have saved. Each row restores, compares or deletes, and carries an identity of its own — a number that never repeats and a stamp to the minute — plus whatever note you typed as you saved it.

The history lives inside the .drawio file, so you send somebody the drawing and its history goes with it: no sidecar file to lose. Restore replaces every page, asks first, and is undoable. Compare shows what changed between that revision and the drawing as it stands now, ringed on the canvas — with no file to go and find, because the revision is the baseline. The dialog shows what the history costs the file, so you can prune it before it matters.

One place for the generated blocks. The legend, the optics block and the title block are the same kind of object, so they now share one Blocks menu in the toolbar instead of one being in the bar and two buried in the app menu. Selecting any of them shows a small card naming it, rather than property rows that the block's next refresh would have thrown away.

Considerations before you update: "Compare with…" has been removed. The comparison it offered — pick a second .drawio and diff against it — is now done against a saved revision of the drawing you already have open, which is what people reached for it to do. If you relied on comparing two arbitrary files, that is gone.

Templates has moved from the toolbar into the app menu. The gallery still appears by itself on an empty canvas and after New, which is where starting from a template was already offered.

Saved revisions ride inside the .drawio. Opening such a file in draw.io works normally, but saving it there drops the history, because draw.io rewrites the file from its own model. Visio (.vsdx) files and picture exports carry only the current drawing — the app says so when it happens.

v0.25.0 — 2026-08-04

Drag a connector's label wherever it needs to be. Two cables crossing at a shallow angle used to put both their captions in the same place, and the Start/Middle/End and Above/On/Below buttons could not part them. Now you can grab a caption and move it freely — along its cable, and as far off it as you like. It is still anchored to the cable, not to the page: move a device and the caption travels with the line instead of being left behind. Crossing the line while you drag flips it to the other side, dropping it on the line puts it on the line with the cable knocked out behind the text, and the inspector's buttons keep showing where it ended up. Drop it back roughly where it started and it snaps to the standard placement, so a label you have nudged and put back is exactly a label nobody ever touched.

A cable drawn from a device's centre can be re-pointed. Its end handle sat underneath the device's own icon, where a press means "move the device" — so dragging it moved the device instead of the cable, and the end could not be grabbed at all. The handle now sits on the cable just outside the tile. Moving a device, and starting a new connector from its centre, work exactly as before.

Name an aggregate by double-clicking its ring. The oval a bound aggregate draws around its cables now edits its own caption — the port-channel's name (Po1, ae0) — instead of quietly editing the cable underneath it. Aim at the oval's line: its inside still belongs to the cables it encircles.

Windows and Linux are told the right key. Every shortcut hint in the app — the toolbar tooltips, Group and Ungroup, and the unsaved-changes dialog — was written in Mac notation, so a Windows user was told to press ⌘Z. They now read Ctrl+Z, Ctrl+Shift+S and so on, and the zoom hints read Ctrl + rather than Ctrl++. Nothing about the keys themselves changed: they always accepted both.

The export Theme dropdown is readable on Windows. Opening it in dark mode showed white text on a white list — every option invisible except the one under the pointer.

Shapes tell you when they are evenly spaced. Drag a shape towards the end of a row and it snaps to the gap that row already uses, with a small capped bar drawn over each of the two gaps to say they match. It works between two shapes as well — dropping one into a space centres it — and down a column exactly as it does along a row. Dashed lines still mean "these edges line up"; the capped bars mean "these spaces are the same", so the two are never mistaken for each other. Align → Distribute is unchanged for spacing a whole selection.

Small shapes keep their names, and country maps have more room. Shrink a device towards its smallest — which is what you do to fit several sites onto a country map — and its caption now moves below the tile instead of being cut off inside it. Country maps are also drawn about 15% larger, and the smallest ones (a compact country) noticeably larger than that. Together, a UK map that previously had space for two or three sites comfortably holds a dozen. Pressing Inside in Label position still puts a caption inside, however small the shape.

Considerations before you update: none. Existing maps keep the size they already have — only a change of extent reframes one.

v0.24.1 — 2026-08-02

The manual now says where a share link works. An install link carries the address it was copied at, so one shared from a copy of Drawbridge running on your own machine will not open on anybody else's phone — on their phone, localhost means their phone. The Connectors chapter says so, along with what to do instead: share from the website, or from an instance the other person can actually reach, which inside a company network may mean being on the VPN. It also states plainly that the engineer's ticks stay on their device and do not come back to you.

Considerations before you update: none.

v0.24.0 — 2026-08-02

Drawbridge counts your optics. Tell a cable what it is — RJ45, DAC, AOC, multimode, single-mode, ER, BiDi, CWDM or DWDM — and the speed you already set names the part: a 25G multimode link is an SFP28 25G SR, one module at each end; a DAC is one cable assembly and no modules at all. For the optical types a Wavelength field appears, with the CWDM grid and the DWDM C-band offered as presets, and the wavelength is part of the part — eight DWDM links on eight channels come out as eight order lines, not one line of sixteen. Optics block on page drops the tally onto the drawing and keeps it current as you draw; Optics report gives the whole document's totals and a per-device breakdown; Optics CSV is the same thing as a file. Nothing is ever guessed: a cable with no type set is counted into an "Unspecified" row rather than assumed to be short-reach, so the block doubles as the list of what is still to fill in.

A cable schedule you can carry into the aisle. Cable schedule in the app menu turns the document into one row per cable — a kopplingsschema — grouped by device, with ports sorted the way you read them (et1/2 before et1/10). Tick each cable as you run it: the tick lives in the document, so it survives a reload, syncs to whoever you are collaborating with, and undoes like any other edit. Progress shows as a figure and a bar, with a smaller bar per device so you can see which rack is outstanding. Print puts the same schedule on A4 with real tick boxes for a pen. The panel is laid out for a phone held in one hand, because that is where it gets used.

Send the checklist to whoever is patching. Share copies a link that carries the schedule itself — no account, no server, nothing uploaded. Whoever opens it gets the checklist and nothing else. Two things to know before you send one: their ticks stay on their device and do not come back to you (there is no server for them to come back through), and the link points at whatever copy of Drawbridge you shared it from — so share from the website, or from an instance the other person can actually reach, rather than from a copy running on your own machine.

Two more CSVs, one of them shaped for NetBox. Cable schedule CSV is the readable one; NetBox cables CSV uses NetBox's own cable bulk-import columns, with cables you have ticked importing as connected and the rest as planned. Cable types map where NetBox has an exact member and are deliberately left blank where it does not — it cannot say which of cat5e/cat6/cat6a an RJ45 run is, and a guessed value in a source of truth is worse than a blank one you fill in. The readable CSV imports back into Drawbridge, so the format round-trips.

The command line grew four export formats. --export now writes .dot, .csv (the cable schedule) and .netbox.csv alongside .svg, .png and .drawio, picked by the file name you give it.

Considerations before you update: cable type, wavelength and the installed tick are new per-cable fields. They round-trip through .drawio, .vsdx, DOT and collaboration — but a file saved by an OLDER Drawbridge, or re-saved in one, will not carry them. If you are sharing files with someone still on 0.23, expect those three to be dropped on the way back.

v0.23.0 — 2026-08-01

A DOT round trip brings your drawing back exactly. Export → Graphviz DOT now carries the layout, not just the topology: every device writes its position and size in Graphviz's own pos=/width=/height= spelling, and importing the file puts every tile back exactly where it was — same spacing, same sizes, same arrangement. The file stays ordinary Graphviz (dot -Tpng still renders it, and plain neato now renders it with your geometry). Hand-written or AI-generated DOT without positions still lays itself out, as before.

An HA pair survives the trip as a pair. Two identical cables between the same two devices — an HA pair, a LAG — used to come back as one, taking the aggregate ring with them. Every exported cable now carries its own id=, the import tells them apart by it, and a genuinely duplicated line is reported in the preview instead of vanishing silently.

Zones come back as zones — and so does everything else. A zone, rack or virtual context now travels through DOT as a real box: its name, kind, subnet and exact rectangle, with everything that stood on it still inside on the way back. Free text and callouts (styling, leader line and all), pasted images, rack-mounted units, device groups, named layers, ring captions, the document's custom speed colours and even the page title all round-trip too. Hand-written files win as well: give a cluster a kind=zone and the import draws a real zone around its members. Hidden layers still never leave the app — that promise stands.

How each cable is drawn survives too. Straight and arced connectors, custom waypoints, a device's label placement and the fine-tuned positions of connector and port labels all round-trip through DOT now — and label placements also survive copy/paste inside the editor, which they quietly did not before.

Considerations before you update: none.

v0.22.0 — 2026-08-01

Your drawing can leave as text now. Export → Graphviz DOT saves the page as a .dot file and Export → Copy DOT puts the same text on the clipboard — the way back out of Diagrams-from-code. It is written in the same form the DOT import reads, so a diagram can live in a git repository, be reviewed as a diff, be edited or generated further by a script and come back in as a drawing; it is also plain Graphviz, so dot -Tpng page.dot renders it anywhere. Devices keep their kind, colour and asset data, links keep their ports, caption, speed, type and aggregate, zones and racks come out as boxes, Purdue levels come out as levels, and devices drawn level with each other stay level. Like Copy Mermaid it carries the topology, not the exact positions.

The format painter says when there is nothing to paint. Painting a look onto something that already has it moved nothing and said nothing, which reads exactly like a broken button (thank you to whoever reported it). Now it tells you the target already looks like that — in the inspector and in the Connections tab's per-card Paint alike.

Two fixes to the DOT import, found by building the export. A device name written across two lines (label="SW-CORE-01\nfloor 2" — how every DOT file spells a line break) arrived as one line with a visible \n in it; it now arrives as two lines. And a cable can now join several aggregates from one file — bundle="po1 spine_a" — which the editor has been able to draw since rings became a list, but the importer could only ever read one of.

Considerations before you update: none.

v0.21.0 — 2026-07-30

A map's layer now belongs to the map. Deleting a map takes its layer with it — no more leftover "Map: Sweden" rows in the Layers menu — and deleting the layer from the menu deletes the map, the same one thing from either side. Map layers no longer accept other shapes: Move here is off for them, and new shapes placed after a map land on your drawing layer instead of riding the map's, so hiding a map now only ever hides the map. Cut-and-paste a map and it arrives back on its own bottom layer, named after it.

Considerations before you update: none.

v0.20.0 — 2026-07-30

The manual's Diagrams-from-code page grew into a chapter. Five pages — the overview, an in-depth format guide, a cookbook of ten paste-ready examples, a dedicated "Code in, image out" page for the scripted import-and-export pipeline, and the generated every-value reference — where every shape kind now shows its icon thumbnail beside its kind= code, and the automation page carries ready-to-use GitHub Actions recipes. The website's /docs/ already carries it; this release brings the same chapter into the app's built-in manual.

The CLI can pin its theme. --theme light|dark on a --import/ --export run renders in that theme regardless of the operating system's appearance — scripted pipelines get identical images on every machine. The manual's own example images are rendered this way, by the app itself.

A DOT import can draw the Purdue model. Declare levels as clusters — subgraph cluster_l3 { purdue="3" … } — and the import places the Purdue backdrop behind the topology, sizes it so every band fits, and seats each level's devices inside their band. The whole ICS reference architecture, from one paste; the manual's DOT examples page shows it end to end.

Considerations before you update: none.

v0.19.0 — 2026-07-30

Paste your FortiGate's switch topology and get a diagram. Run execute switch-controller get-physical-conn dot <fortilink-interface> on a FortiGate, paste the whole output — CLI chrome and all — into Import, and it becomes a tiered, cleanly routed drawing: FortiGate on top, switches on their tiers, MCLAG peer pairs side by side with their ISL between them. Serials land in the inspector's asset fields, and the model is read off the serial where it can be.

Import any Graphviz DOT — including one an AI wrote for you. digraph { fw1 -> sw1 } is now a valid paste. A small attribute profile steers the result from code: kind= picks any palette shape (the manual lists all 87), label=, mgmtIp=/serial=/model=/location=/notes=, speed=, link= for the connector style, bundle= to draw an aggregate ring, fw1:s -> sw1:n or fromdir=/todir= for attachment sides, and hex color= for accents. It is all ordinary DOT, so the same file still renders in any Graphviz tool. The new manual page Diagrams from code documents the whole loop and includes a prompt you can hand any AI.

Share a diagram as a link that carries the diagram. A URL of the form …/app/#import=pako:… opens the app with the Import box pre-filled — the payload travels in the URL fragment, which browsers never send to any server, so nothing about your network ever leaves the machines at either end. Nothing is inserted until Import is clicked. scripts/make-import-link.mjs (or the one-liners in the manual) turns a file or piped CLI output into such a link.

Script the whole thing on the desktop. Drawbridge --import topo.gv --export topo.svg (also .png and .drawio) imports, lays out, routes and exports with no window and no clicks — pipe a FortiGate dump straight through: ssh fgt '…get-physical-conn dot fortilink' | Drawbridge --import - --export topo.png. Without --export the app opens normally with the Import box pre-filled.

Considerations before you update: none — existing diagrams, files and workflows are untouched; everything here is new input paths.

v0.18.0 — 2026-07-30

A country you add is now just the country. Picking a country from Add country… used to land it inside a rounded, faintly tinted card — a beta tester put it best: "if you're adding just a country, it shouldn't be rounded". It now lands as a clean silhouette with its name underneath, and two new checkboxes in the inspector — Show border and Show background — let you bring either half of the frame back on any map, including the world and region backdrops, which keep their frame by default. Your choice is saved with the file and survives a round-trip through draw.io.

The country pickers are alphabetical. Both the palette's Add country… list and the inspector's Map extent field now sort each group A→Z, so a country is where you expect it instead of where the dataset happened to put it. The regions keep their place at the top.

Map layers say what they are. The layer a map creates is now named "Map: Australia" rather than just "Australia", so the Layers list reads at a glance. Existing files keep their layer names until you change that map's extent, at which point the name gains the prefix; a layer you renamed yourself is never touched.

Considerations before you update: none — existing diagrams render exactly as before; the new defaults apply only to countries you add from now on.

v0.17.0 — 2026-07-29

You can now tell a router from an L3 switch at a glance. The three devices you draw most often — router, L3 switch and plain switch — are drawn to one rule, so a topology reads without reading the labels. The shape says what the device is and the number of arrows says how far it forwards: a circle with four arrows routes between networks, a rounded square with eight both switches and routes, and the wide chassis with two forwards inside one network. Every arrow is identical across the three, so the only things your eye compares are the outline and the count. The L3 switch in particular used to be the plain switch with a decoration on it, which is exactly how it read; it is now its own device, and it survives being zoomed out on.

Considerations before you update: the router and switch icons change too — they had to, or the set would not read as a set. Diagrams you have already saved are untouched as files, but they will look different when you open them, and any PNG or PDF you exported earlier will not match a fresh export. Nothing needs redrawing and no shape changed size or connection points.

v0.16.1 — 2026-07-29

Moving a ring no longer deletes its name. Dragging an aggregate ring along its cables — or recolouring it — wiped the Ring label you had given it, and not just from the drawing: the name was gone from the file. Naming, moving and recolouring a ring are independent again, and duplicating an aggregate now carries its name to the copy.

Considerations before you update: a name lost this way in 0.16.0 is not recoverable — it was never written. Type it back once on this version and it stays.

v0.16.0 — 2026-07-29

A cable can be in more than one aggregate ring. A cable has two ends, and each end can be part of its own port-channel: the four uplinks leaving a leaf switch are one aggregate there, while the two arriving at each spine are an aggregate at that spine. Drawbridge could only ever hold one of those two facts. Now it holds both — select the four cables and press Bind as aggregate for the leaf's ring, then the two cables to one spine and press it again, then the other two. Three rings over four cables, which is what the switches themselves think is going on.

Rings that would land on top of each other now separate on their own: a second ring over the same cables goes to the other end of the run, and a ring you have dragged into place is never moved by a later bind. Because binding now adds a ring rather than replacing one, the button stays available on cables that are already bound, and renames itself to Add another ring when what you have selected is exactly one existing ring.

Rings can be named. Each aggregate card in the Connections tab has a Ring label field — Po1, ae0 — above the cable label, because they are different facts: the ring's name is the port-channel, a cable's label is the circuit it carries. The caption is placed the same three ways a connector's label is, measured against the ring: Along its sweep, which Side of the cables it sits on, and Follow the ring to turn it to the ring's angle.

The Connections tab stopped repeating itself. A selected connector is one card instead of two — the two endpoint cards carried the same label, type, speed and buttons and differed only in which port field came first. An aggregate is one card too, with the shared fields shown once and one row of port names per member, so an eight-member LAG is one card rather than eight. A fan-out that reaches two devices lists its members under a heading per device. The arrow at the top of a card now points at where the other device is on the page — → for one beside it, ↓ for one below — instead of saying which end the cable happened to be drawn from, and the port fields are captioned with the device whose ports they are.

Fixes. The Connections panel refreshes as soon as you use one of its pickers (Type, Speed and Ring all silently left the card showing its old values until you clicked elsewhere). The inspector no longer hangs off the bottom of a short window with its Arrange row out of reach.

Considerations before you update: none. Files written by earlier versions open unchanged, and a diagram saved with these new multi-ring aggregates is still an ordinary .drawio file.

v0.15.0 — 2026-07-29

The format painter now carries size. Copy a device you have made bigger and Paint makes the next one the same size — grown in place, not moved. Size only ever moves between like things: a device's size onto a device, a zone's onto a zone — so painting a firewall's look across a zone recolours it without collapsing it to tile size, and rack-mounted hardware keeps its slot geometry. Text and callout blocks carry their font size the same way. Painting a connector's label placement now actually lands too — it was copied and counted, but never written. And a paint finally shows up in the bug report's "What I did" trail as what it was: "painted a style onto 2 shape(s)", for connectors and shapes alike.

Delete a cable from the Connections tab. Every connection card now has Delete beside Copy and Paint, so unwiring a device no longer means finding the cable on the canvas first. It is the same delete as selecting the connector and pressing the key: one undo brings it back, card and all.

Cables in 3D plug in where the box meets the ground. Isometric view used to attach every cable at a device's top plate while the cable itself visibly ran along the floor. Cables now lie on the ground plane and meet each box at the base of its near side — and they pass behind boxes rather than over them, on screen and in exports alike. A cable into a rack still climbs the cabinet face to its unit, which is the one place a cable belongs off the floor.

The LAG badge now draws what it means. The badge on a LAG link is two strands bound in a small ring — the aggregate ring in miniature — so "one line standing for a bundle" and a true bound aggregate read as the same idea at two scales.

Maps and layers act like one thing. Renaming a map renames its layer — in the same undo step, and never over a name you typed yourself. Every country map now lands on its own layer, so two maps can be shown and hidden independently. And the inspector's new Layer row says which layer the selection is on ("Mixed layers" across several); click it to open the Layers panel.

Downloads are counted now — as numbers only. The download server counts how many times each release file is fetched, and how many distinct addresses fetched that day. What is stored is plain integers: no addresses, no user agents, no identifiers, nothing that links one day to the next — and browsing the rest of the site is not logged at all. The privacy page says exactly this, in the same release that turns it on.

Considerations before you update: isometric drawings render differently — cables lie on the ground and pass behind devices instead of floating at lid height, so screenshots and SVG/PNG exports of 3D views will not match ones made with earlier versions. Your files themselves are untouched.

v0.14.0 — 2026-07-28

Copy a page as a Mermaid diagram for your markdown. Export → Copy Mermaid puts the page on the clipboard as a fenced ```mermaid block — paste it into a README, a wiki page or an article and GitHub or GitLab draw it in place. It carries the topology, not the picture: every device with its label, zones and racks as titled boxes holding what stands on them, and every link with its caption, port names and speed — dashed link types come out dotted, heavy ones thick. Mermaid arranges the graph itself, so positions are its choice, and the snippet carries no colours on purpose: it takes the theme of wherever you paste it. When you want the diagram exactly as drawn, SVG and PNG are unchanged — this is for when the article should own the drawing.

Considerations before you update: none.

v0.13.0 — 2026-07-28

A Visio file drawn somewhere else now opens looking like the drawing. Opening a .vsdx that came out of another tool used to arrive as a page of empty boxes: devices drawn as pictures lost their pictures, most of the links were missing entirely, every little port1 and subnet caption turned into a boxed device of its own, and a stack of stray empty shapes piled up in a corner. All four causes are fixed. Devices drawn as pictures keep their pictures. Links are found even when they live grouped together with their caption — the caption becomes the link's label — or were never actually glued in Visio: a line whose end touches a device now connects to it, the way it reads on paper. A link keeps its colour, so a green/red/blue colour-coded drawing stays colour-coded. And plain text arrives as text, at its size and alignment, not as a device.

Saving back to Visio keeps the pictures too. A device that is a picture — one you pasted in, or one that came from an imported Visio file — is now written into the .vsdx as a real Visio picture shape. Open, edit, save, reopen: the drawing still looks like the drawing, here and in Visio.

Considerations before you update: none.

v0.12.1 — 2026-07-28

An attached log now arrives whole, and stops burying your report. Attaching a log or a copy of your XML used to cut it off after about 30,000 characters — and the cut always seemed to land just before the interesting part. Each attached file is now filed as its own entry underneath the report instead of being crammed into it, so it travels complete however long it is. The report itself reads like a report again rather than three sentences lost on top of a twenty-thousand-line log.

The generated part of a bug report is now shown rather than offered for editing. The diagnostics and the list of what you did are facts about the build and about what you clicked, and a version number that could have been retyped is one nobody can act on. You are still in charge of what goes: untick the diagnostics, choose fewer recent actions — or none — and remove any attachment you would rather not send. Your own description stays yours to write, now with a limit of about two pages, since anything longer is really a log and belongs in an attachment.

Cables in the 3D view reach the boxes they connect. Turning on the isometric view used to leave every cable looking slightly unplugged: the last stretch of it disappeared into the chassis it was joined to and reappeared somewhere near the box's front corner, and two cables between the same pair of devices came out of two different places. The cables are drawn in front of the chassis now, so each one runs unbroken from the edge of one device to the edge of the other, at every camera angle — and an isometric export matches what you see on screen.

The format painter carries a label's alignment, and speaks up when it cannot paint. Copying the look of one device onto another moved its colour and its label position but quietly left the label's alignment behind. It now takes all three. And because a connector's look and a device's look are made of different things, one cannot be painted onto the other — pressing Paint in that case used to do nothing at all, with no explanation. It now tells you which kind it is waiting for.

Considerations before you update: none.

v0.12.0 — 2026-07-28

Screenshots you attach to a bug report now actually reach us. Reporting a bug could already save a drawbridge-bug-report.zip with your pictures in it — but the feedback form had nowhere to put that file, so it sat in your downloads doing nothing. The form now has a file field: paste your report, attach the .zip, and the screenshots arrive with it. The form tells you the size limit before you pick anything, tells you what it took, and tells you afterwards whether the file went through — it no longer stays quiet about it either way.

Two smaller things came with it. The report dialog now shows how much of the attachment budget (five files, 4 MB) you have used, instead of announcing the limit by refusing a file. And a .zip is only saved when something actually has to travel in it — a log or an XML file goes inside the report itself, so reporting one no longer puts a file in your downloads that nothing needs.

Two more things a QA pass over the whole flow turned up. Reporting a bug and then reporting a second one used to open the dialog still holding the first report — including the screenshot of your diagram, ready to be sent again by mistake; it now opens empty after a report has gone, while still keeping your words if you merely close it mid-sentence. And on the feedback form, picking a file that is too large used to be a trap: it refused to send anything, in grey text that did not look like a refusal, with no way to un-pick the file short of reloading the page and typing your report again. There is now a Remove next to the file, and the refusal says so and looks like one.

Considerations before you update: none.

v0.11.0 — 2026-07-28

You can now decide where a connector's labels sit. Select a cable and the inspector has a Label placement section: put its caption at the start, middle or end of the run, above the line, on it, or below — and turn on Follow the connector to have it rotate to the cable's own angle instead of staying horizontal. Text is never drawn upside down. The port names at each end get the same controls, and each end is set on its own, because ge-0/0/1 leaving a switch at the top of the page and wan1 arriving at a firewall at the bottom rarely want the same treatment. One thing improves whether you touch the controls or not: a caption on a vertical cable now sits beside its line instead of being drawn across it.

A new Connections tab tells you what a device is wired to, and lets you edit it there. Select a device and the inspector's second tab lists every cable touching it — which device it goes to, its label, the port name at each end, its type and its speed — all editable without hunting down each cable on the canvas first. Hovering a row highlights that cable so you can tell which of eight links is which, each row has its own Copy/Paint, and the tab carries the count so you can see how many connections something has without opening it.

And a new Objects view lists everything in the file. ≡ menu → Objects shows every shape in the document, grouped by page, with its icon, its type, what it connects to and which layer it is on. The search box matches what a thing is connected to as well as its own name, so typing a device's name finds everything attached to it. Tick rows and press Select on canvas to select them and jump there.

Layers can be locked without being hidden. The padlock in the Layers panel stops a layer's shapes being clicked, dragged, resized or deleted while leaving them fully visible — for the backdrop you need to see and keep bumping into. Hiding a layer now also removes it from the minimap, which had been showing the whole document regardless.

Maps: countries are objects now. The palette has an Add country… picker that drops a single country on the page, drawn on its own, sized to its own shape. Add as many as you like — each lands beside the last — and arrange them however you need, without a world or EMEA map underneath. Every country the map can draw is now in the picker, up from about two thirds of them. The world map backdrop also goes on a layer beneath every other layer, which it always claimed to do and did not in the saved file.

Fixed: a graceful host exit sometimes ended everyone's session instead of handing it on. When the host of a collaboration session closed their window, the message nominating the next host could be discarded before it left the machine — about one time in four — so the session ended for everyone rather than migrating. Desktop app only.

Considerations before you update: none. Existing diagrams open unchanged and nothing is renamed. The one visible difference in a file you already have is the connector caption on a vertical cable, which moves from across its line to beside it.

v0.10.0 — 2026-07-27

Drawbridge now has a Docker image for ARM servers. If you host things on a Raspberry Pi, an Ampere box or an AWS Graviton instance, the container download would not start for you — the only image published was the Intel/AMD one, and loading it on an ARM machine gets you an image that machine cannot run. Every release from now on offers both: pick drawbridge-<version>-image-arm64.tar.gz on the download page instead. Nothing about the app differs between the two.

The instructions on that page were rewritten to match. They now start by telling you how to find out which image you need (uname -m), give each architecture its own complete set of commands to copy rather than one set to edit, and say what address to open on a headless machine like a Pi — which is not localhost, and matters more than it sounds, because your diagrams are saved by your browser against the exact address you used. 32-bit ARM is not supported: there is no linux/arm/v7 image and none is planned. A Raspberry Pi 3, 4, 5 or Zero 2 W is 64-bit hardware, so if it reports armv7l it is only the installed OS that is 32-bit — reflash with the 64-bit Raspberry Pi OS and the arm64 image runs.

Considerations before you update: none. This is a new download, not a change to anything you already run — and the desktop apps are untouched. If you are already running the container on an Intel or AMD server, its file is now named drawbridge-<version>-image-amd64.tar.gz rather than drawbridge-<version>-image.tar.gz; the image inside, and the tag it loads as, are the same as before.

v0.9.1 — 2026-07-27

Drawbridge now starts on Windows. On a Windows PC that has never had Microsoft's Visual C++ runtime installed — which is most of them, unless some other program has already put it there — v0.9.0 did not open at all. Both the installer and the portable download failed the same way: a grey box saying "A JavaScript error occurred in the main process — Cannot find native binding", and nothing else. There was no workaround from inside the app, because the app never got far enough to have one.

The part Drawbridge uses for live collaboration needs one Microsoft system file (VCRUNTIME140.dll) that Windows does not always include. It is now bundled with the app, so there is nothing to install and nothing to do differently. The portable download matters here as much as the installer: it deliberately installs nothing, so shipping the file inside the app is the only fix that works for both.

If you hit this, you may have installed Microsoft's "Visual C++ Redistributable" to get past it. You can keep it — it does no harm and other software may want it — or remove it; Drawbridge no longer cares either way.

Considerations before you update: none. This release changes nothing you can see in the app, and nothing about your diagrams or settings. macOS, Linux and Docker are unaffected — they were never impacted, and their downloads are unchanged apart from the version number.

v0.9.0 — 2026-07-27

Connectors can work out their own link type. Draw a cable from a laptop to a Wi-Fi AP and it comes out as a wireless link. Draw one from a firewall to the internet and it comes out as WAN. No extra clicks, and it does not matter which end you started the drag from.

It also remembers what you chose last. Set a switch-to-switch cable to Trunk at 100G by hand, and the next cable you draw between two switches arrives Trunk at 100G — so a fabric is drawn once and repeated for free. It remembers the link type, speed, colour and connector type for each pair of device kinds.

It refuses to guess anything else, deliberately. Two switches stay a plain line. A trunk is a VLAN fact, a LAG an aggregation fact, IPsec an encryption fact — none of those follow from two icons, and a badge claiming a tunnel that is not there is worse than a plain line. Only the medium is inferred, because that is the part the picture actually tells you.

It only ever applies as a connector is created — never to one that already exists, and never to a file you open or import. What it learns is stored in your browser, not in the drawing, so files you share carry no trace of your conventions. The switch is Auto link detection in the app menu, with Forget learned link styles beside it.

A shaped cable no longer deforms when you move it. If you gave a connector custom waypoints and then moved both the devices it joins, the waypoints stayed behind and the cable bent out of shape. It now travels whole. Moving one device on its own still leaves the shape where you put it, which is what makes a hand-drawn detour stay put.

Racks accept a device dropped in the middle. Dragging a device into a rack by grabbing its centre drew a cable to the cabinet instead of mounting it, and a device already mounted in a rack could not be moved to a different U at all unless you grabbed it off-centre. Both work now.

Follow someone's view. In a shared session, press Follow next to a name in the People list and your canvas matches theirs — their panning and zooming moves your view, and if they switch page you go with them. Any pan or zoom of your own stops it, so there is nothing to remember to turn off. The toolbar pill says who you are following the whole time.

View-only invite links. Alongside the normal invite there is now a View-only link. Whoever follows it sees the diagram and every live edit, has a cursor and a name like anyone else, and cannot change a thing. It is enforced on the host's machine, not the guest's, so their edits never reach anyone — including the other people in the session. Regenerate link revokes it along with the editing link.

Guests always wait for you to let them in. Approving each person used to be a switch you could turn off. It is gone, and approval is now always on. Turning it off was the moment the risk was taken: invite links are reusable and people keep them, so from then on anyone still holding one — including from a link shared months ago — walked in and could edit with no prompt.

Closing the window no longer ends the session for everyone. When a host leaves, the person who has been connected longest becomes the new host and everyone else reconnects to them automatically. Nothing is lost and nothing is transferred: every participant already holds the whole diagram. A view-only guest is never made host.

Self-hosting the relay. If a session cannot connect directly it falls back to a relay. You can now point Drawbridge at your own instead of the public ones — see docs/collab/self-hosted-relay.md. Most people do not need this; the status pill tells you when a session is actually being relayed.

Considerations before you update: auto link detection is on out of the box. If you would rather draw every link type by hand, turn it off in the app menu before you start — and note that every cable it styles is one undo away regardless. If you host sessions and relied on turning off "Approve each person before they join", that switch no longer exists — every guest now waits in the lobby.

v0.8.10 — 2026-07-27

The update panel in About behaves properly now. Three things:

Its Download update button was drawn as a bare line of blue text beside two proper buttons, so the one thing we most want you to press was the least prominent thing in the panel and nothing on the row lined up. It is a button now, filled, and the three actions share a row.

If a check found a newer release than the one the panel was already showing, the dialog ended up claiming two different versions at once — the panel naming the old one, the line below naming the new one — until you restarted the app. The panel now follows whatever the app has actually found, the moment it finds it.

And the second Download button is gone. The panel carries the action; the line beside "Check for updates" just tells you what the check found.

Considerations before you update: none.

v0.8.9 — 2026-07-27

Checking for updates yourself now counts. On the desktop app, pressing Check for updates and being told a newer version exists used to give you a line of text and a Download button — and nothing else. The shield stayed dark, and closing About lost the finding entirely. Now a check you ran yourself leaves exactly the same trace as the one that runs at launch: the shield lights amber and stays lit after you close the dialog and after you restart, so you can look, get on with your work, and come back to it. A check that comes back Up to date puts the marker out again.

That last part also fixes something you would have met on your next upgrade: the app remembered a waiting update but never forgot it once you installed it, so a freshly updated Drawbridge could light the shield telling you to upgrade to the version you were already running.

Considerations before you update: none.

v0.8.8 — 2026-07-27

A selected cable no longer forgets what speed it is. Selecting a connector used to repaint it in the selection colour. On a 100G link that meant the cable stopped matching its own legend entry for as long as you had it selected; on a 1G link it meant almost nothing happened at all, because the selection blue and the 1G blue are very nearly the same colour on the light theme.

Now the cable keeps its colour and gets a soft band along its length instead. Hovering shows the same band, fainter, so hovering and selecting read as one idea at two volumes. Selecting several cables bands each of them separately, so parallel runs stay countable — and every selected cable now shows a round handle at each end, where before you only got those when exactly one cable was selected.

Considerations before you update: none.

v0.8.7 — 2026-07-26

You can see when there is a new version, without being interrupted. The Drawbridge shield in the top-left now lights amber with a small dot when a newer version is waiting, and it stays lit until you do something about it. Click it and About opens with three ways out: Update now (in the browser, switching to the version already downloaded — it is already on your machine, so there is nothing to wait for), Upgrade manually if you would rather fetch the files yourself, or Skip this version, which puts the marker out for that release only — the next one lights it again.

This replaces the pop-up that used to announce an update. A pop-up is a moment: dismiss it, or miss it while you are drawing, and the app never mentions it again. Someone ran four releases behind that way. The marker cannot be lost, it survives a reload, and it says nothing at all when there is nothing waiting.

On the desktop the button reads Download update and opens the release page — Drawbridge still never installs anything by itself.

Considerations before you update: none. The marker only reflects checks the app already made — the browser asking the site it was loaded from whether a newer build exists, or the desktop update check you opted into. Nothing new is sent or fetched.

v0.8.6 — 2026-07-26

Changing a device's type can no longer make it disappear. The inspector's device-type picker was offering four things that are not devices — Virtual context, World map, Purdue levels and Bus. Picking Virtual context turned your device into an empty dashed box with no icon, and because that box lives in the background layer, the picker could not reach it to change it back; undo was the only way out. Picking Bus left a solid block of colour. The picker now lists devices only, so those four are placed from the shape palette, where they draw what they are meant to draw. Thanks to Tim for reporting both.

Bug reports say what you actually did. The "what I did" trail attached to a report was padding itself with lines like "restyled 16 shape(s)" after nearly every action — the number was the size of your page, not the size of the edit, so the trail buried the one action that mattered. It now counts what actually changed, names a connector edit as a connector edit, and reports reordering, renaming a page and changing layers in those words. Long reports also get a readable issue title instead of one cut off mid-word.

Considerations before you update: none.

v0.8.5 — 2026-07-25

Port labels stop disappearing. On a device with several links, one interface label was almost always missing — and moving something made it come back while a different one vanished. Two things were going on: a label placed near its own device was drawn underneath the device, and two labels arriving at the same device from similar directions landed on the same spot, where the second one painted over the first. Interface labels are now positioned as a whole picture rather than one cable at a time: each one takes the side of its cable pointing away from its device and steps aside when something is already there, and they are drawn on top of the devices instead of behind them. Exports match the screen, as always.

New and Open ask before replacing your drawing. Clicking New used to wipe the canvas and show the template gallery, which looks exactly like losing your work (it was undoable — nothing said so). Both now ask first, and only when there is something to lose. Open says out loud that its replacement cannot be undone, because that one really cannot.

Report a bug from inside the app. The app menu has a Report a bug item. It writes the report for you: what you were doing (your last few actions, and you choose how many — or none), the version and platform, how big the diagram is, and anything the app logged this session. You can read and edit every line of it before anything goes anywhere. You can attach files, or attach a picture of the current diagram with one click. Nothing is sent by the app: the report goes to your clipboard, attachments land in your downloads as one .zip, and the feedback form opens for you to paste into.

Logs you attach now arrive with the report. A log or a .drawio file you attach is written into the report text itself, so it reaches us when you paste it into the form — the feedback form takes text, and there was no way for a file to follow it. Pictures still come along as the .zip in your downloads. The message limit on the form went up from 5,000 characters to 40,000 to make room, because a real routing log did not fit in the old one.

Callouts can have a bubble. A callout is still plain text with a leader line by default, but the inspector now has a Bubble toggle that draws an outlined box around it. It round-trips to draw.io as a real border.

Fixed on the desktop app: the Website and Support links in the app menu did nothing. They were being blocked as untrusted navigation and never opened.

Considerations before you update: none. Diagrams, files and the .drawio format are untouched; existing callouts stay borderless until you ask for a bubble, and interface labels only move to where they should always have been.

v0.8.4 — 2026-07-25

Drawbridge runs on Linux and Windows now — properly, not as a preview. Until this release the only desktop build anyone could actually download was the macOS one. The download page now carries a build for each: an AppImage for Linux (one file, mark it executable, run it), a .deb for Debian and Ubuntu, a Windows installer, and a portable Windows .exe that installs nothing. Every one of them has the full app, collaboration included.

Which one should you take? If you want your desktop to know about Drawbridge — a menu entry, and .drawio files opening in it when you double-click them — take the .deb on Linux or the installer on Windows. The AppImage and the portable .exe deliberately install nothing, which also means the OS cannot offer them for your diagram files. Each download on the page now says exactly this, along with the one command it needs.

Updates know which one you have. If you installed the .deb, "check for updates" offers you a .deb, not an AppImage — so your package manager stays in charge of the app it installed.

The Docker instructions were wrong, and are now generated. The compose snippet on the download page said image: drawbridge, but a loaded image is tagged with its version — so copying that snippet sent Docker looking on the Hub for something that was never there. The page now prints the real filename and the real tag for the current release.

Considerations before you update: none for existing users — nothing changes about your files, the .drawio format, or how anything is saved. If you are installing on Linux or Windows for the first time, note that these builds are not code-signed yet: Windows SmartScreen shows a "More info → Run anyway" prompt, and on Ubuntu 22.04 or newer an AppImage may need FUSE 2 (sudo apt install libfuse2). Both are one-time.

v0.8.3 — 2026-07-25

Double-clicking a diagram opens it. If you have installed Drawbridge as an app, .drawio and .vsdx files now open in it from Finder, Explorer or wherever you keep them — and Save goes straight back to that file, no "where should I put this?" first. The app has been offering itself in the OS "open with" list since Phase 3 and this page has said so; until now it opened to an empty canvas and left your file behind. (Chromium-based browsers only, which is where installed web apps can claim file types at all. The desktop app has always handled this.)

Reporting a bug takes one click. The About dialog has a Copy button beside the version. It puts the version and your browser/platform on the clipboard — the two things a report needs and the two things that were most annoying to transcribe by hand. It copies nothing else: not your name, not your diagram, not what you have open.

Considerations before you update: none. Nothing changes about your files, the .drawio format, or how anything is saved. If you use the installed app, the file association starts working the next time your browser picks up this version — you may need to reinstall the app for the OS to notice.

v0.8.2 — 2026-07-25

Two things you can do now that you could not before. A callout's leader — the line with the little arrow — can finally be aimed: select the callout and drag the dot at the tip wherever you want it to point. Every callout used to point down and to the right at nothing, with no way to change it. And placing a callout or a text box by clicking works: arm it in the palette, click the canvas, type. That had been broken since callouts shipped — only dragging one onto the canvas worked, though the palette has always offered both.

Two things look right in dark mode that did not. Rows in the Compare panel had no visible hover, and the little dots on a page tab were ringed in hard white. Both were reaching for colours that were never defined, so the fallback won and never changed with the theme.

Considerations before you update: none. Nothing about your files, the .drawio format or collaboration changed, and no setting moves.

The rest of this release is invisible from the outside: a codebase clean-up covering 54 tasks — dead code and stale scaffolding removed, documentation that had drifted from the code corrected (including a security page that claimed the editor makes no network requests, which stopped being true when the update check landed), and guards added so several classes of silent breakage cannot come back. Three real defects were found and fixed along the way, including a desktop start-up check that reported success no matter what it found.

v0.8.1 — 2026-07-24

The browser app now tells you when there is a new version. It always meant to — the "Update available — Reload" prompt has existed for a long time — but nothing ever went looking for a release after the page first loaded. A tab or installed app you keep open could sit several versions behind and never say so, and a hard refresh was the only way out. It now checks when you come back to the tab, when your connection returns, and hourly in a session left open. Nothing changes until you click Reload, exactly as before.

Because of that, the privacy page has been corrected. It used to say the editor makes zero network requests. That is no longer literally true, so it now says what actually happens: the app asks this site whether a newer version of itself exists. No third party, no identifier, nothing about what you have drawn — and still nothing about you or your diagrams ever leaves your machine.

v0.8.0 — 2026-07-24

You can align a label now — left, centred or right. Every caption was centred under its icon with no way to change it. There is a new Label align row in the inspector, next to Label position, and centred is still the default so nothing moves until you ask it to.

It applies where the label sits over the tile — Inside, Below or Above. With the label beside the tile (Left or Right) its edge is already pinned to the tile, so there is nothing to align it within and the buttons grey out. A multi-row label aligns as a block: every row shares the same edge.

Text and Callout blocks had their own alignment buttons in the Text section; those have moved into the same Label align row, so there is one control for every kind instead of two that did the same thing. Style → Copy / Paint carries the alignment along with the colour and label position.

A CPE shape. Customer premises equipment — the carrier's box at the edge of a customer site — is in the Network section. It is drawn as the demarcation it marks: a dashed line splitting provider from customer, with the service line crossing into the device and out to the LAN. Search finds it as cpe, and also as demarc, ont, ntu, nid or customer premises.

v0.7.0 — 2026-07-24

Labels can have more than one line, and the box you edit them in is a real box. A caption used to be a single run of text: it neither wrapped nor took a line break, so a long one ran off across the page, and the field you typed it into was a one-line slot about thirty characters wide.

Now a label wraps on its own, and Shift+Enter (or Alt+Enter) puts a break exactly where you want one. Enter still means done, as it always has. The edit box grows as you type — on the canvas and in the Label field in the inspector — so a long description is readable while you are writing it.

Where the label sits decides how much room it gets. Below or above the shape it can run to six lines. Inside the tile it takes only what the tile can spare while the icon still reads as an icon; past that it ends in an ellipsis and the full text is on hover. If you are writing a paragraph rather than a name, set Label position → Below, or make the shape wider.

If you have opened a .drawio file and seen <div> or -&gt; printed on your diagram, that is fixed. draw.io stores captions as HTML, and we were showing the markup instead of reading it. Multi-line labels from draw.io now arrive as multi-line labels, &gt; arrives as >, and labels you write travel back the same way — so a two-line caption saved here opens as two lines there. Reopen an affected file and it corrects itself; nothing to do by hand.

v0.6.2 — 2026-07-24

VDOM and VSYS are red now, like the firewall. Both were drawn in network blue, which put them alongside the switch and the router. They belong with the firewall: a VDOM carves a FortiGate into independent policy domains and a VSYS does the same to a Palo Alto, so what they partition is the security policy, not the wire. They are garnet from this release on. VRF stays blue on purpose — a routing instance really does partition forwarding rather than policy, which is the whole distinction the colours are there to show.

They keep their place in the palette, under Virtual contexts next to VRF, so nothing moves; only the colour changed. Existing diagrams pick this up the next time you open them, and any VDOM or VSYS you had recoloured by hand keeps the colour you chose. If you re-export a diagram that contains one, the shape's fill and outline in the resulting .drawio or .vsdx will differ from the file you exported before — the diagram is the same, the shape is simply a different colour.

v0.6.1 — 2026-07-24

The donation panel no longer scrolls inside itself. It was given less height than its content needed, so the Tip button ended up below a scrollbar in the middle of the page. It now gets Ko-fi's full height, and the page scrolls rather than the panel.

Under the hood: two dead loaders removed. The shape catalog and the toast module were both loaded through a "the other workstream might not have built this yet" indirection that stopped being true long ago — the bundler had been pointing at both for a while. Removing them is invisible in use, but it deletes a real class of bug: the shape catalog was being re-validated at runtime against a second, hand-maintained list of families, and forgetting an entry there could make an entire group of icons vanish from the palette while the canvas still drew them perfectly. There is one list now, and the compiler checks it.

Maintenance: the release script's progress counter no longer changes its own total halfway through a run, and the macOS build stopped warning about a missing author field.

v0.6.0 — 2026-07-24

An icon library, in the app. The ≡ menu has a new Icon library entry that puts the whole catalog on one page — every icon, grouped into the same sections as the palette, with its catalog key underneath. There is a search box, and picking an icon arms it and closes the dialog, so browsing ends in drawing. The key under each icon (plc, data-diode, purdue) is the name the shape is saved under in a .drawio or .vsdx file, and the name a CSV import matches — handy if you are writing one by hand.

A way back to the website, and a tidier menu. The ≡ menu has a Website entry — the app had no link to its own site, which mattered most if you had installed it as an app or bookmarked the editor directly, where there is no Back button to fall back on. The support link beside it was also smaller and greyer than every row above it, which made it look like a rendering fault rather than the deliberately quiet thing it was meant to be; both are ordinary rows now, marked with ↗ because they leave the app.

You can support the project without leaving the site. The donate page can now show the tip panel inline, so you no longer get bounced to another site to buy a coffee. It only loads when you press the button — open the page, read it, leave again, and nothing is ever requested from Ko-fi. That is deliberate: this site otherwise makes no third-party requests at all, and the privacy page now spells out that single exception rather than glossing over it. Payment is handled entirely by Ko-fi inside the panel; card details never touch this site. If you would rather not load it, the plain link is still there and works as any link does. In dark mode the panel follows the site's theme.

v0.5.0 — 2026-07-24

OT is now a first-class part of the catalog — 27 new shapes. Until now there was nothing between an IoT sensor and a generic server, so the control layers of an industrial diagram simply could not be drawn: people fell back to the generic box, or drew a panel-mount operator screen as a laptop. There is now a full control stack (PLC, Safety PLC, RTU, Remote I/O, VFD, HMI, Engineering workstation, SCADA server, Historian, Protocol gateway), the IT/OT boundary (Data diode, Jump host), industrial networking (Cellular router, Network TAP), facility and physical security (Camera, UPS, Door controller), and the vertical equipment that goes with them (Substation, Protection relay, Solar PV, Wind turbine, HVAC, Fire panel, Robot, Field cabinet, Plant). They share a new olive accent so an OT device reads as one at a glance.

Purdue level backdrops. Search purdue in the palette and drop a backdrop that draws the whole model — levels 5 down to 0 with the industrial DMZ marked as the boundary it is. It is one piece of scenery rather than a stack of boxes, so the bands can never drift apart, and devices snap into a level when you drop or drag them onto it: getting a row lined up takes no alignment tools. Only the vertical position is snapped, so you still place things left-to-right however you like. Like a map it sits on its own layer, so you can switch the whole model off and keep a plain plant topology. There is a new OT — Purdue Plant template that starts you with a populated one.

Two new connector types. Conduit for the controlled channel between two zones, and Fieldbus for a serial or multidrop run — drawn thinner than everything else, because until now an RS-485 run rendered exactly like a 10 G trunk, which quietly told you the wrong thing.

The palette is grouped into smaller sections. Two groups had grown past twenty icons, so Network is now split into Network and Places, and OT into control and field & facility; VDOM, VRF and VSYS finally sit together under Virtual contexts instead of being scattered across three groups. Colour still comes from the device family, so nothing changed colour except VDOM, which now matches VRF and VSYS. Your collapsed groups reset once with this update — the old setting referred to the old groups.

Palette search is more precise. Typing rtu used to return Bus, VDOM and Virtual machine ahead of RTU itself, because the search matched anywhere inside a word and "virtual" contains "rtu". Terms now match the start of a word. Every abbreviation still works — fw, l3, 62443, tacacs+, 802.1x — and the palette, the device picker and the rack builder now share one matcher, so they can no longer disagree about what a search finds.

v0.4.4 — 2026-07-24

Pressing Map more than once no longer stacks duplicate maps. It used to add a fresh world map on every press, each one exactly on top of the last — and because a map's interior is deliberately click-through so the devices on it stay reachable, those duplicates could not be clicked off again. Now the second press just selects the map you already have. You can still put two maps on a page when you want one per region: copy the first and paste it, which keeps the extent you picked.

Security hardening across the site and the self-hosted image. The website's content-security policy no longer needs unsafe-inline for styles; the editor page now always revalidates, so a cached copy can't outlive an update and leave you looking at a blank canvas; and the server inside the Docker image and the offline bundle now sends the usual protective headers and refuses anything but GET/HEAD. Colours and embedded images arriving from a collaboration peer, a template file or a Visio import are validated before they are drawn.

Nothing you have saved is affected, and there is nothing to do before updating.

v0.4.3 — 2026-07-23

The Docker image is now a real download on the site — grab it from the release on the download page (linux/amd64, docker load and run), instead of the page only mentioning it. The download tooling is also ready for the Windows and Linux desktop builds: when those installers are produced they appear on the download page automatically and feed the desktop updater, no further changes needed.

v0.4.2 — 2026-07-23

Download page now explains how to open the app on first launch. Because the desktop builds aren't signed with an Apple/Microsoft certificate yet, macOS calls the app "damaged" and Windows shows a SmartScreen warning. The macOS build now includes a one-time copy-paste command that clears that, and the Windows build explains the "More info → Run anyway" step — so you can install without needing to know the workaround.

v0.4.1 — 2026-07-23

Maintenance release: refreshes the desktop build so it matches the current web version (the previous release was web-only) and re-publishes it to the download page with an updated checksum. No feature or behaviour changes.

v0.4.0 — 2026-07-23

Download page cleanup: each release now shows a short one-line summary with a link to the full release notes instead of the entire notes text, and file checksums are tucked into a "sha256 checksum" toggle so the card stays compact. No app or desktop changes — nothing to reinstall.

v0.3.0 — 2026-07-23

Drawbridge gets a home on the web. This release introduces drawbridge.fortiknight.com: use the app straight in your browser (it works offline after the first visit), read the manual online, download desktop builds with SHA-256 checksums, and send feedback without needing any account.

What's new:

Considerations before updating:

v0.2.9 — 2026-07-22

Global templates now show a real world-map thumbnail on their cards, and a discreet "Buy me a ☕" sponsor link joined the app menu. Routine update, no considerations.

v0.2.8 — 2026-07-22

Minimap fix: connectors with pinned sides now anchor to the correct point on the tile, so the minimap matches the canvas again. Routine update.

v0.2.7 — 2026-07-22

Minimap fix: the bus bar renders as its accent-coloured bar with spread taps instead of a generic tile. Routine update.


Versions before v0.2.7 predate these notes — see the changelog for their full history.