Manage your AppImages inside your user environment — no root required.
The tool tracks installed AppImages and lets you list, update, and remove them afterwards. See how it works.
It ships with two frontends that share the same core logic:
appimage-manager-tui.sh— an interactive TUI (powered by gum) for installing, listing, and uninstalling AppImages.appimage-manager.sh— a scriptable command-line interface.
- No root — writes only to your user directories.
- App menu integration — generates a freedesktop-compliant
.desktoplauncher. - Icon support — uses a provided icon, or extracts one from the AppImage when possible.
- Full lifecycle — install, list, update, and uninstall AppImages.
- Safe defaults — validates inputs, handles spaces, and avoids destructive changes unless
--forceis used. - Smart launcher — the generated wrapper detects a missing
libfuse2and auto-falls-back to--no-sandboxif the first launch fails (helps on Ubuntu 24.04). - Self-contained distribution —
make bundleinlines the library so each entrypoint can be shipped as a single file.
- Linux desktop with a freedesktop-compatible menu, i.e., through XDG Desktop Portal.
- Bash 4+.
gum(required for the TUI; not needed for the CLI). Both gum 2.x and older builds such as 0.16 (Fedora 43) work: picker padding is applied only when the running gum supports it.- Optional:
fileas a fallback for icon type detection (usually preinstalled; the type is normally determined from the filename or content magic bytes). - Development only:
shellcheckandshfmt(formake test/make fmt).
git clone https://github.com/brunomnsilva/appimage-manager
cd appimage-manager
make installmake install bundles the library and copies both commands into
~/.local/bin (override with make install PREFIX=/usr/local). Ensure that
directory is on your PATH, then run appimage-manager-tui or
appimage-manager. Remove them again with make uninstall.
Prefer not to build? Download the prebuilt appimage-manager and
appimage-manager-tui from the
latest release and
drop them in a directory on your PATH.
appimage-manager.sh # CLI entrypoint
appimage-manager-tui.sh # TUI entrypoint (gum)
lib/core.sh # shared library (no side effects)
scripts/build.sh # bundles lib/core.sh into dist/ entrypoints
Makefile # bundle / test / lint / fmt / install / uninstall / clean
tests/run-tests.sh # headless test harness
Run directly from a clone (without installing):
chmod +x appimage-manager-tui.sh
./appimage-manager-tui.shThe TUI walks you through an install, or lets you list and uninstall existing apps from the main menu.
chmod +x appimage-manager.sh
./appimage-manager.sh ~/Downloads/Obsidian.AppImageThis copies the AppImage to ~/Applications/, writes
~/.local/share/applications/<slug>.desktop, and installs an icon when one can
be extracted.
If you ran make install, use the installed commands instead:
appimage-manager-tui and appimage-manager.
The main menu offers:
- Install an AppImage — file picker, then prompts for name, comment,
category, MIME types, launch args, and icon. A valid AppImage is extracted
once and its bundled
.desktopis read to prefill name, comment, categories, and MIME types as suggestions you can edit. If the payload bundles an icon, the icon step offers Auto-extract (icon is bundled); otherwise it warns that no icon is bundled and offers a custom icon or none. A file that is not a valid AppImage (e.g. a standalone binary such as Winbox) triggers a warning and offers to install it anyway; inspection is skipped. - List installed — shows a table of installed apps (name, path, status).
- Update an AppImage — pick an installed app and a newer AppImage; the payload is replaced in place, keeping the name, menu entry, launch flags, and icon (or choose a new icon). A warning reminds you to back up the current file first.
- Uninstall — select an app and confirm removal.
- Help — brief description.
- Exit — quit.
The installer presents a single-select list of common freedesktop categories
(Utility, Development, Office, Graphics, AudioVideo, Network,
Game, Education, Science, System) plus Custom… for free-form input.
Instead of typing flags, pick from common presets (multi-select) or choose Custom…:
| Preset | Value |
|---|---|
--no-sandbox |
--no-sandbox |
--disable-gpu |
--disable-gpu |
--disable-dev-shm-usage |
--disable-dev-shm-usage |
| Wayland (auto) | --ozone-platform-hint=auto |
| Wayland (native) | --enable-features=UseOzonePlatform,WaylandWindowDecorations --ozone-platform-hint=auto |
| Option | Description |
|---|---|
--name NAME |
Display name and base filename (default: from the AppImage filename) |
--categories CATS |
Desktop menu categories (default: Utility;) |
--mime-types TYPES |
Semicolon-separated MIME types the app handles (e.g. image/png;text/plain;), written to MimeType= |
--comment TEXT |
One-line description for the launcher |
--icon PATH |
Custom icon file (.png or .svg) |
--exec-args ARGS |
Extra args appended to the launch (e.g. --no-sandbox) |
--force |
Overwrite existing AppImage, desktop entry, and icon |
--skip-validation |
Install/update a file even if it is not a valid AppImage (e.g. a standalone binary); icon auto-extraction is skipped |
--list, -l |
List installed AppImages and exit |
--update TARGET |
Replace an installed app's AppImage (TARGET is its slug or display name); the positional path is the new file |
-h, --help |
Show usage |
# Basic install
./appimage-manager.sh ~/Downloads/Obsidian-1.5.3.AppImage
# Custom name and icon
./appimage-manager.sh --name "Obsidian" --icon ~/Pictures/obsidian.svg ~/Downloads/Obsidian.AppImage
# Chromium-based app that needs --no-sandbox
./appimage-manager.sh --name "Brave" --exec-args "--no-sandbox" ~/Downloads/Brave.AppImage
# Overwrite an existing install
./appimage-manager.sh --force ~/Downloads/Foo.AppImage
# List installed AppImages
./appimage-manager.sh --list
# Update an installed app with a newer AppImage (keeps its menu entry and icon)
./appimage-manager.sh --update Obsidian ~/Downloads/Obsidian-1.6.0.AppImage
# Update and replace its icon
./appimage-manager.sh --update Obsidian --icon ~/Pictures/obsidian.svg ~/Downloads/Obsidian-1.6.0.AppImage
# Install a standalone binary (not a real AppImage), e.g. Winbox
./appimage-manager.sh --skip-validation --name "Winbox" --icon ~/Pictures/winbox.png ~/Downloads/winbox- Copies the AppImage to
~/Applications/and ensures it is executable. - Tries to extract an icon by running the AppImage with
--appimage-extractand searching common icon paths; the type is determined from the filename or content (symlinked.DirIcons included), and the icon is placed in the right hicolor bucket: SVG inscalable/apps, raster in256x256/apps. Raster icons keep the 256x256 bucket regardless of their real pixel size (desktops scale them). If no icon is found, the AppImage path is used as a fallback. - Writes a small launcher wrapper to
~/.local/bin/that:- sets
APPIMAGE_EXTRACT_AND_RUN=1whenlibfuse.so.2is missing, and - retries with
--no-sandboxif the normal launch fails.
- sets
- Writes a
.desktopentry that references the wrapper, setsPath=to~/Applications, passes%Uso file/URL arguments work from the menu, and includesMimeType=when MIME types were provided (the TUI prefills these from the AppImage's own bundled.desktop). - Records the install in a registry so the TUI can list and uninstall it.
- Refreshes the desktop caches (
gtk-update-icon-cacheandupdate-desktop-database, when available) so the entry and icon appear without re-logging in. Some desktops (e.g. Fedora) rely on the icon cache while others (e.g. Arch) pick icons up automatically; running both is harmless. The same refresh runs after updates and uninstalls.
Installed apps are tracked in:
${XDG_DATA_HOME:-$HOME/.local/share}/appimage-manager/registry.tsv
Each row stores the slug, name, AppImage path, desktop path, icon path, and
wrapper path. Apps installed before the registry existed are still detected by
scanning ~/Applications/*.AppImage and shown as "legacy".
make bundle inlines lib/core.sh into each entrypoint, producing
self-contained single files (no .sh extension, so they read as commands):
dist/appimage-manager
dist/appimage-manager-tui
To install them (~/.local/bin by default, override with PREFIX), see
Installation. Bundling only, without installing, is just
make bundle.
This is automated in CI (.github/workflows/): every push and pull request
runs the tests and uploads dist/ as a workflow artifact, and pushing a v*
tag runs the same gates, writes dist/SHA256SUMS, and publishes both bundled
scripts as release assets:
git tag v1.0.0
git push origin v1.0.0A release can be re-run without moving the tag, either from the Actions UI (Release → Run workflow) or with:
gh workflow run release.yml -f tag=v1.0.0Re-running rebuilds the assets and updates the existing release in place.
You can find the latest built files in Releases.
make test # shellcheck + shfmt check + build + functional tests
make lint # shellcheck only
make fmt # shfmt (rewrite)
make clean # remove dist/The test suite is headless and runs against an isolated $HOME, using stub
AppImages so nothing touches your real environment.
Remove the installed files:
rm ~/Applications/<Name>.AppImage
rm ~/.local/share/applications/<slug>.desktop
rm ~/.local/bin/<slug>-appimage-launcher
rm ~/.local/share/icons/hicolor/256x256/apps/<slug>.png # or .svg, if presentThe TUI's Uninstall option does this automatically, including the cache refresh below. If you remove files manually, refresh the menu/caches yourself:
gtk-update-icon-cache -f -t ~/.local/share/icons/hicolor 2>/dev/null || true
update-desktop-database ~/.local/share/applications 2>/dev/null || true- App does not appear in the menu — confirm the
.desktopexists in~/.local/share/applications/, then log out/in (or reload the shell). VerifyCategoriesincludes a recognized category (e.g.Utility;). - Icon missing — provide one with
--icon path/to/icon.svg|png; some AppImages do not ship icons in standard locations. - Exec errors on launch — some sandboxed apps need extra flags; use
--exec-args "--no-sandbox"or the TUI presets. Confirm the AppImage has execute permissions.
On Ubuntu 24.04 and newer, some Electron/Chromium-based AppImages (Obsidian,
Brave, etc.) fail to launch from the menu even though they run from the file
manager. This is because Chromium's SUID sandbox helper is unavailable. The
generated launcher tries a normal launch first and then automatically retries
with --no-sandbox.
Warning:
--no-sandboxdisables Chromium's sandbox process isolation and reduces security. Whether that is acceptable is up to you.
Recommended: install libfuse2t64 (sudo apt install libfuse2t64) if
AppImages fail to run at all, and rely on the launcher's automatic fallback.
- Do not run untrusted AppImages.
- Writes only to user directories; no root required.
- All paths and variable expansions are quoted; the scripts use
set -Eeuo pipefailand defensive checks.
See LICENSE.
This application was heavily inspired in AppImage-Install and released under the same license.
