Skip to content
Tauri

Debian

The stock Debian package generated by the Tauri bundler has everything you need to ship your application to Debian-based Linux distributions, defining your application’s icons, generating a Desktop file, and specifying the dependencies libwebkit2gtk-4.1-0 and libgtk-3-0, along with libappindicator3-1 if your app uses the system tray.

Core libraries such as glibc frequently break compatibility with older systems. For this reason, you must build your Tauri application using the oldest base system you intend to support. A relatively old system such as Ubuntu 18.04 is more suited than Ubuntu 22.04, as the binary compiled on Ubuntu 22.04 will have a higher requirement of the glibc version, so when running on an older system, you will face a runtime error like /usr/lib/libc.so.6: version 'GLIBC_2.33' not found. We recommend using a Docker container or GitHub Actions to build your Tauri application for Linux.

See the issues tauri-apps/tauri#1355 and rust-lang/rust#57497, in addition to the AppImage guide for more information.

Tauri exposes a few configurations for the Debian package in case you need more control.

If your app depends on additional system dependencies you can specify them in tauri.conf.json > bundle > linux > deb.

To include custom files in the Debian package, you can provide a list of files or folders in tauri.conf.json > bundle > linux > deb > files. The configuration object maps the path in the Debian package to the path to the file on your filesystem, relative to the tauri.conf.json file. Here’s an example configuration:

{
"bundle": {
"linux": {
"deb": {
"files": {
"/usr/share/README.md": "../README.md", // copies the README.md file to /usr/share/README.md
"/usr/share/assets": "../assets/" // copies the entire assets directory to /usr/share/assets
}
}
}
}
}

This guide covers manual compilation. Check out our GitHub Action guide for an example workflow that leverages QEMU to build the app. This will be much slower but will also be able to build AppImages.

Manual compilation is suitable when you don’t need to compile your application frequently and prefer a one-time setup. The following steps expect you to use a Linux distribution based on Debian/Ubuntu.

    • For ARMv7 (32-bit): rustup target add armv7-unknown-linux-gnueabihf
    • For ARMv8 (ARM64, 64-bit): rustup target add aarch64-unknown-linux-gnu
    • For ARMv7: sudo apt install gcc-arm-linux-gnueabihf
    • For ARMv8 (ARM64): sudo apt install gcc-aarch64-linux-gnu
  1. [target.armv7-unknown-linux-gnueabihf]
    linker = "arm-linux-gnueabihf-gcc"
    [target.aarch64-unknown-linux-gnu]
    linker = "aarch64-linux-gnu-gcc"
    • For ARMv7: sudo dpkg --add-architecture armhf
    • For ARMv8 (ARM64): sudo dpkg --add-architecture arm64
  2. On Debian, this step should not be necessary, but on other distributions, you might need to edit /etc/apt/sources.list to include the ARM architecture variant. For example on Ubuntu 22.04 add these lines to the bottom of the file (Remember to replace jammy with the codename of your Ubuntu version):

    deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy main restricted
    deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-updates main restricted
    deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy universe
    deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-updates universe
    deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy multiverse
    deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-updates multiverse
    deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-backports main restricted universe multiverse
    deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-security main restricted
    deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-security universe
    deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-security multiverse

    Then, to prevent issues with the main packages, you have to add the correct main architecture to all other lines the file contained beforehand. For standard 64-bit systems you need to add [arch=amd64], the full file on Ubuntu 22.04 then looks similar to this:

    • For ARMv7: sudo apt install libwebkit2gtk-4.1-dev:armhf
    • For ARMv8 (ARM64): sudo apt install libwebkit2gtk-4.1-dev:arm64
  3. This is not always required so you may want to proceed first and check if you see errors like Failed to find OpenSSL development headers.

    • Either install the development headers system-wide:
      • For ARMv7: sudo apt install libssl-dev:armhf
      • For ARMv8 (ARM64): sudo apt install libssl-dev:arm64
    • Or enable the vendor feature for the OpenSSL Rust crate which will affect all other Rust dependencies using the same minor version. You can do so by adding this to the dependencies section in your Cargo.toml file:
    openssl-sys = {version = "0.9", features = ["vendored"]}
    • For ARMv7: export PKG_CONFIG_SYSROOT_DIR=/usr/arm-linux-gnueabihf/
    • For ARMv8 (ARM64): export PKG_CONFIG_SYSROOT_DIR=/usr/aarch64-linux-gnu/
    • For ARMv7: cargo tauri build —target armv7-unknown-linux-gnueabihf
    • For ARMv8 (ARM64): cargo tauri build —target aarch64-unknown-linux-gnu

    Choose the appropriate set of instructions based on whether you want to cross-compile your Tauri application for ARMv7 or ARMv8 (ARM64). Please note that the specific steps may vary depending on your Linux distribution and setup.


© 2025 Tauri Contributors. CC-BY / MIT