Releases: max-sixty/worktrunk
0.21.0
Release Notes
Improved
- Absolute paths in
worktree-pathtemplates: New{{ repo_path }}variable enables absolute path configurations like{{ repo_path }}/../{{ repo }}.{{ branch | sanitize }}. Tilde expansion is also supported (~/worktrees/{{ repo }}/{{ branch }}). Fixes #902. (thanks @bingryan for reporting) (#904)
Documentation
- Documented prefix stripping in
worktree-pathtemplates using minijinja's built-inreplacefilter and slicing syntax. Closes #900. (thanks @laurentkempe for requesting) (#903)
Install worktrunk 0.21.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.21.0/worktrunk-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.21.0/worktrunk-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install max-sixty/worktrunk/wtDownload worktrunk 0.21.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.20.3
Release Notes
Fixed
-
PowerShell auto-configuration on Windows: When running
wt config shell installfrom cmd.exe or PowerShell, both PowerShell profile files are now created automatically (Documents/PowerShell and Documents/WindowsPowerShell). Fixes #885. (thanks @DiTo97 for reporting) (#898) -
-Cflag respected in hook context: The-Cflag now correctly sets the worktree path for hooks, fixingwt -C /path hook ...commands that were using the wrong context. (#899) -
--configpath validation: Now warns when--configpoints to a non-existent file instead of silently using defaults. (#895)
Documentation
-
Fix shell quoting in hook examples — template variables are auto-escaped, so manual quoting caused issues with special characters. (#895)
-
Updated documentation to use tool-agnostic terminology for LLM commit messages. (#891)
Internal
-
Consolidated PR/MR resolution into unified
remote_refmodule. (#893) -
Simplified command structure and removed dead code. (#892)
-
Eliminated Settings types, added accessor methods to Config types. (#896)
Install worktrunk 0.20.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.20.3/worktrunk-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.20.3/worktrunk-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install max-sixty/worktrunk/wtDownload worktrunk 0.20.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 |
0.20.2
Release Notes
Fixed
-
PowerShell shell integration: Fixed shell integration not working on Windows PowerShell. The init script now includes
| Out-Stringto convert array output to a string. Existing configs without this fix are detected as "not installed" sowt config shell installwill update them automatically. Fixes #885. (thanks @DiTo97 for reporting) (#888) -
Branch removal message: "No worktree found for branch X" now shows as info (○) instead of warning (▲) when removing a branch-only, since this is expected behavior. (#887)
Documentation
- Documented main worktree behavior in
wt step relocate --help. (#889)
Install worktrunk 0.20.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.20.2/worktrunk-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.20.2/worktrunk-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install max-sixty/worktrunk/wtDownload worktrunk 0.20.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.20.1
Release Notes
Improved
-
wt statusline --format=json: Output current worktree as JSON (same structure aswt list --format=json). Also adds--format=claude-codeas canonical syntax (the old--claude-codeflag remains supported). Fixes nested worktree detection that incorrectly identified parent worktrees. (#875) -
wt config showshell status: Each shell integration line now starts with the shell name (e.g., "bash: Already configured...") for easier scanning. (#881) -
wt config showperformance: 8x faster (~1.2s → ~150ms) by using PATH lookup instead of runningclaude --version. (#883)
Fixed
-
Config TOML formatting: Fixed spurious empty
[commit]header appearing when only[commit.generation]is configured. (#879) -
Documentation URLs: Fixed broken worktrunk.dev URLs in fish wrapper and config templates. (#882)
Documentation
-
Fixed
worktree-pathexample on tips page. (#876, thanks @uriahcarpenter) -
Fixed OSC 8 hyperlink sequences leaking through to web docs as garbage text. (#870)
Internal
-
Demo snapshot mode for regression testing of command output. (#871)
-
CI improvements: nextest binary compatibility fix, pinned runner versions, weekly renovation workflow. (#878, #884)
Install worktrunk 0.20.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.20.1/worktrunk-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.20.1/worktrunk-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install max-sixty/worktrunk/wtDownload worktrunk 0.20.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.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 |