Releases: max-sixty/worktrunk
0.20.0
Release Notes
Improved
-
wt step relocatecommand: Move worktrees to their expected paths based on theworktree-pathtemplate. Supports--dry-runpreview, filtering by branch name, and--committo auto-commit dirty worktrees before moving. Handles complex scenarios including worktree swaps (A→B, B→A), chains, and the--clobberflag to back up blocking non-worktree paths. Docs (#790) -
LLM setup prompt: First-time interactive prompt when users attempt
wt merge,wt step commit, orwt step squashwithout LLM configuration. Detects available tools (claude, codex) and offers auto-configuration with?to preview the generated config. Addskip-commit-generation-promptto user config to suppress. (#867) -
Consistent prompt styling: Interactive prompts now use consistent cyan styling via
prompt_message()formatting. (#858)
Fixed
- Path display in error messages: User-facing paths now consistently use
format_path_for_display(), fixing cases where raw.display()output could show inconsistent path formats. (#856)
Documentation
- Added Quick Start section to front page showing the switch → list → merge workflow. (#864)
- Updated template documentation: removed deprecated
template-fileoptions, added{{ git_diff_stat }}variable, clarified squash-only variables. (#854) - Fixed stale documentation for
[commit.generation]config format, statusline context gauge, and CI status for remote-only branches. (#853)
Internal
- Bumped nix crate from 0.30.1 to 0.31.1. (#860)
- Refactored deprecation detection for better modularity. (#852)
Install worktrunk 0.20.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.20.0/worktrunk-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.20.0/worktrunk-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install max-sixty/worktrunk/wtDownload worktrunk 0.20.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 |
0.19.0
Release Notes
Improved
-
LLM commit configuration redesign: The
[commit-generation]section is now[commit.generation], andcommand+argsare unified into a single shell-executedcommandstring. Existing configs continue to work — a deprecation warning shows the new format and creates a.newconfig file you can apply withmv. Claude Code (claude -p) and Codex (codex exec) are documented as first-class options alongsidellm. See the LLM commits guide. (#809, #837) -
Per-project hooks: User config can define hooks per-project that append to global hooks. Execution order: global → per-project → project config. Configure under
[projects."owner/repo".hooks]. (#842) -
Context window gauge for Claude Code: Statusline mode shows a moon phase gauge (🌕🌔🌓🌒🌑) for context window usage. (#840)
-
CI status for remote-only branches:
wt list --remotesshows CI status for branches that only exist on the remote. (#817) -
Hook log file lookup:
wt config state logs get --hook=<spec>returns the path to a specific hook's log file. (#816, thanks @EduardoSimon for requesting) -
Branch/fork info in PR/MR display:
wt switch pr:Nshows the source branch (e.g.,feature-auth) or fork reference (e.g.,contributor:feature) alongside PR details. (#808) -
Claude Code section in
wt config show: Shows Claude CLI installation status, plugin status, and statusline configuration. (#833) -
Deprecation details moved to
wt config show: Other commands show a brief pointer instead of full deprecation details. (#828) -
Config validation suggests correct file: When a config key belongs in user config but appears in project config (or vice versa), the warning suggests the correct location. (#804)
-
Tilde paths in hints: Shell command hints use
~instead of full home directory paths when safe. (#710) -
Improved
--createconflict error:wt switch --create pr:101shows the existing branch name in the error. (#807) -
CI status prioritized in statusline: CI status is retained longer when the statusline truncates. (#845)
Fixed
-
Template expansion bugs: Fixed
worktree_path_of_branchnot respecting shell_escape flag, Windows CI cache rename failures, andWORKTRUNK_MAX_CONCURRENT_COMMANDS=0meaning "no limit". (#847, #849) -
Hook and CI status panics: Fixed panic when serializing mixed named/unnamed hook configs, banned colons in hook names to prevent parsing ambiguity, and fixed GitLab MR detection when multiple MRs exist without project ID. (#846, #848)
-
Pre-commit hooks for clean worktree squash: Pre-commit hooks are collected for approval when squashing on a clean worktree. Previously only collected when dirty. (#695)
-
Hint message formatting: Fixed ANSI escape code interference in dim hint messages. (#836)
-
Spurious [commit] header: Fixed config migration showing
[commit]section header when onlycommit-generationfields needed migration. (#834)
Documentation
- Added at-a-glance examples to config documentation. (#826)
- Clarified user project-specific settings section. (#835)
- Consistent worktree terminology throughout docs. (#813)
- Added tip for monitoring hook logs. (#838)
Internal
- Replaced manual quote escaping with
shell_escapecrate. (#810) - Used
sanitize-filenamecrate for filename sanitization. (#832) - Cached CI tool availability checks. (#831)
- Moved inline imports to module top level. (#818, #819, #820, #822)
Install worktrunk 0.19.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.19.0/worktrunk-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.19.0/worktrunk-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install max-sixty/worktrunk/wtDownload worktrunk 0.19.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 |
0.18.2
Release Notes
Improved
-
PR/MR context display:
wt switch pr:Nandmr:Nnow show PR/MR details (title, author, state, URL) after fetching. (#782) -
Fork PR branch conflicts: When a fork PR's branch name conflicts with an existing local branch (e.g., contributor opens PR from their
main), worktrunk now creates a prefixed branch likecontributor/maininstead of failing. Closes #714. (thanks @vimtor for reporting)
Fixed
-
Help output formatting: Fixed double blank lines appearing after demo comments in help output. (#795)
-
Error handling reliability: Replaced fragile string-based error parsing with structured approaches for git stash, GitHub CLI, and GitLab CLI operations. (#787)
Documentation
-
ci-status help text: Improved clarity of the ci-status configuration documentation. (#794)
-
wt remove help text: Simplified short description and added documentation for
pre-removeandpost-removehooks. (#792) -
Subcommand documentation: Fixed generated website docs for subcommands (like
wt step copy-ignored,wt config state) to include their short descriptions. (#793)
Install worktrunk 0.18.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.18.2/worktrunk-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.18.2/worktrunk-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install max-sixty/worktrunk/wtDownload worktrunk 0.18.2
| 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 |
0.18.1
Release Notes
Fixed
- Submodule worktree paths: Worktrees are now created in the correct location when running inside a git submodule. Previously, worktrees were created relative to the parent repo's
.git/modules/directory instead of the submodule's working directory. (#762, thanks @lajarre; #777, thanks @mhonsel for reporting) - Shell integration warnings: Warnings about shell integration now check if the current shell has integration configured, not whether any shell does. This fixes misleading "shell requires restart" messages when e.g. bash had integration but the user was running fish. (#772)
- "Not found" error messages: Improved error message phrasing — "No branch named X" instead of "Branch X not found", "Branch X has no worktree" instead of "No worktree found for branch X". Context-appropriate hints now appear (e.g.,
wt removeno longer suggests--create). (#774)
Internal
- Unified PR/MR reference resolution, reducing code duplication. (#778)
Install worktrunk 0.18.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.18.1/worktrunk-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.18.1/worktrunk-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install max-sixty/worktrunk/wtDownload worktrunk 0.18.1
| 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 |
0.18.0
Release Notes
Improved
- Post-remove hook: New hook type runs after worktree removal. Template variables (
{{ branch }},{{ worktree_path }},{{ commit }}) reference the removed worktree, enabling cleanup scripts for containers, servers, or other resources. (#757) - Graceful handling of missing worktree directories:
wt removenow prunes stale git metadata when the worktree directory was deleted externally (e.g.,rm -rf), making the command more idempotent. Fixes #724. (thanks @strangemonad for reporting) - Config validation warnings at load time: Unknown fields in config files (typos like
[commit-gen]instead of[commit-generation]) now show warnings immediately instead of only inwt config show. (#758)
Fixed
- Age column shows "future" on NixOS/direnv:
wt listno longer usesSOURCE_DATE_EPOCHfor time calculations, which NixOS and direnv commonly set to past timestamps for reproducible builds. Fixes #763. (thanks @ngotchac for reporting) - CI status with URL-based pushremote: CI detection now works when
branch.<name>.pushremoteis set to a URL directly (asgh pr checkoutdoes) instead of a remote name. (#769) - GitLab nested groups in URL parsing: URLs like
gitlab.com/group/subgroup/reponow correctly identifyrepoas the repository name instead ofsubgroup. This was a security fix — previously, approval bypass was possible across sibling repos in the same parent group. (#768) - GitLab CI status detection: Fixed multiple issues with
glabCLI compatibility — MR lookup now uses two-step resolution, "manual" pipelines show as running instead of failed, and rate limit errors are handled properly. Fixes #764. (thanks @ngotchac for reporting)
Internal
- Refactored accessor functions to use bare nouns per Rust convention. (#765)
- Clarified target/integration naming across codebase. (#755)
Install worktrunk 0.18.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.18.0/worktrunk-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.18.0/worktrunk-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install max-sixty/worktrunk/wtDownload worktrunk 0.18.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 |
0.17.0
Release Notes
Improved
- Per-project config overrides (Experimental): Override settings per-project in user config. Supports
worktree-path,commit-generation,list,commit, andmergesections. Config precedence: CLI arg > project config > global config > default. Closes #596. (#749) - Search all remotes for branch existence: Branch existence checks and completions now search all remotes instead of just the primary remote, matching git's behavior. When a branch exists on multiple remotes, completions show all of them (e.g.,
feature ⇣ 2d origin, upstream). (#744) - CI detection for fork workflows: CI status detection now searches all remotes and uses
gh config get git_protocol/glab config get git_protocolfor fork URL protocol preference instead of inferring from existing remotes. (#753)
Fixed
- Same-repo PR switching with stale refs:
wt switch pr:Nfor same-repo PRs now fetches the branch before validation, fixing "Branch not found" errors when local refs were stale. (#742) - Project identifier collision for repos without remotes: Repos without remotes now use their full canonical path as the project identifier instead of just the directory name, preventing approval collisions between unrelated repos (e.g.,
~/work/myprojectvs~/personal/myproject). Users with remoteless repos will need to re-approve commands. (#747)
Internal
- Cross-platform path handling improvements using
path-slashcrate andPath::file_name(). (#750) - Renamed
WorktrunkConfigtoUserConfiginternally. (#746)
Install worktrunk 0.17.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.17.0/worktrunk-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.17.0/worktrunk-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install max-sixty/worktrunk/wtDownload worktrunk 0.17.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 |
0.16.0
Release Notes
Improved
- Background hook verbosity: Background hooks (post-start, post-switch) now show a single-line summary by default instead of per-hook output. Use
-vto see detailed output with expanded commands. We're open to feedback on this change — let us know in #690. (thanks @clutchski for reporting)
Internal
- Fixed dead Apple documentation link in copy-ignored rationale. (#743)
Install worktrunk 0.16.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.16.0/worktrunk-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.16.0/worktrunk-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install max-sixty/worktrunk/wtDownload worktrunk 0.16.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 |
0.15.5
Release Notes
Fixed
- Hook execution order: Hooks now run in the order defined in the config file. Previously, HashMap iteration randomized the order. Fixes #737. (thanks @ngotchac for reporting)
Install worktrunk 0.15.5
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.15.5/worktrunk-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.15.5/worktrunk-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install max-sixty/worktrunk/wtDownload worktrunk 0.15.5
| 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 |
0.15.4
Release Notes
Improved
- Git progress for slow worktree creation: When
git worktree addtakes more than 400ms (common on large repos), worktrunk now shows a progress message and streams git's output instead of going silent. (#725) - Verbose template expansion output:
-vnow shows template expansion details: the template, expanded command, and any undefined variables with SemiStrict fallback behavior. (#712) - Shell integration hint for explicit path invocation: When running wt via explicit path (e.g.,
./target/debug/wt) with shell integration configured, the warning now suggests runningwt switch <branch>to use the shell-wrapped command. (#721)
Fixed
- Unsafe upstream when creating branch from remote base:
wt switch --create feature --base=origin/mainno longer sets up tracking to origin/main, preventing accidental pushes to the base branch. Fixes #713. (thanks @kfirba) - Credential redaction in debug logs: URLs with embedded credentials (e.g.,
https://token@github.com/...) are now redacted in-vvdebug output. (#718) - Hook preview shows template on expansion failure:
wt hook show --expandednow displays both the error message and original template when expansion fails, instead of hiding the template. (#722)
Documentation
- Homebrew install uses core tap: Install command updated from
max-sixty/worktrunk/wttoworktrunk. (#716, thanks @chenrui333) - Hook docs reordered: post-start (background) is now the recommended default, with post-create for blocking dependencies. (#733)
Internal
- Simplified GitHub/GitLab CI status detection. (#730)
- Previous worktree gutter changed from
-to+for visual consistency. (#699)
Install worktrunk 0.15.4
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.15.4/worktrunk-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.15.4/worktrunk-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install max-sixty/worktrunk/wtDownload worktrunk 0.15.4
| 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 |
0.15.3
Release Notes
Fixed
--executecommand display: Shows the expanded command in a gutter with path context instead of showing the raw template before expansion. (#708)- CRLF line endings in error display: Multiline errors with Windows (
\r\n) or old Mac (\r) line endings now display correctly instead of falling through to single-line handling. (#707)
Documentation
- Arch Linux install via AUR: Added installation instructions and shell integration command. (#709, #561, thanks @razor-x)
Install worktrunk 0.15.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.15.3/worktrunk-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.15.3/worktrunk-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install max-sixty/worktrunk/wtDownload worktrunk 0.15.3
| 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 |