You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
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
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
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
--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
wt config shell completions <shell>: Generate static shell completion scripts for package managers and custom installation. (#701, thanks @chenrui333)
Debug logging threshold: Now requires -vv instead of -v for debug logging and diagnostic file generation, freeing -v for future use. (#702)
Fixed
Fork PR fetching: wt switch pr:N now works when origin points to a fork by fetching PR refs from the upstream remote. Shows actionable error with git remote add command if upstream remote is missing. (#704)
Fork PR branch naming: Fork PR branches now use the original branch name (e.g., feature-fix) instead of owner/feature-fix, so git push works correctly. (#706)
Nested worktree detection: Current worktree indicator (@) now shows on the correct worktree when worktrees are nested (e.g., .worktrees/ layout inside repo). (#697)
Symlink path resolution: Worktree commands work correctly on systems with symlinks (e.g., macOS /var → /private/var). (#696)
Pre-remove hook failures: Shell no longer cd's to main worktree when pre-remove hooks fail, leaving user in their current location. (#692)
PowerShell completion robustness: Completion registration errors no longer break the shell wrapper function. (#674)
Documentation
Added missing orphan (∅) symbol and no_worktree state to JSON output documentation. (#687)
Clarified Unicode handling in shell detection. (#700)
Internal
Refactored large files into focused modules. (#688)
Consolidated integration reason computation into Repository method. (#689)
Added verbose level tracking infrastructure for future -v output. (#703)
PowerShell template uses WORKTRUNK_BIN for test isolation. (#674)
Install worktrunk 0.15.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.15.2/worktrunk-installer.sh | sh
wt config show diagnostics: When shell integration is not active, now shows how the command was invoked, the binary path (if different), and $SHELL environment variable. Helps diagnose setup issues. (#683)
Help pager follows git convention: -h never opens a pager, --help uses pager when available. Closes #583. (#651, thanks @razor-x)
Verbose mode logging: -v now logs command stdout/stderr and all spawned processes including background hooks, wt for-each commands, and shell probes. (#680)
Documentation
FAQ reordered: Questions now ordered by frequency and importance.
Internal
AUR package: Worktrunk now published to Arch Linux AUR on each release. (#585, thanks @razor-x)
Codecov Test Analytics: Integration tests now report to Codecov Test Analytics. (#682)
Install worktrunk 0.15.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.15.1/worktrunk-installer.sh | sh
wt switch pr:<number> syntax (experimental): Switch directly to a GitHub PR by number. Same-repo PRs delegate to normal switch flow; fork PRs fetch from refs/pull/N/head and configure pushRemote. (#673, closes #657, thanks @wladpaiva for requesting)
--force hint for dirty worktrees: When wt remove fails due to uncommitted changes, the hint now shows the full command: wt remove <branch> --force. (#671)
Documentation
Windows install guidance: Winget as recommended install (ships git-wt by default), plus the App Execution Aliases workaround to use wt directly. Closes #133. (thanks @ctolkien for reporting, @shanselman for the aliases tip, @Farley-Chen for #648)
Caddy subdomain routing pattern: Clean URLs like feature-auth.myproject.lvh.me via Caddy reverse proxy with dynamic route registration.
tmux session per worktree pattern: Dedicated tmux session with multi-pane layout per worktree.
Install worktrunk 0.15.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.15.0/worktrunk-installer.sh | sh
wt remove --force works with dirty worktrees: The --force flag was documented to allow removal with uncommitted changes, but worktrunk's own cleanliness check blocked it before git could apply the flag. Fixes #658. (thanks @pedro93)
Correct output when switching to existing local branch: When switching to a local branch that tracks a remote, worktrunk incorrectly reported "Created branch X" instead of "Created worktree for X". Now only reports branch creation when git's DWIM actually creates a new tracking branch from a remote. Fixes #656. (thanks @guidupuy-ws)
PowerShell handles multiple wt.exe binaries: On Windows, when both Windows Terminal's wt.exe and worktrunk's wt.exe exist in PATH, shell integration errored with "Cannot convert 'System.Object[]' to the type 'System.String'". Now correctly uses the first match. Relates to #648. (thanks @Farley-Chen)
Install worktrunk 0.14.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.14.2/worktrunk-installer.sh | sh
--base accepts commit-ish refs: wt switch --create --base now accepts HEAD, tags, commit SHAs, and relative refs (e.g., HEAD~2), not just branch names. Fixes #630. (thanks @myhau)
Upfront validation for target refs: wt merge and wt step commands now validate target refs before approval prompts, giving clearer "Branch X not found" errors immediately.
Visual hierarchy in help: Section dividers, improved heading structure, and sentence case in --help output.
Fixed
macOS shell freeze during copy-ignored: Atomic clonefile() on directories saturated disk I/O, blocking shell startup. Now uses per-file reflink which is slower but keeps the system responsive.
copy-ignored no longer copies nested worktrees: When worktree-path places worktrees inside the main worktree, copy-ignored now skips them. Also now copies symlinks (fixes node_modules/.bin/ etc.). Fixes #641. (thanks @razor-x)
Context-aware hints for wt config create: Hints now suggest relevant next steps based on which configs exist.
Install worktrunk 0.14.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.14.1/worktrunk-installer.sh | sh