Writing and uploading sketches is easier once the IDE, USB permissions, and update path are sorted out before you connect a board. To install Arduino IDE on Debian, choose between Debian’s older distro-managed package and an Arduino IDE 2 method that follows upstream releases more closely.
On Debian, Arduino IDE handles sketch editing, board package management, compiling, and uploads to connected Arduino boards and compatible microcontrollers. Debian 13 and 12 currently ship Arduino 1.8.19 in the default package sources, Debian 11 ships 1.8.13, and both Flatpak and the official AppImage currently provide Arduino IDE 2.3.8 for x86_64 desktops.
Install Arduino IDE on Debian
| Method | Channel | Version | Updates | Best For |
|---|---|---|---|---|
| APT | Debian Packages | IDE 1.8.x legacy | Through APT | Debian-managed installs and wider architecture support |
| Flatpak | Flathub | IDE 2.x | Through Flatpak | x86_64 desktops that want Arduino IDE 2 with automatic updates |
| AppImage | Arduino GitHub Releases | IDE 2.x | Reusable updater script | Official portable x86_64 installs without Flatpak |
- Want Arduino IDE 2 with the least maintenance on an x86_64 desktop: choose Flatpak.
- Want a Debian-managed package and the broadest architecture support: choose APT.
- Want the official portable x86_64 build without Flatpak: choose the AppImage updater method.
The APT package is still the legacy IDE branch, so Debian’s default package sources are best when you value Debian integration or non-x86_64 architecture support over newer editor features. Arduino’s supported versions page identifies IDE 2 as the active and recommended desktop environment, while IDE 1.x receives only critical security fixes. For most x86_64 Debian desktops, choose Flatpak or the official AppImage when you want Arduino IDE 2.
Install Arduino IDE from Debian APT on Debian
The Debian package installs the legacy Arduino IDE together with the Java runtime and AVR toolchain packages it needs. This is the simplest path when you want a repository-managed install on Debian 13, 12, or 11.
Update Debian before installing Arduino IDE from APT
Refresh APT metadata first. This downloads the latest package indexes from your configured Debian repositories, including the current Arduino package record for your release.
sudo apt update
Install pending upgrades before adding Arduino IDE if the system has not been updated recently. Keeping Java, AVR, and desktop library packages current reduces dependency mismatches during the Arduino install.
sudo apt upgrade
If your account does not have sudo access yet, follow our guide to add a user to sudoers on Debian before you continue.
Install Arduino IDE from Debian APT on Debian
Install the arduino package from Debian’s configured repositories. This command installs Debian’s legacy 1.8.x IDE package, not Arduino IDE 2.
sudo apt install arduino
APT prompts before installing the IDE and its dependency set unless your local APT configuration already assumes yes. The dependency set usually includes a Java runtime, AVR upload tools, and Debian’s arduino-add-groups helper.
Verify the Debian APT Arduino install
Use APT metadata to confirm the install. This is safer over SSH than trying to launch the GUI application from a headless shell. On Debian 13, the relevant lines currently resemble:
apt-cache policy arduino
arduino:
Installed: 2:1.8.19+dfsg1-3
Candidate: 2:1.8.19+dfsg1-3
Version table:
*** 2:1.8.19+dfsg1-3 500
500 http://deb.debian.org/debian trixie/main amd64 Packages
Debian 13 and 12 currently resolve this package to 1.8.19, while Debian 11 still resolves it to 1.8.13 from the default package sources.
Install Arduino IDE 2 via Flatpak on Debian
Flatpak is the most practical Debian path when you want Arduino IDE 2 with automatic updates on an x86_64 desktop. Flathub metadata currently resolves cc.arduino.IDE2 to Arduino IDE 2.3.8 for x86_64, and Flathub labels the wrapper as unverified and not affiliated with Arduino. Use the AppImage method instead when you want Arduino’s official direct download.
If Flatpak is not installed yet, first install Flatpak on Debian so the Flathub install commands have the required runtime and remote configuration.
Enable Flathub for Arduino IDE on Debian
Add the Flathub remote at system scope before installing the package. The --if-not-exists flag keeps Flatpak from erroring out if Flathub is already configured.
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
System-scope Flatpak commands use sudo because the remote and application are stored outside your home directory. Keep that scope consistent for install, update, and remove commands.
Install Arduino IDE 2 with Flatpak on Debian
Install the IDE 2 package from Flathub. The -y flag accepts the Flatpak prompt automatically; remove it if you prefer to review the runtime list before confirming.
sudo flatpak install flathub cc.arduino.IDE2 -y
Flatpak may download the Freedesktop runtime on the first install. That runtime is shared by other desktop Flatpak applications, so later Flatpak installs can be smaller.
Verify the Arduino IDE Flatpak install on Debian
Check the installed Flatpak app list for the Arduino IDE 2 application ID:
flatpak list | grep cc.arduino.IDE2
Arduino IDE v2 cc.arduino.IDE2 2.x.x stable system
The current Flathub build resolves to Arduino IDE 2.3.8.
Install Arduino IDE 2 via Official AppImage on Debian
The official AppImage is useful when you want Arduino IDE 2 directly from Arduino without installing Flatpak. Arduino does not publish a Debian .deb installer for IDE 2 in this workflow; the direct AppImage path documented here uses Arduino’s 64-bit x86_64 Linux asset, so Debian arm64 systems should use the APT package unless Arduino publishes an ARM IDE 2 build in the future.
Install Arduino IDE AppImage dependencies on Debian
The updater uses curl to contact the GitHub Releases API, jq to parse the latest release metadata, and a FUSE 2 library to mount the AppImage when you launch it. Debian 13 uses libfuse2t64, while Debian 12 and 11 use libfuse2. If you rarely use it, our curl command guide explains the download tool used by the script.
On Debian 13:
sudo apt install curl jq libfuse2t64
On Debian 12 or Debian 11:
sudo apt install curl jq libfuse2
Confirm the two command-line tools are available before creating the updater. The FUSE package is used later by the AppImage runtime, so it does not print a separate command path here.
command -v curl jq
/usr/bin/curl /usr/bin/jq
Create the Arduino IDE AppImage updater on Debian
Create a reusable updater command so the AppImage install and future refreshes use the same tested path. The script resolves the latest stable GitHub release, selects the Linux 64-bit AppImage asset, verifies the SHA-256 digest when GitHub publishes one, and installs the file as $HOME/Applications/arduino-ide-latest.AppImage.
The setup command uses sudo tee because /usr/local/bin is root-owned. The quoted EOF marker keeps variables such as $HOME inside the script instead of expanding while the script file is being created.
sudo tee /usr/local/bin/update-arduino-ide-appimage > /dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
if [[ ${EUID:-$(id -u)} -eq 0 ]]; then
printf 'Run this updater as your normal user, not with sudo.\n' >&2
exit 1
fi
api_url="https://api.github.com/repos/arduino/arduino-ide/releases/latest"
app_dir="$HOME/Applications"
appimage_path="$app_dir/arduino-ide-latest.AppImage"
tmp_dir="$(mktemp -d)"
trap 'rm -rf "$tmp_dir"' EXIT
mkdir -p "$app_dir"
release_json="$(curl -fsSL "$api_url")"
version="$(jq -r '.tag_name' <<<"$release_json")"
if ! asset_info="$(jq -er '
.assets
| map(select(.name | test("^arduino-ide_[0-9]+(\\.[0-9]+)*_Linux_64bit\\.AppImage$")))
| if length == 0 then empty else first | [.browser_download_url, (.digest // ""), .name] | @tsv end
' <<<"$release_json")"; then
printf 'Could not find a Linux 64-bit Arduino IDE AppImage in the latest release.\n' >&2
exit 1
fi
IFS=$'\t' read -r appimage_url digest asset_name <<<"$asset_info"
if [[ -z $appimage_url || -z $asset_name ]]; then
printf 'GitHub returned an incomplete AppImage asset record.\n' >&2
exit 1
fi
expected_hash=""
if [[ $digest == sha256:* ]]; then
expected_hash="${digest#sha256:}"
fi
if [[ -n $expected_hash && -f $appimage_path ]]; then
read -r current_hash _ < <(sha256sum "$appimage_path")
if [[ $current_hash == "$expected_hash" ]]; then
printf 'Arduino IDE %s AppImage is already current.\n' "$version"
ls -lh "$appimage_path"
exit 0
fi
fi
tmp_file="$tmp_dir/$asset_name"
printf 'Downloading Arduino IDE %s AppImage...\n' "$version"
curl -fsSL --retry 3 --output "$tmp_file" "$appimage_url"
if [[ -n $expected_hash ]]; then
printf '%s %s\n' "$expected_hash" "$tmp_file" | sha256sum -c --status -
printf 'Checksum verified.\n'
else
printf 'No SHA-256 digest was published for %s; skipping checksum verification.\n' "$asset_name" >&2
fi
install -m 0755 "$tmp_file" "$appimage_path"
printf 'Installed %s\n' "$appimage_path"
ls -lh "$appimage_path"
EOF
sudo chmod 755 /usr/local/bin/update-arduino-ide-appimage
The final chmod line makes the updater itself executable. The updater later writes the AppImage into your home directory as your normal user, which avoids a root-owned AppImage in $HOME/Applications.
Run the Arduino IDE AppImage updater on Debian
Run the updater as your normal user, not with sudo. It creates $HOME/Applications if needed, downloads the current AppImage, verifies the checksum, and leaves a fixed launcher path for future updates.
update-arduino-ide-appimage
Downloading Arduino IDE 2.3.8 AppImage... Checksum verified. Installed /home/username/Applications/arduino-ide-latest.AppImage -rwxr-xr-x 1 username username 193M May 22 07:19 /home/username/Applications/arduino-ide-latest.AppImage
The first run downloads and installs the AppImage. Later runs compare the published GitHub digest against the local file and stop early when the AppImage is already current.
Launch the Arduino IDE AppImage on Debian
Start the AppImage from a graphical desktop session:
"$HOME/Applications/arduino-ide-latest.AppImage"
If you start the AppImage from an SSH-only shell, it can fail with display errors instead of opening the IDE. Use a local desktop session when you want to launch the GUI.
Grant Arduino board access on Debian
APT, Flatpak, and AppImage installs all rely on the same serial device permissions when you upload sketches to boards that appear as /dev/ttyACM* or /dev/ttyUSB*.
Check detected Arduino serial devices on Debian
Connect the board with a data-capable USB cable, then list the common Arduino serial device names. No output means Debian has not exposed a matching serial port yet.
ls -l /dev/ttyACM* /dev/ttyUSB* 2>/dev/null
crw-rw---- 1 root dialout 166, 0 May 22 08:15 /dev/ttyACM0
The root dialout columns show the owning user and group. Your desktop user needs membership in dialout before Arduino IDE can open that serial device without elevated privileges.
Add your user to the dialout group on Debian
Run one command that works across all three installation methods. The $USER variable expands to your current login name, while -aG appends dialout to your supplementary groups without replacing existing groups.
sudo usermod -aG dialout "$USER"
If you installed the Debian APT package, Debian also includes the arduino-add-groups helper. The manual usermod command is easier to document because it works for APT, Flatpak, and AppImage alike.
The group change is written to the account database immediately, but already-open desktop sessions keep their old group list. Sign out and back in before testing uploads from the GUI.
Verify dialout access on Debian
Check the account group list after running usermod. This confirms the group membership was saved for your user.
id -nG "$USER"
username sudo audio video dialout
Then check the active shell or desktop session. If dialout appears in the account list but not in the active session list, the old login session is still active.
id -nG
username sudo audio video dialout
Do not run Arduino IDE with sudo to bypass serial permissions. A root-launched IDE can create root-owned configuration files in your home directory and make later normal launches harder to troubleshoot.
Launch Arduino IDE on Debian
Arduino IDE is a graphical application, so start it from a desktop session even if you used SSH for the install steps. Remote shells are still fine for package checks, but they are not a reliable place to launch the GUI.
Launch Arduino IDE from the Debian terminal
Use the launcher command that matches the method you installed.
For the Debian APT package:
arduino
For the Flathub package:
flatpak run cc.arduino.IDE2
For the official AppImage:
"$HOME/Applications/arduino-ide-latest.AppImage"
Open Arduino IDE from the Debian applications menu
APT and Flatpak installs add a launcher to the applications menu. The AppImage keeps working from your home directory unless you decide to create a separate desktop launcher for it later.
- Open the activities overview or application menu in your Debian desktop.
- Search for Arduino or Arduino IDE.
- Select the launcher that matches the package you installed.

Update or remove Arduino IDE on Debian
Use method-specific maintenance commands so you only touch the build you installed.
Update Arduino IDE from Debian APT on Debian
APT upgrades only the Arduino package when a newer Debian build is available.
sudo apt install --only-upgrade arduino
Update Arduino IDE from Flatpak on Debian
Because the install used system scope, keep the update at system scope too.
sudo flatpak update cc.arduino.IDE2
Update the Arduino IDE AppImage on Debian
Use the same updater command whenever you want to check for a newer official AppImage. The script compares the local file against the latest GitHub release digest, so it exits cleanly when the installed AppImage is already current.
update-arduino-ide-appimage
Arduino IDE 2.3.8 AppImage is already current. -rwxr-xr-x 1 username username 193M May 22 07:19 /home/username/Applications/arduino-ide-latest.AppImage
Remove Arduino IDE installed from Debian APT on Debian
Remove the Debian package first, then confirm APT shows it as no longer installed.
sudo apt remove arduino
APT can mark the AVR toolchain, Java runtime, and related helper packages as no longer required after you remove
arduino. Preview the cleanup list before removing dependency packages you might still use elsewhere.
sudo apt autoremove --simulate
When the simulated removal list contains only packages you no longer need, run the real cleanup.
sudo apt autoremove
apt-cache policy arduino
On Debian 13, relevant output resembles:
arduino:
Installed: (none)
Candidate: 2:1.8.19+dfsg1-3
Version table:
2:1.8.19+dfsg1-3 500
500 http://deb.debian.org/debian trixie/main amd64 Packages
The candidate stays available because Debian can still reinstall the package later. What matters here is the Installed: (none) line.
Deleting
~/.arduino15removes your board packages, cached indexes, and Arduino preferences. Keep that directory if you plan to reinstall and want to preserve your setup.
rm -rf ~/.arduino15
Remove Arduino IDE installed from Flatpak on Debian
Remove the system Flatpak package and then verify that Flatpak no longer sees it as installed.
sudo flatpak remove --delete-data -y cc.arduino.IDE2
sudo flatpak info cc.arduino.IDE2
error: cc.arduino.IDE2/*unspecified*/*unspecified* not installed
The system uninstall can still leave per-user data behind. Remove
~/.var/app/cc.arduino.IDE2only when you want a full cleanup of that Flatpak profile.
rm -rf ~/.var/app/cc.arduino.IDE2
Remove the Arduino IDE AppImage on Debian
Deleting the AppImage file removes the portable install from your home directory. Remove the updater too if you created it only for Arduino IDE.
rm -f "$HOME/Applications/arduino-ide-latest.AppImage"
sudo rm -f /usr/local/bin/update-arduino-ide-appimage
hash -r
test ! -e "$HOME/Applications/arduino-ide-latest.AppImage" && ! command -v update-arduino-ide-appimage >/dev/null && echo "AppImage and updater removed"
AppImage and updater removed
Fix Arduino IDE issues on Debian
Start troubleshooting by separating the failed layer: Debian device detection, user permissions, Flatpak or AppImage packaging, and graphical-session startup. Work through the checks in that order so a missing USB device is not mistaken for an IDE package problem.
Diagnose missing Arduino serial devices on Debian
When no upload port appears, first check whether Debian sees the board at all. A visible /dev/ttyACM* or /dev/ttyUSB* device means the kernel created a serial port and the next likely problem is permissions.
ls -l /dev/ttyACM* /dev/ttyUSB* 2>/dev/null
crw-rw---- 1 root dialout 166, 0 May 22 08:15 /dev/ttyACM0
If the command prints nothing, reconnect the board, try a data-capable USB cable, and inspect recent kernel messages. Look for a new ttyACM0 or ttyUSB0 assignment, USB disconnects, or repeated errors that point to the cable, hub, board, or driver layer.
sudo dmesg --ctime | tail -n 40
Fix Arduino serial permission errors on Debian
When a serial device exists but Arduino IDE cannot open it, compare your active session groups with the saved account groups.
id -nG
username sudo audio video
id -nG "$USER"
username sudo audio video dialout
If dialout appears only in the second output, sign out and back in so the desktop session receives the updated group list. If dialout is missing from both outputs, add it and then start a fresh login session.
sudo usermod -aG dialout "$USER"
The Flathub wrapper documents the same dialout requirement for USB access, so this permission fix applies to Flatpak as well as APT and AppImage installs.
Fix Flatpak launch checks for Arduino IDE on Debian
If the Flatpak menu launcher does nothing, verify that the package exists and start it from a terminal so Flatpak can print any wrapper or runtime errors.
flatpak info cc.arduino.IDE2
flatpak run cc.arduino.IDE2
If flatpak info reports that the app is not installed, reinstall it from the Flatpak section. If the app opens but cannot upload to a board, return to the serial device and dialout checks because Flatpak still relies on the host user’s USB permissions.
Fix AppImage updater issues on Debian
If the AppImage method fails before launch, confirm that the updater exists in your PATH and that its two parsing and download tools are available.
command -v update-arduino-ide-appimage
/usr/local/bin/update-arduino-ide-appimage
command -v curl jq
/usr/bin/curl /usr/bin/jq
If those commands exist but the updater cannot resolve the latest release, test the GitHub API lookup directly. A successful lookup prints the current release tag.
curl -fsSL https://api.github.com/repos/arduino/arduino-ide/releases/latest | jq -r '.tag_name'
2.3.8
If the API command fails, fix network, DNS, proxy, or GitHub reachability before rerunning the updater. The updater does not replace the local AppImage until a new download completes and the checksum verification passes.
Fix AppImage FUSE and executable errors on Debian
If the AppImage file exists but will not start, confirm that it is still present and executable.
ls -lh "$HOME/Applications/arduino-ide-latest.AppImage"
test -x "$HOME/Applications/arduino-ide-latest.AppImage" && echo "AppImage is executable"
AppImage is executable
If the executable check prints nothing, restore the executable bit.
chmod 755 "$HOME/Applications/arduino-ide-latest.AppImage"
For FUSE errors such as a missing libfuse.so.2 library, verify the package name for your Debian release. On Debian 13:
apt-cache policy libfuse2t64
On Debian 12 or Debian 11:
apt-cache policy libfuse2
If the matching package shows Installed: (none) and a valid candidate, install the dependency from the AppImage dependency section and try the AppImage again.
Fix headless and AppImage launch errors for Arduino IDE on Debian
If you see HeadlessException, Missing X server or $DISPLAY, or similar dbus-launch messages, the IDE is being started without a graphical session. Check the session variables from the same terminal that failed.
printf 'DISPLAY=%s\n' "${DISPLAY:-not set}"
printf 'XDG_SESSION_TYPE=%s\n' "${XDG_SESSION_TYPE:-unknown}"
DISPLAY=not set XDG_SESSION_TYPE=unknown
Those values are normal in a plain SSH shell and explain why the GUI cannot open there. Launch Arduino IDE from the Debian desktop session instead. X11 forwarding can start some graphical applications, but it is not a reliable board-upload workflow because the USB device remains attached to the desktop host unless forwarded separately.
Conclusion
Arduino IDE on Debian is ready with a clear update path, whether you chose Debian’s legacy APT package or moved to Arduino IDE 2 through Flatpak or the official AppImage. Test board access with a real device next, and consider installing Git on Debian to track sketch changes over time.


Formatting tips for your comment
You can use basic HTML to format your comment. Useful tags currently allowed in published comments:
<code>command</code>command<strong>bold</strong><em>italic</em><blockquote>quote</blockquote>