How To

Install draw.io Desktop on Ubuntu, Debian and Fedora Linux

draw.io Desktop has no apt or dnf repository. The project publishes every Linux build on GitHub, so installing it means downloading a .deb, an .rpm or an AppImage, checking it, and handing it to your package manager. It is the same diagram editor as app.diagrams.net, packaged with Electron, and it works fully offline apart from its update check.

Original content from computingforgeeks.com - post 39021

Below: how to install draw.io on Ubuntu and Debian from the .deb, on Fedora from the .rpm, and how to run the AppImage or the Flathub build instead. It also covers two things most guides skip: exporting diagrams to PNG, SVG and PDF from the command line, including on a headless server where the .deb is missing a library, and what the built-in updater really does for each package format. Everything was tested in October 2026 with draw.io Desktop 32.4.1 on Fedora 45, Fedora 44, Ubuntu 26.04 and Debian 13.

Detect the latest release

Every download URL carries the version number. Detect it once into a variable and the rest of the commands stay copy-paste clean whenever a new release lands:

export DRAWIO_VER=$(curl -sI https://github.com/jgraph/drawio-desktop/releases/latest | grep -i '^location:' | grep -oP 'tag/v\K[0-9.]+')
echo ${DRAWIO_VER}

The echo should print a plain version string:

32.4.1

This reads the redirect GitHub sends for releases/latest, so it doesn’t count against the GitHub API rate limit. The API method many guides use stops working after 60 unauthenticated calls an hour from one IP, and it fails quietly: DRAWIO_VER ends up empty and every download URL breaks. One of our test runs from a shared lab address came back with an empty version partway through, which is what sent us to the redirect method.

Install draw.io on Ubuntu and Debian

Debian and Ubuntu cloud images ship curl; on a desktop install that lacks it, sudo apt-get install -y curl first. Download the .deb and the checksum file for the release. The project publishes SHA-256 sums for every asset, and checking them takes one command:

curl -fsLO https://github.com/jgraph/drawio-desktop/releases/download/v${DRAWIO_VER}/drawio-amd64-${DRAWIO_VER}.deb
curl -fsLO https://github.com/jgraph/drawio-desktop/releases/download/v${DRAWIO_VER}/Files-SHA256-Hashes.txt
sha256sum --ignore-missing -c Files-SHA256-Hashes.txt

--ignore-missing skips the Windows and macOS entries and checks only what you downloaded:

drawio-amd64-32.4.1.deb: OK

Install it with apt, not dpkg, so the GTK and NSS dependencies resolve automatically. The leading ./ tells apt the argument is a file:

sudo apt-get install -y ./drawio-amd64-${DRAWIO_VER}.deb

On a desktop install most of those dependencies are already present. On minimal cloud images apt pulled 168 packages on Ubuntu 26.04 and 195 on Debian 13. The Ubuntu run, checksum included:

draw.io .deb checksum verification and apt install on Ubuntu 26.04

One naming quirk catches people when they verify: the package is registered as draw.io with the dot, while the command is drawio without it. Query the package name:

apt-cache policy draw.io

The only version source is the local dpkg status, which is the point: no repository will ever offer an update:

draw.io:
  Installed: 32.4.1
  Candidate: 32.4.1
  Version table:
 *** 32.4.1 100
        100 /var/lib/dpkg/status

Install draw.io on Fedora

Fedora takes the .rpm. On a fresh Workstation, do the system update from the Fedora 45 post-install checklist first. Then download the package along with the checksum file:

curl -fLO https://github.com/jgraph/drawio-desktop/releases/download/v${DRAWIO_VER}/drawio-x86_64-${DRAWIO_VER}.rpm
curl -fsLO https://github.com/jgraph/drawio-desktop/releases/download/v${DRAWIO_VER}/Files-SHA256-Hashes.txt
sha256sum --ignore-missing -c Files-SHA256-Hashes.txt

The checksum is the only integrity check you get, because the RPM isn’t signed. Fedora 45 says so bluntly:

rpm -K drawio-x86_64-${DRAWIO_VER}.rpm

Fedora 45 reports the missing signature. Fedora 44 prints only digests OK, which reads like a pass but checked nothing beyond the digests stored in the file:

drawio-x86_64-32.4.1.rpm: digests SIGNATURES NOT OK

Install with dnf. Plain rpm -ivh stops on a missing dependency, libXScrnSaver, which dnf fetches for you:

sudo dnf install -y ./drawio-x86_64-${DRAWIO_VER}.rpm

Two packages, 343 MiB on disk. The OpenPGP warning is expected for a local file. This is the Fedora 44 run; on a Fedora 45 Workstation that has a GNOME Software update staged, dnf also warns that the pending offline transaction will be invalidated, so that staged update has to be prepared again:

Package        Arch   Version        Repository        Size
Installing:
 draw.io       x86_64 0:32.4.1-1     @commandline 342.6 MiB
Installing dependencies:
 libXScrnSaver x86_64 0:1.2.4-7.fc44 fedora        49.5 KiB

Transaction Summary:
 Installing:         2 packages

Total size of inbound packages is 105 MiB. Need to download 25 KiB.
After this operation, 343 MiB extra will be used (install 343 MiB, remove 0 B).
--------------------------------------------------------------------------------
Running transaction
Warning: skipped OpenPGP checks for 1 package from repository: @commandline
Complete!

The package metadata confirms the version, and the licence. draw.io Desktop is GPL-3.0 now; older builds and older guides say Apache 2.0:

rpm -qi draw.io | head -8

The same fields come back on Fedora 45 and Fedora 44:

Name         : draw.io
Version      : 32.4.1
Release      : 1
Architecture : x86_64
Install Date : Mon 12 Oct 2026 10:56:22 AM UTC
Group        : default
Size         : 359191720
License      : GPL-3.0-only

The .deb and .rpm both install the app under /opt/drawio. On Fedora, /usr/bin/drawio points there through the alternatives system. If you prefer Flatpak for desktop apps, the Flathub section below covers that route.

Launch draw.io

The package registers a desktop entry, so draw.io appears in the GNOME, KDE and Cinnamon app menus. From a terminal inside your desktop session, open a file directly. web-stack.drawio is the small sample diagram used through the rest of this guide; save any diagram under that name, or use your own file:

drawio web-stack.drawio

The editor opens with the shape library on the left and the format panel on the right. This is a small four-node diagram on Fedora 45 Workstation:

draw.io Desktop editor with a web stack diagram on Fedora 45 GNOME

Diagrams save as .drawio XML wherever you like. The desktop entry also claims the legacy Visio type (.vsd) and Mermaid files. Modern .vsdx files are not in that list, so open them through File, Open or Import instead of double-clicking:

Exec=/opt/drawio/drawio %U
MimeType=application/vnd.jgraph.mxfile;application/vnd.visio;text/vnd.mermaid;

File, Export as covers PNG, JPEG, WebP, SVG, PDF, HTML and XML, plus an animated export:

draw.io File Export as menu listing PNG, SVG and PDF on Fedora 45

Run from an SSH session instead, drawio aborts with Missing X server or $DISPLAY. It needs a display even for command-line work, which is the next section.

Export diagrams from the command line

The same binary has a headless export mode, which is how docs-as-code repositories turn .drawio sources into images during a build. Check the version first, then export one file three ways:

drawio --version
drawio --export --format png --scale 2 --output web-stack.png web-stack.drawio
drawio -x -f svg -o web-stack.svg web-stack.drawio
drawio -x -f pdf --crop -o web-stack.pdf web-stack.drawio

-x, -f and -o are the short forms of the flags in the first export. --scale 2 doubles the PNG resolution and --crop trims the PDF to the diagram instead of a full page. Each export prints the input and output name:

32.4.1
web-stack.drawio -> web-stack.png
web-stack.drawio -> web-stack.svg
web-stack.drawio -> web-stack.pdf

The files land next to the source, with the PNG at twice the size of the diagram:

1774 web-stack.drawio
10358 web-stack.pdf
36330 web-stack.png
34108 web-stack.svg
web-stack.png: PNG image data, 1405 x 165, 8-bit/color RGB, non-interlaced

On Fedora 45 the same exports also print two errors before each line, one from freedesktop_secret_key_provider.cc and a Request ended from the D-Bus portal code. Electron asks the desktop secret service for an encryption key, gets no answer from a non-interactive run, and carries on. The files came out at the same sizes as on Fedora 44, so treat those lines as noise.

Headless servers and CI runners

Without a desktop, give draw.io a virtual X server with xvfb-run. On Debian and Ubuntu that is the xvfb package. The first try on minimal Debian 13 and Ubuntu 26.04 images still fails, and not on the display:

sudo apt-get install -y xvfb
xvfb-run -a drawio -x -f png -o web-stack.png web-stack.drawio

The .deb does not declare a dependency on the ALSA library, which every desktop already has:

drawio: error while loading shared libraries: libasound.so.2: cannot open shared object file: No such file or directory

The declared dependency list confirms it. GTK, NSS and libsecret are there, ALSA is not:

Depends: libgtk-3-0, libnotify4, libnss3, libxss1, libxtst6, xdg-utils, libatspi2.0-0, libuuid1, libsecret-1-0

Install it by hand. On Ubuntu 26.04 and Debian 13 the package is libasound2t64:

sudo apt-get install -y libasound2t64

The same export then works without any desktop installed:

draw.io headless PNG export with xvfb-run on Debian 13 failing on libasound.so.2 then succeeding

Without --scale, the PNG comes out at the native 704×84 of the diagram. Add these two packages to a CI image and the export runs in any pipeline. It is a natural fit next to a docs build on an Ubuntu 26.04 server.

Run the AppImage instead

The AppImage runs without installing anything and without root. It is the quickest way to try a new release next to the packaged one, or to run draw.io on a distro that neither package format suits:

curl -fsLO https://github.com/jgraph/drawio-desktop/releases/download/v${DRAWIO_VER}/drawio-x86_64-${DRAWIO_VER}.AppImage
curl -fsLO https://github.com/jgraph/drawio-desktop/releases/download/v${DRAWIO_VER}/Files-SHA256-Hashes.txt
sha256sum --ignore-missing -c Files-SHA256-Hashes.txt
chmod +x drawio-x86_64-${DRAWIO_VER}.AppImage
./drawio-x86_64-${DRAWIO_VER}.AppImage --version

The checksum file covers the AppImage too. It printed the version on Fedora 45 Workstation, which ships FUSE 3 and not the old fuse-libs:

package fuse is not installed
fuse3-3.18.3-1.fc45.x86_64
package fuse-libs is not installed
fuse3-libs-3.18.3-1.fc45.x86_64

It also printed its version on Ubuntu 26.04 with only fuse3 installed, under xvfb-run on a server image. Many AppImages still fail on those systems until libfuse2t64 or fuse-libs is added, but this one does not need them. The AppImage weighs about 152 MB, bundles its own runtime, and creates no menu entry on its own; the AppImage guide for Fedora covers menu integration with Gear Lever.

Install from Flathub

draw.io is on Flathub as com.jgraph.drawio.desktop, packaged by a community maintainer and not verified by JGraph on Flathub. It repackages the official release. Older advice says the Flathub build trails GitHub by several releases. That is no longer true: during testing Flathub served 32.4.1, the same release as GitHub. On Ubuntu and Debian, install Flatpak and add the Flathub remote first; Fedora users can follow the Flathub setup for Fedora instead:

sudo apt-get install -y flatpak
sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

Check the size before you commit to it:

flatpak remote-info flathub com.jgraph.drawio.desktop

450 MB to download and 862 MB on disk, on top of the freedesktop runtime if it is not installed yet:

        ID: com.jgraph.drawio.desktop
       Ref: app/com.jgraph.drawio.desktop/x86_64/stable
  Download: 450.2 MB
 Installed: 862.1 MB
   Runtime: org.freedesktop.Platform/x86_64/25.08
      Date: 2026-10-09 07:56:33 +0000

Install it system-wide:

sudo flatpak install -y flathub com.jgraph.drawio.desktop

On a system where Flatpak was just installed, the installer warns that /var/lib/flatpak/exports/share is not in the search path yet. Log out and back in and the menu entry appears. Confirm the installed version:

flatpak info com.jgraph.drawio.desktop

The app reports the same release as the native packages:

          ID: com.jgraph.drawio.desktop
     Version: 32.4.1
      Origin: flathub
   Installed: 862.1 MB
     Runtime: org.freedesktop.Platform/x86_64/25.08

The built-in updater switches itself off inside Flatpak, so updates arrive through flatpak update like any other app. For how the three formats compare on disk use and sandboxing, see Snap vs Flatpak vs AppImage.

Update draw.io by hand

With no repository behind it, the package manager never sees a new release. On Fedora 44 with the previous release installed, dnf upgrade found nothing:

sudo dnf -y upgrade draw.io

dnf has nothing to compare against:

Updating and loading repositories:
Repositories loaded.
Nothing to do.

Re-run the version detection, download the new .rpm and install it over the old one. dnf treats a newer local file as an upgrade:

sudo dnf -y install ./drawio-x86_64-${DRAWIO_VER}.rpm

The old build is replaced in one transaction, and settings in ~/.config/draw.io carry over:

Package              Arch   Version    Repository        Size
Upgrading:
 draw.io             x86_64 0:32.4.1-1 @commandline 342.6 MiB
   replacing draw.io x86_64 0:32.3.0-1 @commandline 342.5 MiB

Transaction Summary:
 Upgrading:          1 package
 Replacing:          1 package

Total size of inbound packages is 105 MiB. Need to download 0 B.

On Debian and Ubuntu the same idea applies: sudo apt-get install -y ./drawio-amd64-${DRAWIO_VER}.deb with the newer file.

Remove draw.io

On Fedora, dnf also removes the libXScrnSaver dependency it pulled in:

sudo dnf -y remove draw.io

Two empty directories survived the removal on Fedora 44, and no package owns them:

file /opt/drawio is not owned by any package
file /opt/drawio/locales is not owned by any package
file /opt/drawio/resources is not owned by any package

sudo rm -r /opt/drawio clears them. On Debian and Ubuntu, apt-get remove leaves the package in the rc state with its configuration files registered. Purge it to clear that; on Debian 13 /opt/drawio was gone afterwards:

sudo apt-get purge -y draw.io

Neither command touches your diagrams or the per-user settings in ~/.config/draw.io.

What the built-in updater does in each format

Many guides say draw.io downloads updates and installs them silently on quit. That is true for one format only. The desktop source picks an update mode from how it was installed, and the .deb and .rpm builds mark themselves with a package-type file under /opt/drawio/resources:

Install methodUpdate modeWhat happens
.deb (Ubuntu, Debian)notifyChecks GitHub at most once every 24 hours by default and tells you a release exists. You install it by hand.
.rpm (Fedora)notifySame as the .deb. The check time is stored as lastUpdateCheck in ~/.config/draw.io/config.json.
AppImageautoDownloads the new release in the background and replaces the AppImage when you quit.
FlatpakoffUpdater disabled; flatpak update handles it.
SnapoffUpdater disabled; snapd refreshes it.

To stop the check entirely, on a locked-down workstation or an air-gapped network, launch with DRAWIO_DISABLE_UPDATE=true drawio or pass --disable-update. Either one turns the updater off for that launch only. To stop the background check for good, untick Extras, Automatic Updates in the editor:

draw.io Extras menu with the Automatic Updates toggle on Fedora 45

The choice is saved in the user config, so it survives restarts:

grep -E "dontCheckUpdates|lastUpdateCheck" ~/.config/draw.io/config.json

After unticking it on Fedora 45, the file carried the new flag:

	"lastUpdateCheck": 1791802692246,
	"dontCheckUpdates": true

The check interval itself can only be changed in the macOS build. On the AppImage, DRAWIO_NO_SILENT_UPDATE=true or --no-silent-update makes it ask before downloading. The mode logic lives in update-mode.js in the drawio-desktop repository, if you want to confirm it against a newer release. Compare that with apps that do ship a repository: the VS Code install guide for Fedora adds the Microsoft dnf repo, and updates then arrive with every dnf upgrade.

Keep reading

Upgrade Ubuntu 24.04 to Ubuntu 26.04 LTS (Step by Step) Ubuntu Upgrade Ubuntu 24.04 to Ubuntu 26.04 LTS (Step by Step) UFW Firewall Commands with Examples on Ubuntu 26.04 / 24.04 Security UFW Firewall Commands with Examples on Ubuntu 26.04 / 24.04 Ubuntu 26.04 vs 24.04 LTS: Should You Upgrade Now? Ubuntu Ubuntu 26.04 vs 24.04 LTS: Should You Upgrade Now? dnf versionlock on Fedora: Lock Packages and Kernels (dnf5) Fedora dnf versionlock on Fedora: Lock Packages and Kernels (dnf5) Fix ptrace Operation not permitted for gdb and strace on Fedora Fedora Fix ptrace Operation not permitted for gdb and strace on Fedora Install Centrifugo Messaging Server on Ubuntu 24.04 | Debian 12 Debian Install Centrifugo Messaging Server on Ubuntu 24.04 | Debian 12

Leave a Comment

Press ESC to close