Install, update and archive apps from GitHub releases — the Arch way.
A small GTK4 update manager for Arch Linux (CachyOS, EndeavourOS, Manjaro …) that keeps apps published as GitHub releases installed and up to date — as real pacman packages or as AppImages — and keeps the last few versions in an offline archive, so you can install or roll back without a network. Ships with the Idus apps and the Craft App Suite (PhotoCraft, VectorCraft, FilmCraft …) as default repositories; add any other repository you like.
sudo pacman -S --needed python-gobject gtk4 base-devel && bash <(curl -fsSL https://github.com/Idus/idus-github-updater/releases/latest/download/install-idus-github-updater.sh)Then open Idus GitHub Updater from the menu and install the rest from there. Want to read the script first? See Install.
Lots of good software lives only on GitHub's release pages. You download a file, remember to check back, download again, and when a new version breaks something the old file is long gone. Idus GitHub Updater checks for you, installs the right build for your CPU in the format you choose, verifies every file against the published SHA-256 checksums, and keeps an archive of the last versions on disk — or on your NAS — for offline installs and rollbacks.
- Arch Linux or an Arch-based distro, KDE Plasma 6 recommended (any desktop works)
- Python + GTK4 bindings:
sudo pacman -S --needed python-gobject gtk4 - For the pacman format:
sudo pacman -S --needed base-devel(makepkg + fakeroot) - Optional:
ksshaskpass(password prompt that sudo remembers for a few minutes — part of Plasma),libnotify(desktop notifications),fuse2(some AppImages need it to start)
The one-liner above installs the dependencies and the latest release.
It runs install-idus-github-updater.sh from the latest release, which then fetches the app
itself — the same script you get in the release.
Prefer to read before you run? Download the three files from Releases,
put them in one folder and run bash install-idus-github-updater.sh.
- Launch from the menu ("Idus GitHub Updater") or the terminal (
idus-github-updater). - Right-click the menu entry for Check for updates, Update all and Sync offline archive — the result arrives as a desktop notification.
- Re-running the installer updates the app and keeps your settings.
- New icon not showing? Log out/in — the KDE icon cache is stubborn.
The list starts with these. Nothing is installed until you press Install — and anything you don't want can go: ⋯ › Hide keeps it out of sight (Settings › Show hidden repositories brings it back), ⋯ › Remove from list… takes it off, and Settings › Restore default repositories puts removed ones back. Add any other repository with Add repository….
Idus apps
| App | What it is |
|---|---|
| Idus GitHub Updater | This app — it keeps itself up to date too |
| Idus SC Toolbox | One-click fixes for Star Citizen on Linux (LUG Helper companion) |
| Idus Elgato Light | Elgato Key Light, Ring Light and Light Strip control on Linux, with OpenDeck shortcuts |
| Idus HW-player | Random Halloween videos on a Raspberry Pi + projector — archive only here |
Craft App Suite — free, open-source creative apps from the ArtCraft team
| App | What it is | App | What it is |
|---|---|---|---|
| PhotoCraft | Image editing, layers, PSD | WordCraft | Word processing |
| LightCraft | Photo library and raw development | DeckCraft | Presentations |
| FilmCraft | Video editing, colour and sound | GridCraft | Spreadsheets |
| DesignCraft | Page layout and publishing | CADCraft | Computer-aided design |
| VectorCraft | Vector illustration | SoundCraft | Audio recording and editing |
| PdfCraft | Reading, organising and protecting PDFs | FigCraft | Interface design and prototyping |
| EffectCraft | Motion graphics and visual effects |
Idus apps use the Idus installer format: the release's own files (<app>.py, <app>.png, install-<app>.sh) are downloaded,
checked against their SHA-256 and install-<app>.sh is run as you (no root), exactly as if you
had downloaded the three files yourself. The installed version is read from the app itself
(APP_VERSION in ~/.local/share/<app>/<app>.py), so apps you installed by hand are recognised.
- The updater can update itself — restart it afterwards. It won't uninstall itself.
- Idus HW-player runs on a Raspberry Pi, so here it is archive only: the archive keeps its files for the Pi, nothing is installed on this machine.
- Uninstalling an Idus app removes its folder in
~/.local/share— including its settings.
| Format | What happens | Good to know |
|---|---|---|
| pacman (default) | The release tarball is wrapped in a real pacman package with makepkg (igu-<name>), then installed with pacman -U |
pacman owns every file, so it updates and uninstalls cleanly and shows up in pacman -Q. Asks for your password — see Passwords. Dependencies are worked out from the libraries the program uses. If a release ships a ready .pkg.tar.zst, that is used directly. |
| AppImage | The AppImage goes to ~/AppImages with a menu entry and icon |
No root, one file per app. Some AppImages need fuse2. |
Packages are named igu-<name> (Idus GitHub Updater), so they never clash with an AUR
package of the same name — and paru/yay won't try to "update" them from the AUR.
They provide and conflict with the plain name, so pacman tells you if the same app is
also installed from the AUR.
How the tarball becomes a package:
| Tarball contains | Installed as |
|---|---|
bin/, share/ … (like the Craft apps) |
/usr/bin, /usr/share … |
usr/ |
as is (lib64 → lib, sbin → bin) |
| anything else | /opt/igu-<name>/ + a link in /usr/bin |
The generated PKGBUILD stays in ~/.cache/idus-github-updater/build/ if you want to read it.
| Channel | Installs |
|---|---|
| Stable | the newest release not marked as a pre-release |
| Latest | the newest release, including alpha / beta / rc |
| Pinned | one version, until you change it (⋯ › Install another version › Install & pin) |
A release counts as a pre-release if GitHub marks it so or its tag says so
(alpha, beta, rc, pre, preview, dev, nightly, canary, snapshot).
Tick Archive on an app and the last versions are kept in ~/GitHub-archive
(changeable in Settings — point it at a NAS mount if you like), one folder per app and platform:
~/GitHub-archive/
└── PhotoCraft/
├── Linux/
│ ├── v0.1.0/
│ │ ├── photocraft-0.1.0-linux-x86_64.tar.gz
│ │ ├── SHA256SUMS
│ │ └── release.json ← tag, date, release notes
│ └── v0.1.1-rc.4/ …
├── Windows/ ← optional, Settings › Also archive
│ └── v0.1.0/photocraft-0.1.0-windows-x64.msi …
└── macOS/ …
The app folder takes the app's name (PhotoCraft (owner) only if two apps share a name).
Archives from v1.0 (<owner>/<repo>/<version>/) are moved into this layout automatically.
- Keep sets how many versions per app (3 by default, 1–50 per app). The newest stable, a pinned version and the installed version are always kept on top of that.
- Old versions are pruned automatically; folders the app didn't create are never touched.
- Installs always use the archive first, so archived versions install without a network,
and every archived file is re-checked against
SHA256SUMSbefore it's used. (A sync only compares sizes, so it doesn't re-read a whole NAS each time.) - Also archive (Settings) adds the other Linux format, Windows x64 and/or macOS installers — handy for offline installs on other machines.
Each row looks for the same app installed outside the updater — a pacman/AUR package
(photocraft, photocraft-bin …, or whatever owns /usr/bin/photocraft), a Flatpak
(ai.storyteller.photocraft — how ArtCraft Launcher installs apps when Flatpak is present),
a loose AppImage (~/Applications, ~/AppImages, ~/.local/bin) or ArtCraft Launcher's own
sandbox. If you then install with the updater you'd have two copies, and the menu may start
the old one — the row says so (⚠ two copies) and ⋯ › Remove the other install… removes
the other copy (and its menu entry) after showing you exactly what goes.
pacman needs root. From the window and the menu actions the updater asks through sudo with
a graphical prompt (ksshaskpass on KDE), so sudo's normal memory applies: several installs
within a few minutes (Arch default: 5) ask once. Update all puts every pacman package in
one pacman -U anyway. Without ksshaskpass (or with sudo-rs, or if you're not in sudoers)
it falls back to the polkit dialog, which asks every time. In a terminal it's plain sudo.
Making pacman password-free (a polkit rule or NOPASSWD in sudoers) is possible but means
anything running as you can install anything as root — the updater deliberately doesn't offer it.
The AppImage format needs no password at all.
- Every download is checked against the published SHA-256 — GitHub's own asset digest, a
SHA256SUMS-style file and/or<file>.sha256. When several exist they must agree. Files without a published checksum are refused unless you allow it in Settings. - Downloads resume where they stopped and are only kept once they verify.
- The optional GitHub token is only ever sent to
api.github.com, never to download hosts, and is stored in the settings file with mode 600.GITHUB_TOKENin the environment works too. - A running app is never replaced — close it first.
| Where | Button | Action |
|---|---|---|
| Row | Install / Update / Switch | Installs the channel's version (Switch: pinned version or new format) |
| Channel · Format · Archive · Keep | Per-app settings, saved at once | |
| ⋯ › Release notes | Notes of the latest releases | |
| ⋯ › Install another version… | Any known version — archived ones (📦) offline. Install & pin stays there | |
| Repository name (under the app name) | Opens the repository on GitHub in your browser | |
| ⋯ › Open on GitHub / Open archive folder | Straight to the releases page / the app's archive folder | |
| ⋯ › Delete archived files… / Uninstall… | The archive and the install are separate — removing one keeps the other | |
| ⋯ › Remove the other install… | Removes a copy installed another way (Flatpak, AUR, loose AppImage); yours stays | |
| ⋯ › Hide / Remove from list… | Hide keeps the app's settings; Remove takes it off the list | |
| Actions | Check for updates | Asks GitHub for new releases (and syncs the archive if that's on) |
| Update all | Installs every update — all pacman packages in one password prompt | |
| Sync archive | Downloads missing archive versions, prunes old ones | |
| Add repository… | owner/repo or any github.com link |
|
| Settings… | Folders, versions to keep, what to archive, checks, notifications, token |
The filter at the top shows All · Installed · Updates · Archived · Not installed.
Every action has a flag, for KDE global shortcuts or a Stream Deck:
idus-github-updater --check | --list | --sync | --update-all \
--install REPO [--tag TAG] [--format pacman|appimage] [--pin] \
--uninstall REPO | --remove-other REPO \
--add OWNER/REPO [--name NAME] | --remove REPO \
[--offline] [--notify]REPO is owner/repo, the repository name or the display name (photocraft, PhotoCraft).
- Arch only for the pacman format. AppImages work on any distro, but the app is built and tested for Arch.
- The Craft apps are young (pre-1.0 at the time of writing) and move fast; some have no stable release yet — switch those to Latest if you want the pre-releases.
- AppImageLauncher users: keep the AppImage folder away from
~/Applications, or AppImageLauncher adds a second menu entry for every app. - Rate limits: without a token GitHub allows 60 API requests an hour; a check uses one per repository, and unchanged answers are cached. Add a token in Settings if you track many repositories.
- Only public repositories. Updates are checked when the app is open (on start, and hourly if you turn that on) or from the CLI / menu actions — there is no background service.
- The app's own settings and install records live next to it in
~/.local/share/idus-github-updater; the log is in~/.cache/idus-github-updater/. - Not affiliated with GitHub or the ArtCraft team. Use at your own risk.
Remove the apps first if you want them gone (they're normal packages / files):
pacman -Qq | grep '^igu-' # what the updater installed with pacman
sudo pacman -R $(pacman -Qq | grep '^igu-')Then the updater itself:
rm -f ~/.local/bin/idus-github-updater ~/.local/share/applications/idus-github-updater.desktop
rm -rf ~/.local/share/idus-github-updater ~/.cache/idus-github-updater
rm -f ~/.local/share/icons/hicolor/512x512/apps/idus-github-updater.pngThe offline archive (~/GitHub-archive) is yours to keep or delete.
Made by Idus. If this saved you time, buy me a coffee:
MIT — see LICENSE.
