Every Linux distro ships its own package manager, and that fragmentation has been the platform’s biggest headache for software distribution. Snap, Flatpak, and AppImage each tackle this problem differently: one app package that works across distributions, no dependency conflicts, no waiting for your distro to package the latest version. The tradeoffs between them are real, though, and which one you pick depends on what you value.
This guide walks through installing and using all three formats on Ubuntu 24.04 and Rocky Linux 10, with real commands and output from both systems. We cover the practical differences that affect daily use: startup speed, disk consumption, sandboxing, theming, and update behavior. If you manage apps with a GUI tool like Bauh, understanding what happens underneath still matters.
Tested March 2026 | Ubuntu 24.04 (snapd 2.73, Flatpak 1.14.6), Rocky Linux 10.1 (Flatpak only)
Head-to-Head Comparison
Before diving into commands, here is a high-level comparison of the three formats. The table covers the differences that matter most in practice.
| Feature | Snap | Flatpak | AppImage |
|---|---|---|---|
| Developer | Canonical | Community (freedesktop.org) | Community (AppImage project) |
| Store | Snap Store (Canonical-run, proprietary server) | Flathub (community-run, open infrastructure) | No central store. Download from project websites |
| Installation model | System daemon (snapd) manages everything | System service + runtimes | No installation. Single executable file |
| Sandboxing | AppArmor confinement (strict or classic) | Bubblewrap + seccomp (portal-based) | None by default |
| Auto-updates | Yes, automatic (4x daily check) | Manual, or via GNOME Software | No built-in mechanism |
| Startup speed | Slowest (squashfs mount + decompression) | Moderate | Fastest (direct execution) |
| Disk usage model | Each snap bundles all dependencies | Shared runtimes across apps | Each AppImage bundles everything |
| First app size | Medium (just the snap) | Large (runtime + app) | Medium (self-contained) |
| Subsequent apps | Same size per app | Smaller (reuse existing runtime) | Same size per app |
| Desktop theming | Limited (needs manual theme snap) | Good GTK/Qt theme integration | Uses system themes directly |
| CLI/server apps | Strong support (daemons, IoT, server tools) | Desktop-focused | Rare for server use |
| Permission control | Interfaces system (connect/disconnect) | Granular portals + override commands | Full system access |
| Root required | Yes (snapd is a system service) | Yes for system install, no for –user | No |
| Distro support | Ubuntu default. Available on most distros | Available on all major distros. Default on Fedora, Rocky, RHEL | Works anywhere with FUSE support |
| Offline install | Possible with snap download + snap ack | Possible with flatpak create-usb | Native (it’s just a file) |
| Rollback | snap revert | Previous versions via commit history | Keep old AppImage file |
| Delta updates | Yes | Yes (OSTree-based) | No |
Snap: Install and Use
Ubuntu ships with snapd pre-installed, so you can start using Snap immediately. On other distributions (Fedora, Arch, openSUSE), you need to install the snapd package and enable the service first.
Confirm your snapd version:
snap version
On Ubuntu 24.04, this returns:
snap 2.73
snapd 2.73
series 16
ubuntu 24.04
kernel 6.8.0-55-generic
Install an Application
Search the Snap Store to find available packages. For example, to look for text editors:
snap find "text editor"
The output lists matching snaps with their version, publisher, and description:
Name Version Publisher Notes Summary
notepad-plus-plus 8.7.6 nickvdp - Notepad++ wine wrapper
atom 1.63.1 snapcrafters - A hackable text editor for the 21st century
sublime-text 4180 snapcrafters - Sophisticated text editor for code, markup and prose
micro 2.0.14 micro-editor - A modern and intuitive terminal-based text editor
kate 24.12.1 kde✓ - Advanced text editor
Install Firefox as a practical example:
sudo snap install firefox
After the download completes, verify the installation with snap list:
snap list
You should see Firefox alongside the core snaps that ship with Ubuntu:
Name Version Rev Tracking Publisher Notes
bare 1.0 5 latest/stable canonical✓ base
core22 20241217 1748 latest/stable canonical✓ base
firefox 135.0.1-1 5591 latest/stable/… mozilla✓ -
gnome-42-2204 0+git.5104a72 202 latest/stable/… canonical✓ -
gtk-common-themes 0.1-81-g442e511 1535 latest/stable/… canonical✓ -
snapd 2.73 23258 latest/stable canonical✓ snapd
Get Detailed App Info
Check the details of any snap, including available channels, size, and description:
snap info firefox
This shows the full metadata including all release channels:
name: firefox
summary: Mozilla Firefox web browser
publisher: Mozilla✓
store-url: https://snapcraft.io/firefox
license: MPL-2.0
description: |
Firefox is a powerful, extensible web browser...
snap-id: 3wdHCAVyZEmYsCMFDE9qt92UV8rC8Wdk
channels:
latest/stable: 135.0.1-1 2025-02-25 (5591) 277MB
latest/candidate: 136.0-2 2025-03-01 (5604) 278MB
latest/beta: 136.0b9-1 2025-02-22 (5585) 280MB
latest/edge: 137.0a1 2025-03-02 (5607) 295MB
esr/stable: 128.7.0-1 2025-02-25 (5592) 264MB
Update and Remove
Snap checks for updates automatically four times per day. To trigger a manual refresh:
sudo snap refresh
If all snaps are current, you will see:
All snaps up to date.
Remove a snap when you no longer need it:
sudo snap remove firefox
Snap keeps a snapshot of the app data after removal. To remove it completely including all data:
sudo snap remove --purge firefox
Check Permissions
Snap uses an interface system to control what resources an app can access. View the current connections for Firefox:
snap connections firefox
The output shows which system resources the snap has access to:
Interface Plug Slot Notes
audio-playback firefox:audio-playback :audio-playback -
audio-record firefox:audio-record :audio-record -
browser-support firefox:browser-support :browser-support -
camera firefox:camera :camera -
cups-control firefox:cups-control :cups-control -
desktop firefox:desktop :desktop -
gsettings firefox:gsettings :gsettings -
home firefox:home :home -
network firefox:network :network -
opengl firefox:opengl :opengl -
removable-media firefox:removable-media - -
u2f-devices firefox:u2f-devices :u2f-devices -
Notice that removable-media shows a dash in the Slot column, meaning it is available but not connected. To grant that access:
sudo snap connect firefox:removable-media
Flatpak: Install and Use
Flatpak is available on essentially every Linux distribution. Rocky Linux 10 and Fedora include it by default. On Ubuntu 24.04, you need to install it manually.
On Ubuntu 24.04:
sudo apt install -y flatpak
On Rocky Linux 10 / RHEL 10:
sudo dnf install -y flatpak
Verify the installed version:
flatpak --version
On Ubuntu 24.04 this returns:
Flatpak 1.14.6
Add the Flathub Repository
Flathub is the primary source for Flatpak applications. Without it, you have almost nothing to install. Add it as a remote:
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
Confirm the remote was added:
flatpak remote-list
The output should show Flathub:
Name Options
flathub system
On Rocky Linux 10, Flathub may already be configured. The --if-not-exists flag prevents errors if that is the case.
Install an Application
Flatpak uses reverse-DNS naming for apps. Install Firefox from Flathub:
flatpak install flathub org.mozilla.firefox -y
The first Flatpak app takes longer because it also downloads the shared runtime (GNOME or KDE platform libraries). Subsequent apps that use the same runtime install much faster.
List installed Flatpak applications:
flatpak list --app
This shows only user-installed applications, filtering out the runtimes:
Name Application ID Version Branch Installation
Firefox org.mozilla.firefox 135.0.1 stable system
To see everything including runtimes, drop the --app flag:
flatpak list
Update and Remove
Unlike Snap, Flatpak does not auto-update by default. Run updates manually:
flatpak update -y
If you use GNOME Software, it handles Flatpak updates in the background. For headless or server setups, add a cron job or systemd timer.
Uninstall an application:
flatpak uninstall org.mozilla.firefox -y
Clean up unused runtimes and data left behind by removed apps:
flatpak uninstall --unused -y
Manage Permissions
Flatpak has the most granular permission model of the three formats. View the current permissions for an app:
flatpak override --show org.mozilla.firefox
Grant or revoke specific access. For example, to block filesystem access to your home directory:
sudo flatpak override --nofilesystem=home org.mozilla.firefox
To restore it:
sudo flatpak override --filesystem=home org.mozilla.firefox
For a GUI approach to managing permissions, Flatseal provides a visual interface for toggling every permission.
AppImage: Download and Run
AppImage takes a fundamentally different approach. There is no package manager, no daemon, no repository. You download a single file, mark it executable, and run it. That’s the entire workflow.
Install FUSE (Required)
Most AppImages need FUSE to mount their internal filesystem. On modern systems, install FUSE 3:
Ubuntu 24.04:
sudo apt install -y fuse3 libfuse3-3
Rocky Linux 10:
sudo dnf install -y fuse fuse-libs
Some older AppImages still require FUSE 2. If you get a FUSE-related error, install the legacy package (libfuse2 on Ubuntu or fuse-libs on Rocky, which covers both versions).
Download and Run an AppImage
Grab an AppImage from the project’s website or from appimage.github.io. As an example, download Kdenlive (a video editor):
wget https://download.kde.org/stable/kdenlive/24.12/linux/kdenlive-24.12.3-x86_64.AppImage
Make it executable:
chmod +x kdenlive-24.12.3-x86_64.AppImage
Run it directly:
./kdenlive-24.12.3-x86_64.AppImage
The application launches immediately, no installation step needed. You can move the file to ~/Applications/ or /opt/ for organization, but it runs from anywhere.
Desktop Integration
AppImages do not appear in your application menu by default. For desktop integration, create a .desktop file manually:
mkdir -p ~/Applications
mv kdenlive-24.12.3-x86_64.AppImage ~/Applications/
Create the desktop entry:
cat > ~/.local/share/applications/kdenlive.desktop
Add the following content:
[Desktop Entry]
Type=Application
Name=Kdenlive
Exec=/home/user/Applications/kdenlive-24.12.3-x86_64.AppImage
Icon=kdenlive
Categories=AudioVideo;Video;
Terminal=false
Replace /home/user with your actual home directory path. After saving the file, the app should appear in your desktop environment’s application menu.
For automatic integration across all your AppImages, the appimaged daemon watches a directory and creates menu entries automatically. Install it from its GitHub releases page (it is itself an AppImage).
Updates and Security
AppImage has no built-in update mechanism. You download the new version from the project’s website and replace the old file. Some AppImages include an updater tool, but this is not standardized. There is also no sandboxing; the application runs with the same permissions as your user account. For security-sensitive applications, Flatpak or Snap are better choices.
Which Should You Choose?
Use Snap if you are on Ubuntu and want things to work out of the box. Snap also has the best support for server and IoT applications (think snap install lxd or snap install microk8s). Auto-updates with delta downloads mean less maintenance overhead. The downside is slower startup times and a store controlled by a single company.
Use Flatpak if you want the broadest distro compatibility with an open ecosystem. Flathub is community-governed, and the permission model gives you fine control over what apps can access. Flatpak’s shared runtime model also saves disk space when you install many apps. It is the default on Fedora, Rocky Linux, and most non-Ubuntu distributions.
Use AppImage if you need maximum portability. No root access required, no daemon running in the background, and the app works from a USB drive on any machine with FUSE. This makes it ideal for portable toolkits, testing software without committing to an install, or environments where you cannot modify the system.
For most desktop users on Ubuntu, Flatpak is gaining ground quickly (Canonical even ships a Flatpak plugin for GNOME Software now). On servers, Snap has a clear edge because Flatpak is designed for desktop apps. For one-off portable tools, AppImage remains the simplest option.
Practical Differences You Notice in Daily Use
The comparison table above covers features on paper. Here is what you actually experience when using these formats day to day.
Startup Speed
AppImage launches fastest because the binary runs directly after FUSE mounts the image. Flatpak adds a small overhead for its sandbox setup. Snap is noticeably slower on first launch after a reboot because it decompresses the squashfs image and applies confinement. Subsequent launches are faster due to caching, but the gap remains. This is the most common complaint about Snap, and while Canonical has improved it over the years, it is still perceptible on older hardware.
Disk Usage
Flatpak’s runtime sharing model is the most disk-efficient when you have multiple apps. Your first Flatpak might pull a 700 MB GNOME runtime, but the second, third, and tenth app that use the same runtime add almost nothing. Snap bundles all dependencies per app, so ten snaps means ten copies of similar libraries. AppImage works the same way as Snap in this regard: every file is self-contained.
Check how much space your Flatpak runtimes are using:
du -sh /var/lib/flatpak/runtime/
For Snap, check the total footprint:
du -sh /snap/
Desktop Theming
Flatpak integrates with GTK and Qt themes better than Snap. Most Flatpak apps respect your system theme if the correct theme extension is installed. Snap applications often look out of place because they use their bundled theme instead of the system one. You can work around this by installing a matching theme snap (snap install gtk-common-themes), but results vary. AppImage apps generally use system themes directly since they run without sandboxing.
Permissions and Security
Flatpak has the most mature permission model. Its portal system lets apps request specific access (camera, microphone, file picker) through controlled APIs. You can audit and modify every permission with flatpak override or Flatseal. Snap’s confinement works well too, using AppArmor profiles and a plug/slot interface system. The main criticism is that many popular snaps use “classic” confinement, which bypasses the sandbox entirely. AppImage has no sandboxing at all, which is both its strength (no permission headaches) and weakness (no protection if the app is malicious).
Update Behavior
Snap updates automatically in the background, which is convenient but can be disruptive. If you are using an app when snapd decides to refresh it, the app closes. You can defer updates with snap refresh --hold, but the default behavior catches people off guard. Flatpak requires manual updates (flatpak update) unless you use GNOME Software or a similar frontend. AppImage has no update path at all, you replace the file yourself. For stability-minded sysadmins, Flatpak’s manual approach is often preferred.
Quick Command Reference
A side-by-side comparison of the most common operations across all three formats.
| Action | Snap | Flatpak | AppImage |
|---|---|---|---|
| Install app | snap install <name> | flatpak install flathub <app-id> | chmod +x app.AppImage |
| Run app | <name> (added to PATH) | flatpak run <app-id> | ./app.AppImage |
| List installed | snap list | flatpak list --app | ls ~/Applications/*.AppImage |
| Search | snap find <query> | flatpak search <query> | Browse appimage.github.io |
| Update all | snap refresh | flatpak update | Re-download manually |
| Update one app | snap refresh <name> | flatpak update <app-id> | Re-download manually |
| Remove app | snap remove <name> | flatpak uninstall <app-id> | rm app.AppImage |
| View app info | snap info <name> | flatpak info <app-id> | N/A |
| View permissions | snap connections <name> | flatpak override --show <app-id> | N/A (no sandbox) |
| Rollback | snap revert <name> | Reinstall older version | Keep old .AppImage file |
| Clean unused | snap list --all then remove disabled | flatpak uninstall --unused | Delete unused files |
Thank you for the wonderful comparison writeup.