Release Notes
Improved
-
Aliases dispatch from top-level
wt <name>(and graduate from experimental): Configured aliases now resolve as first-class commands —wt deployworks the same aswt step deploy, reading better as an everyday shortcut. Precedence is built-in → alias →wt-<name>PATH binary → unrecognized-subcommand error, matching git's model where[alias]entries shadowgit-fooexternals. The old "alias shadows a built-in" warning is gone; an alias namedcommitnow simply runs viawt commit(onlywt step commitremains shadowed). (#2266) -
wt switch --baseacceptspr:N/mr:N:--basenow routes through the same resolver as the positional branch argument, sowt switch -c feat-x --base pr:42works symmetrically withwt switch pr:42. Same-repo PRs/MRs resolve to the source branch name; fork PRs/MRs fetchrefs/pull/N/head(GitHub) orrefs/merge-requests/N/head(GitLab) and use the resolved SHA, avoiding fork-branch pollution in the local namespace. (#2263, thanks @jrdncstr for the request in #2261) -
WORKTRUNK_PROJECT_CONFIG_PATHenv override: Mirrors the existingWORKTRUNK_CONFIG_PATH(user) andWORKTRUNK_SYSTEM_CONFIG_PATH(system) overrides for the project config. Missing files at the overridden path resolve to no project config, same as a missing.config/wt.toml.wt config show --format=jsonnow reports the overridden path in theproject.pathfield. (#2267)
Fixed
-
wt listhandles[gone]upstreams gracefully: When a branch's configured upstream ref is gone (remote branch deleted, local tracking ref pruned), the Remote column was surfacing a rawfatal: ambiguous argument 'origin/<branch>'error fromgit rev-parse. Upstream resolution now reads%(upstream:track)and treats[gone]the same as no upstream, so the row renders cleanly. (#2262) -
Nix flake build with vendored skim-tuikit: The
[patch.crates-io]path dependency onvendor/skim-tuikitwas being stubbed out by crane'smkDummySrcduringbuildDepsOnly, breaking downstream skim resolution. The flake now preserves real sources for vendored path deps while still benefiting from dependency caching. (#2265, thanks @nickdichev)
Documentation
-
Renamed "external subcommand" to "custom subcommand": The user-facing name for
wt-<name>PATH-dispatched subcommands is now "custom subcommand" in docs and internal code, matching cargo's vocabulary. Avoids overloading "external," which the codebase already uses forshell_execsubprocesses. Internal renames:src/commands/external.rs→custom.rs,Commands::External→Commands::Custom. (#2270) -
Trimmed filler in prose docs: Removed sentences that restated obvious error behavior, duplicated nearby prose, or added visual weight without information across
extending.md,faq.md, andtips-patterns.md. (#2271, #2272)
Internal
- Extracted a shared
did_you_meanhelper used by both top-level andwt stepsuggestion sites, so the 0.7 Jaro-Winkler threshold and sort order are defined in one place. (#2268)
Install worktrunk 0.39.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.39.0/worktrunk-installer.sh | sh && wt config shell installInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.39.0/worktrunk-installer.ps1 | iex"; git-wt config shell installInstall prebuilt binaries via Homebrew
brew install worktrunk && wt config shell installDownload worktrunk 0.39.0
| File | Platform | Checksum |
|---|---|---|
| worktrunk-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| worktrunk-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| worktrunk-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| worktrunk-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| worktrunk-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Install via Cargo
cargo install worktrunk && wt config shell installInstall via Winget (Windows)
winget install max-sixty.worktrunk && git-wt config shell installInstall via AUR (Arch Linux)
paru worktrunk-bin && wt config shell install