Skip to content

Releases: max-sixty/worktrunk

0.20.0

26 Jan 19:29

Choose a tag to compare

Release Notes

Improved

  • wt step relocate command: Move worktrees to their expected paths based on the worktree-path template. Supports --dry-run preview, filtering by branch name, and --commit to auto-commit dirty worktrees before moving. Handles complex scenarios including worktree swaps (A→B, B→A), chains, and the --clobber flag to back up blocking non-worktree paths. Docs (#790)

  • LLM setup prompt: First-time interactive prompt when users attempt wt merge, wt step commit, or wt step squash without LLM configuration. Detects available tools (claude, codex) and offers auto-configuration with ? to preview the generated config. Add skip-commit-generation-prompt to 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-file options, 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 | sh

Install 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/wt

Download 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

25 Jan 22:57

Choose a tag to compare

Release Notes

Improved

  • LLM commit configuration redesign: The [commit-generation] section is now [commit.generation], and command + args are unified into a single shell-executed command string. Existing configs continue to work — a deprecation warning shows the new format and creates a .new config file you can apply with mv. Claude Code (claude -p) and Codex (codex exec) are documented as first-class options alongside llm. 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 --remotes shows 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:N shows 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 --create conflict error: wt switch --create pr:101 shows 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_branch not respecting shell_escape flag, Windows CI cache rename failures, and WORKTRUNK_MAX_CONCURRENT_COMMANDS=0 meaning "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 only commit-generation fields 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_escape crate. (#810)
  • Used sanitize-filename crate 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 | sh

Install 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/wt

Download 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

22 Jan 08:35

Choose a tag to compare

Release Notes

Improved

  • PR/MR context display: wt switch pr:N and mr:N now 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 like contributor/main instead 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-remove and post-remove hooks. (#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 | sh

Install 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/wt

Download 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

21 Jan 19:49

Choose a tag to compare

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 remove no 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 | sh

Install 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/wt

Download 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

21 Jan 00:55

Choose a tag to compare

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 remove now 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 in wt config show. (#758)

Fixed

  • Age column shows "future" on NixOS/direnv: wt list no longer uses SOURCE_DATE_EPOCH for 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>.pushremote is set to a URL directly (as gh pr checkout does) instead of a remote name. (#769)
  • GitLab nested groups in URL parsing: URLs like gitlab.com/group/subgroup/repo now correctly identify repo as the repository name instead of subgroup. 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 glab CLI 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 | sh

Install 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/wt

Download 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

20 Jan 06:23

Choose a tag to compare

Release Notes

Improved

  • Per-project config overrides (Experimental): Override settings per-project in user config. Supports worktree-path, commit-generation, list, commit, and merge sections. 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_protocol for fork URL protocol preference instead of inferring from existing remotes. (#753)

Fixed

  • Same-repo PR switching with stale refs: wt switch pr:N for 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/myproject vs ~/personal/myproject). Users with remoteless repos will need to re-approve commands. (#747)

Internal

  • Cross-platform path handling improvements using path-slash crate and Path::file_name(). (#750)
  • Renamed WorktrunkConfig to UserConfig internally. (#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 | sh

Install 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/wt

Download 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

19 Jan 19:50

Choose a tag to compare

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 -v to 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 | sh

Install 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/wt

Download 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

19 Jan 18:16

Choose a tag to compare

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 | sh

Install 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/wt

Download 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

19 Jan 08:01

Choose a tag to compare

Release Notes

Improved

  • Git progress for slow worktree creation: When git worktree add takes 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: -v now 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 running wt switch <branch> to use the shell-wrapped command. (#721)

Fixed

  • Unsafe upstream when creating branch from remote base: wt switch --create feature --base=origin/main no 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 -vv debug output. (#718)
  • Hook preview shows template on expansion failure: wt hook show --expanded now 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/wt to worktrunk. (#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 | sh

Install 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/wt

Download 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

18 Jan 09:23

Choose a tag to compare

Release Notes

Fixed

  • --execute command 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 | sh

Install 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/wt

Download 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