A shepherd for your Appimages.
0

Configure Feed

Select the types of activity you want to include in your feed.

Go 97.3%
Nix 1.4%
Shell 0.7%
Just 0.4%
Other 0.2%
104 1 0

Clone this repository

https://tangled.org/aly.codes/appherder https://tangled.org/did:plc:dnzn6t3scwrj6k4zkff7am5b
git@tangled.org:aly.codes/appherder git@tangled.org:did:plc:dnzn6t3scwrj6k4zkff7am5b

For self-hosted knots, clone URLs may differ based on your setup.



README.md

CI License: GPL v3 Ko-fi

AppHerder

A shepherd for your AppImages.

AppHerder automatically installs, removes, and upgrades your AppImages. Throw them in ~/AppImages and AppHerder does the rest: apps appear in your menu, deleted apps disappear, and supported apps update in place.

Features#

  • Set it and forget it. Watches ~/AppImages and checks for updates in the background.
  • Real apps. Installed AppImages show up natively in your application menu.
  • In-place upgrades. New versions seemlessly replace old ones.
  • Verified updates. Pins the publisher's signing key on first install, then refuses tampered updates.
  • Quick rollbacks. Bad update? Put the old version back instantly.
  • Stays out of the way. Only touches launchers it creates. Your other apps are safe.

Installation#

Quick install#

curl -sSL https://raw.githubusercontent.com/alyraffauf/appherder/main/scripts/install.sh | bash

This downloads the latest AppImage, installs it, and enables automatic sync and upgrades.

Download a binary#

Grab appherder-linux-amd64 from the latest release, then:

chmod +x appherder-linux-amd64
sudo mv appherder-linux-amd64 /usr/local/bin/appherder

AppImage#

Download the .AppImage from the latest release, then:

chmod +x appherder-*-x86_64.AppImage
./appherder-*-x86_64.AppImage install ./appherder-*-x86_64.AppImage
appherder autosync # Watch ~/AppImages
appherder autoupgrade # Enable automatic app upgrades

The install step copies it into ~/AppImages and links it to ~/.local/bin/appherder automatically. You may need to restart your terminal or run export PATH="$HOME/.local/bin:$PATH" for the app to be found.

Nix flake#

nix run github:alyraffauf/appherder

Or nix profile install github:alyraffauf/appherder to keep it around.

Build from source#

Requires Go 1.25+.

git clone https://github.com/alyraffauf/appherder.git
cd appherder
go build ./cmd/appherder

Usage#

Enable automatic sync and upgrades:

appherder autosync             # sync whenever ~/AppImages changes
appherder autoupgrade          # check for updates once a day

Then use ~/AppImages like the place AppImages belong. Add a file and it gets a launcher. Remove a file and its launcher goes away. When an update is available, appherder installs it in-place (no app restarts needed).

Install an app from a file or URL:

appherder install ~/Downloads/Foo-x86_64.AppImage
appherder install https://example.com/Foo.AppImage

See what you have, remove what you don't want:

appherder list
appherder uninstall foo

Put an app on your PATH so you can launch it from a terminal:

appherder link foo              # creates ~/.local/bin/foo symlink
appherder unlink foo            # removes it

Uninstall cleans up the symlink automatically.

Installing copies the AppImage into ~/AppImages. That folder is the source of truth: add or remove files there and appherder sync matches your launchers to it.

appherder sync

Keep things up to date:

appherder upgrade              # download and install available updates
appherder upgrade --check      # just see what's out of date

Undo a bad update:

appherder rollback foo         # restore the last version
appherder rollback foo 1.2.3   # or restore a specific saved version

AppHerder keeps the last few versions of each app and saves the current one whenever an install or upgrade replaces it.

Coming from another AppImage tool? appherder migrate adopts the apps in ~/AppImages and manages them for you.

Verified updates#

Some AppImages are signed by their publisher. The first time AppHerder installs a signed app, it pins that signing key. From then on, every update must be signed by the same key: an unsigned, tampered, or differently-signed build is refused. Changing the trusted key is deliberate, so swapping publishers means uninstalling and reinstalling. Apps that aren't signed keep working as before; the pin only takes effect once a real signature has been seen.

appherder list shows each app's status in the SIGNATURE column: pinned (key locked in), signed (carries a signature appherder hasn't pinned yet), or none.

Configuration#

AppHerder's directories and update sources can be customized via ~/.config/appherder/config.toml. See Configuration for all options.

Under the hood#

AppHerder reads the AppImage's filesystem to grab its icon and desktop entry. SquashFS images are parsed in-process. DwarFS images require dwarfsextract; the AppHerder CLI AppImage bundles it, while native and source installs need dwarfsextract available on PATH. AppHerder does not automatically fall back to --appimage-extract, because that executes the AppImage runtime. Everything it writes is tagged, so uninstall and sync only touch its own files.

License#

GPLv3.