Skip to content
gwmgwmgwmv1.10.0

v1.2.0

Five new ways to install gwm, and a sixth queued. This release is almost entirely about reach: Windows users get Scoop, Debian/Ubuntu and Fedora/RHEL/openSUSE get native packages, Arch gets an AUR package, and aqua users get it from the standard registry. winget publishing is wired up but the channel is not usable yet, because Microsoft has not merged the manifest; it is counted separately for that reason. None of it changes how gwm behaves - the binary is the same, there are just more ways to get it. Tracked under #383.

One theme ran through the whole batch and is worth recording: gwm shells out to the git binary, beyond the vendored libgit2 it links. That is invisible to every dependency scanner, because it is an exec, not a link. It surfaced three separate times in this cycle - in the AUR depends, in the .deb/.rpm metadata, and again in the Nix build sandbox - each time through a different symptom. It is now declared everywhere it needs to be.

  • aqua install channel (#380) - aqua g -i kbrdn1/gwm-cli. gwm is registered in the aqua standard registry (aquaproj/aqua-registry#57117), so no custom registry wiring is needed. aqua pulls the prebuilt binary for the platform from the matching GitHub Release and verifies its sha256 against the published .sha256 sidecar; Linux, macOS and Windows are covered on both Intel and ARM, with Windows-on-ARM falling back to the x64 build under emulation. Requires standard registry v4.539.0 or newer, the release that first shipped it.

  • Scoop install channel for Windows (#376) - scoop bucket add gwm https://github.com/kbrdn1/scoop-gwm; scoop install gwm. A new scoop-bucket-update job in release.yml renders packaging/scoop/gwm.json.template and pushes bucket/gwm.json to the kbrdn1/scoop-gwm bucket on every stable release (mirroring the Homebrew tap; pre-releases filtered out). scoop update gwm picks up each new version once the release job pushes the refreshed manifest.

  • .deb packages for Debian / Ubuntu (#377) - x86_64 and aarch64, built by cargo-deb and attached to every stable release (sudo apt install ./gwm-cli_<ver>-1_amd64.deb). The package is named gwm-cli to avoid Debian’s unrelated gwm window-manager package; the command stays gwm.

  • .rpm packages for Fedora / RHEL / openSUSE (#378) - x86_64 and aarch64, built by cargo-generate-rpm and attached to every stable release (sudo dnf install ./gwm-cli-<ver>-1.x86_64.rpm).

  • AUR package for Arch Linux (#379) - yay -S gwm-cli-bin (or paru). A new aur-publish job in release.yml renders packaging/aur/PKGBUILD.template and pushes the gwm-cli-bin prebuilt-binary package to the AUR on every stable release, via the SHA-pinned KSXGitHub/github-actions-deploy-aur action, which regenerates .SRCINFO and builds the package with makepkg against the real binary. Installs gwm plus the license and bash/zsh/fish completions; depends on git; provides/conflicts gwm-cli and gwm. Pre-releases filtered out.

  • winget publishing automation (#381) - a new winget-publish job in release.yml opens a manifest PR to microsoft/winget-pkgs (kbrdn1.gwm) for each stable release, building the manifest from the Windows .zip with a pinned, checksum-verified komac. It runs komac directly rather than through an action that would install tooling from mutable refs at runtime with the publishing token in scope, and the expected komac digest is pinned in this repository rather than fetched from the same release as the binary it verifies. winget install kbrdn1.gwm becomes available once Microsoft merges the manifest; the job is advisory until then.

  • README leads with the pitch instead of the spec sheet. The hero was one dense sentence of implementation detail; it now opens with what gwm does, a concrete gwm create example, and a scannable block of what it gives you over a git worktree add wrapper. The install-channel spread is stated up front, which is the point of this release. The feature list below is unchanged, and no new behaviour is claimed.

  • Repository discovery metadata. The GitHub description was rewritten in plain terms, and the repository had no topics at all - it now carries the fourteen that describe it (git-worktree, tui, ratatui, rust, developer-tools, and so on). Cosmetic to the binary, but it is how the project gets found at all.

  • Docs tree description corrected. The README claimed docs/ was “structured for Nuxt Content and ready to drop into the future static site”. It now states the real page counts (39 English, 36 French), that the in-repo tree is the source of truth, and points at #423 for publishing.

  • .deb / .rpm packages now depend on git (#388) - gwm shells out to the git binary (sync, worktree rename, clean, TUI previews) beyond the vendored libgit2, so a minimal Debian/Fedora install without git would break those features. git is now declared in Depends / Requires. The documented install commands moved from dpkg -i / rpm -i to apt install ./… / dnf install ./…, since the low-level tools do not resolve dependencies and would now fail on a machine without git.

  • The Nix flake reports the right version (#393) - it advertised 0.3.0-rc.3 while the code was at 1.1.1, so nix profile list, nix flake show and the store path all named a release eight versions old. The built binary was always correct (gwm --version reported 1.1.1), so this was mislabelling rather than a broken build, which is why it survived unnoticed. The root cause was a comment promising a lockstep bump that nothing enforced, so the version is now read out of Cargo.toml at eval time rather than restated in flake.nix - the drift is impossible now, not merely fixed.

  • Bumped serde (and its stack), anyhow to 1.0.104, thiserror to 2.0.19, regex to 1.13.1, and clap to 4.6.2 (#400, #402, #403, #404, #406). Patch-level updates with no behaviour change for gwm.

    The clap bump needed a companion fix (#405): 4.6.2 renders a lone subcommand alias as [alias: cd] where 4.6.1 printed [aliases: cd], which broke two --help assertions that matched the plural string exactly. They now match \[alias(es)?: …\], so the grammatical number can flip either way without breaking the suite again.

Two further channels are submitted and waiting on external review, and are deliberately not documented yet - a channel gets an install command in the README only once it actually works:

main is now a protected branch (#397): releases go through a dev → main pull request rather than a local merge. This is the first release cut on that rail.