* fix(packaging): declare the launcher's real window class in its .desktop file (#1026)
The window sets its app id (Wayland) and WM_CLASS (X11) to
ai.storyteller.artcraft-launcher, but the entry said
StartupWMClass=artcraft-launcher. Desktops that find the entry by its
file name were fine; an entry under another name (AppImageLauncher,
Gear Lever, a hand-made one) never matched, so the dock showed a
generic icon and the launcher could not be pinned.
* fix(packaging): no second menu entry when an AppImage manager already lists the launcher (#474, #394)
appimaged, AppImageLauncher and Gear Lever write their own entry for the
AppImage under another file name. AppRun added
ai.storyteller.artcraft-launcher.desktop next to it on every start, so the
launcher showed up twice in the app menu, and deleting the extra entry only
lasted until the next launch.
AppRun now installs nothing while another entry's Exec runs this AppImage,
and removes the entry it wrote earlier when own_entry says it is still
unchanged. own_entry also accepts entries that carry the old
StartupWMClass=artcraft-launcher, since that line is the only difference
from what earlier releases wrote.
* fix(packaging): a hidden manager entry doesn't stand in for ours
Menu editors hide an entry with NoDisplay=true or Hidden=true. When a user
hid the manager's duplicate that way, AppRun still counted it and removed
our entry, leaving the launcher out of the menu. Such an entry no longer
counts. Test 15e covers both keys.
* fix(packaging): a manager entry stands in for ours only with our window class
Read only the [Desktop Entry] group, so an Exec in a [Desktop Action] group
doesn't count, and require StartupWMClass=ai.storyteller.artcraft-launcher.
Gear Lever doesn't refresh its entry when the launcher replaces the AppImage
in place, so its entry can keep the old class, and without ours GNOME would
have nothing to match the window against.
A native Rust/egui launcher for the 12 Craft Apps (7 classic + 5 new).
- Grid (icon cards) or sortable table view, filters and search
- Status per app: available, installed and up to date, or update
available with version and release date
- Installs where each OS keeps apps, from the official release packages:
/Applications (DMG), Program Files (MSI), deb/rpm via the system
package manager (Flatpak/AppImage fallback), /usr/local on FreeBSD
- Detects apps installed by hand; updates keep the installed format
- Every download verified against its published SHA-256; running apps
are never replaced
- Tray/menu-bar mode, start at login, one notification per new version
- GitHub API with ETag cache, falling back to release pages when
rate-limited; release source is pluggable for a future catalog API
- Web build lists latest releases with per-platform downloads
- Packaging and release workflows for macOS, Windows (x64/x86/arm64),
Linux (x86_64/aarch64), FreeBSD and web
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>