gwm-cli 1.6.1

git worktree manager — TUI + CLI, native libgit2, per-repo bootstrap
Documentation
# [1.2.0] - 2026-07-21

**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](https://github.com/kbrdn1/gwm-cli/issues/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.

## Added

- **aqua install channel** ([#380]https://github.com/kbrdn1/gwm-cli/issues/380)
  `aqua g -i kbrdn1/gwm-cli`. gwm is registered in the aqua **standard
  registry** ([aquaproj/aqua-registry#57117]https://github.com/aquaproj/aqua-registry/pull/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]https://github.com/kbrdn1/gwm-cli/issues/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]https://github.com/kbrdn1/gwm-cli/issues/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]https://github.com/kbrdn1/gwm-cli/issues/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]https://github.com/kbrdn1/gwm-cli/issues/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]https://github.com/kbrdn1/gwm-cli/issues/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.

## Changed

- **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]https://github.com/kbrdn1/gwm-cli/issues/423 for publishing.

## Fixed

- **`.deb` / `.rpm` packages now depend on `git`**
  ([#388]https://github.com/kbrdn1/gwm-cli/issues/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]https://github.com/kbrdn1/gwm-cli/issues/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.

## Dependencies

- 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]https://github.com/kbrdn1/gwm-cli/pull/400,
  [#402]https://github.com/kbrdn1/gwm-cli/pull/402,
  [#403]https://github.com/kbrdn1/gwm-cli/pull/403,
  [#404]https://github.com/kbrdn1/gwm-cli/pull/404,
  [#406]https://github.com/kbrdn1/gwm-cli/pull/406). Patch-level updates with
  no behaviour change for gwm.

  The clap bump needed a companion fix
  ([#405]https://github.com/kbrdn1/gwm-cli/issues/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.

## Notes

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:

- **winget** ([#381]https://github.com/kbrdn1/gwm-cli/issues/381) —
  [microsoft/winget-pkgs#403295]https://github.com/microsoft/winget-pkgs/pull/403295,
  validation passed, awaiting a moderator.
- **Nixpkgs** ([#382]https://github.com/kbrdn1/gwm-cli/issues/382) —
  [NixOS/nixpkgs#542900]https://github.com/NixOS/nixpkgs/pull/542900, lint,
  eval and build green across platforms.

`main` is now a protected branch
([#397](https://github.com/kbrdn1/gwm-cli/issues/397)): releases go through a
`dev` → `main` pull request rather than a local merge. This is the first release
cut on that rail.