Skip to content

Releases: max-sixty/worktrunk

0.36.0

11 Apr 03:20

Choose a tag to compare

Release Notes

Improved

  • Git-style external subcommands: wt foo now runs wt-foo from PATH when foo is not a built-in, mirroring git foogit-foo. Third-party tools can be installed and invoked as wt <name> without touching this repo. Unrecognized commands show a git-style error with typo suggestions. Docs (#2054, thanks @pablospe for the suggestion in #2053)

  • {{ owner }} template variable: Expands to the GitHub/GitLab repository owner, useful for constructing URLs or paths in hook templates and worktree-path. (#2051, thanks @greggdonovan)

  • Typed env-var config overrides: WORKTRUNK__LIST__TIMEOUT_MS=30 and other typed overrides now work correctly. Previously, string-typed env values silently failed deserialization, wiping all user config and falling back to defaults. (#2062)

  • Config error attribution: Config load errors now identify the source — file errors show TOML line/column pointers, env-var errors list the offending WORKTRUNK_* variable. Previously all failures showed a generic message. (#2068)

  • Per-symbol atomic status rendering: The Status column in wt list and the wt switch picker now renders each symbol independently — unresolved gates show at their position instead of fabricating defaults when the collect deadline expires. (#2067)

  • Hook error messages: Malformed hook command config now lists the three accepted forms (string, named table, pipeline list) with a pointer to wt hook --help, instead of an opaque serde error. (#2042)

  • Stale trash cleanup: wt remove now sweeps orphaned .git/wt/trash entries older than 24 hours after each removal, reclaiming space from interrupted background removals. (#2039)

Changed

  • wt hook <type> exits successfully when no hooks are configured: Previously errored; now prints a warning and exits 0, so scripts and CI can invoke wt hook unconditionally. (#2056)

  • Hook output log layout: Log files moved from flat .git/wt/logs/{name}.log to nested {branch}/{source}/{hook-type}/{name}.log. Per-branch listing/clearing is now O(that branch). logs get --format=json paths changed to relative. Legacy flat files are swept automatically. (#2041)

Fixed

  • wt config show false "Not configured": When the shell init line lives in a sourced file (common with dotfile managers), config show no longer reports "Not configured" — it checks whether integration is actually active at runtime. Fixes #1306. (#2066, thanks @wouter-intveld for reporting)

  • Remove-then-switch hint: The hint for shadowed remote branches now uses --foreground so the chained wt remove && wt switch actually works (background removal left a placeholder directory blocking the switch). (#2040)

  • Conflict detection unified: The wt switch picker and wt list now both run both conflict probes (commit-level and working-tree). Previously the picker skipped the cheaper probe, leaving the fallback unreachable for clean worktrees; wt list non-full skipped the working-tree probe, missing conflicts from interrupted rebases. (#2064)

Documentation

  • Surfaced vars & aliases on homepage and tips-patterns, cross-linked state keys to dedicated docs, tightened hook links. (#2035, #2036, #2037, #2038)

Internal

  • Subcommand ordering aligned to documented policies (pipeline order for step, CRUD for state actions). (#2043, #2044)

Install worktrunk 0.36.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.36.0/worktrunk-installer.sh | sh && wt config shell install

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.36.0/worktrunk-installer.ps1 | iex"; git-wt config shell install

Install prebuilt binaries via Homebrew

brew install worktrunk && wt config shell install

Download worktrunk 0.36.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 install

Install via Winget (Windows)

winget install max-sixty.worktrunk && git-wt config shell install

Install via AUR (Arch Linux)

paru worktrunk-bin && wt config shell install

0.35.3

09 Apr 16:13

Choose a tag to compare

Release Notes

Improved

  • wt step prune streams removals inline: Removals and "Skipped" messages now print as each integration check completes, overlapping with still-running checks — previously there was a visible gap of silence while all parallel checks finished before any output appeared. (#2015)

  • Fewer redundant git worktree list calls in prune and multi-remove: prepare_worktree_removal() now accepts a pre-fetched worktree list, eliminating N+1 subprocess calls when removing many worktrees. (#2025)

Fixed

  • Picker preview UI lag: The picker's preview cache now stores pager-rendered output, so cache hits skip the pager subprocess entirely. Previously, scrolling past an item with a large diff froze the UI briefly on every re-render because the pager ran on every call. (#2021)

  • Template error hint underlining: The "Available variables" hint in template expansion errors now underlines each variable name individually instead of wrapping the entire comma-separated list in a single underline span. (#2028)

Documentation

  • Cross-linked vars references: The vars feature is documented in the hook template variables table, wt config state vars page, and tips-patterns recipes — these now link to each other so readers can navigate between "how to set" and "how to use in templates". (#2034)

  • Clearer project config intro: Improved the project config introduction and template variable heading in wt config help text. (#2032)

Install worktrunk 0.35.3

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.35.3/worktrunk-installer.sh | sh && wt config shell install

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.35.3/worktrunk-installer.ps1 | iex"; git-wt config shell install

Install prebuilt binaries via Homebrew

brew install worktrunk && wt config shell install

Download worktrunk 0.35.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

Install via Cargo

cargo install worktrunk && wt config shell install

Install via Winget (Windows)

winget install max-sixty.worktrunk && git-wt config shell install

Install via AUR (Arch Linux)

paru worktrunk-bin && wt config shell install

0.35.2

08 Apr 23:00

Choose a tag to compare

Release Notes

Improved

  • Multiple NAME filters for hook subcommands: wt hook pre-merge --yes insta doctest doc runs a subset of hooks in one command, instead of chaining separate invocations. (#2013)

  • Branch context in batch removal hooks: During prune or multi-remove, hook announcement messages now include the branch name (Running post-remove for **branch-name**: project:cleanup), disambiguating which worktree triggered each hook. (#2014)

Fixed

  • Bare repo false positive when core.bare is unset: Repos cloned by Eclipse/EGit (and other tools that don't write core.bare) were incorrectly detected as bare. Replaced git rev-parse --is-bare-repository with git config --type=bool core.bare. Fixes #1939. (#1976, thanks @daniel-iwan-datacore for reporting)

Install worktrunk 0.35.2

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.35.2/worktrunk-installer.sh | sh && wt config shell install

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.35.2/worktrunk-installer.ps1 | iex"; git-wt config shell install

Install prebuilt binaries via Homebrew

brew install worktrunk && wt config shell install

Download worktrunk 0.35.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

Install via Cargo

cargo install worktrunk && wt config shell install

Install via Winget (Windows)

winget install max-sixty.worktrunk && git-wt config shell install

Install via AUR (Arch Linux)

paru worktrunk-bin && wt config shell install

0.35.1

08 Apr 19:51

Choose a tag to compare

Release Notes

Fixed

  • PR lookup on forks respects gh repo set-default: wt switch pr:N now checks the gh-configured default repo when origin points to a fork, instead of always querying the fork's repo (which returns 404). The error message is also context-aware based on the configured default. Fixes #2002. (#2004, thanks @JustinPierce for reporting)

  • JSON output stability: config show --format=json log file sort is now deterministic (filename tiebreaker for identical timestamps). step for-each --format=json includes a consistent error field on all failure variants. (#2001)

Internal

  • Continued TestRepo consolidation: bare() constructor, at(path) constructor, removed lifetime guard field. (#2000, #2005, #2007)

Install worktrunk 0.35.1

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.35.1/worktrunk-installer.sh | sh && wt config shell install

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.35.1/worktrunk-installer.ps1 | iex"; git-wt config shell install

Install prebuilt binaries via Homebrew

brew install worktrunk && wt config shell install

Download worktrunk 0.35.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

Install via Cargo

cargo install worktrunk && wt config shell install

Install via Winget (Windows)

winget install max-sixty.worktrunk && git-wt config shell install

Install via AUR (Arch Linux)

paru worktrunk-bin && wt config shell install

0.35.0

08 Apr 03:38

Choose a tag to compare

Release Notes

Improved

  • --no-verify deprecated in favor of --no-hooks: All commands (switch, remove, merge, step commit, step squash) now use --no-hooks. --no-verify remains as a hidden alias with a deprecation warning. (#1932)

  • JSON output: --format=json on config show, config state subcommands, switch, remove, merge, step prune, and step for-each. (#1969, #1959)

  • Per-command hook log files: Each background hook command writes to its own log file instead of sharing a pipeline log. Combined hook announcements (e.g., post-remove + post-switch) display on a single status line. (#1934, #1980)

  • Prune and list performance: step prune streams integration checks and removes candidates in parallel (~3x faster on repos with many branches). Multiple caching layers (integration target, git_dir, rev_parse_tree, resolve_preferring_branch) reduce redundant git rev-parse calls during wt list. (#1950, #1957, #1966, #1948, #1943)

  • Itemized state clear output: wt config state clear shows per-category counts and cleans up stale trash from incomplete worktree removals. (#1961, #1960)

  • Hook pipeline summary: Serial steps separated by ; instead of , repeated unnamed sources collapsed into counted form (user ×2), and named steps show source:name prefix. (#1994)

  • Copy-pasteable help text: --help output strips $ prompts from code examples for direct copy-paste in the terminal. (#1992)

  • Better PR lookup errors: wt switch pr:N 404 errors now include the repository name and suggest gh repo set-default for fork workflows. Fixes #1925. (#1927, thanks @JustinPierce for reporting)

  • Claude Code worktree hooks: WorktreeCreate and WorktreeRemove hooks for the Claude Code plugin. (#1959)

Fixed

  • File permissions lost on copy-ignored: wt step copy-ignored now preserves execute bits when copying files via reflink. Fixes #1936. (#1937, thanks @RileyMathews for reporting)

  • Git alias breaks wt: Relative GIT_DIR/GIT_WORK_TREE paths inherited from git aliases now normalized to absolute paths at startup. Fixes #1914. (#1915, thanks @yasuhiroki for reporting)

  • Diagnostic files in state logs: verbose.log and diagnostic.md now properly categorized in wt config state logs output. (#1981)

  • Integration target in removal display: Background removal now shows origin/main (effective target) instead of main when the remote is ahead. (#1993)

  • Worktree-path hint suppression: The "customize worktree locations" hint no longer appears when project-specific worktree-path is configured. (#1941)

  • State logs formatting: Missing newline between log sections in wt config state logs output. (#1968)

  • Claude Code WorktreeCreate hook: Fixed jq filter using wrong input field. (#1964)

  • OpenCode unicode escaping: Fixed broken emoji markers depending on Bun version. (#1935, thanks @noirbizarre)

Documentation

  • Clarified plugin install command. (#1906, thanks @suyua9)
  • Fixed inaccurate logs documentation. (#1986)

Internal

  • Consolidated TestRepo into single src/testing module, shared across lib and bin unit tests. (#1944, #1963, #1971, #1991)
  • Simplified dispatch, timeout, and copy pool internals. (#1949, #1930, #1931)

Install worktrunk 0.35.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.35.0/worktrunk-installer.sh | sh && wt config shell install

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.35.0/worktrunk-installer.ps1 | iex"; git-wt config shell install

Install prebuilt binaries via Homebrew

brew install worktrunk && wt config shell install

Download worktrunk 0.35.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 install

Install via Winget (Windows)

winget install max-sixty.worktrunk && git-wt config shell install

Install via AUR (Arch Linux)

paru worktrunk-bin && wt config shell install

0.34.2

06 Apr 18:58

Choose a tag to compare

Release Notes

Improved

  • OpenCode integration: Activity tracking plugin shows agent status (🤖 working, 💬 waiting) in wt list, with wt config plugins opencode install/uninstall for management. Also adds OpenCode as an LLM commit generation backend. (#1807, thanks @noirbizarre)

  • Lower priority for copy-ignored: wt step copy-ignored now runs at the lowest OS scheduling priority (renice -n 19), yielding CPU to interactive foreground tasks on large trees. (#1916)

  • Diff stats performance: Switched from --numstat (one line per file) to --shortstat (single summary line), reducing diff output from O(files) to O(1) per worktree. (#1917)

Fixed

  • Remote detection with includeIf config: primary_remote() failed when non-remote git config keys (like includeIf.hasconfig:remote.*.url) matched the remote regex. (#1908, thanks @nirvdrum)

  • Background hook execution: Fixed three issues — list-form configs lost serial/concurrent semantics in post-merge/post-remove hooks, pipeline hook_name context leaked across steps, and lazy template expansion was broken for name-filtered hooks (e.g., wt hook post-start db). (#1910)

  • Copy-ignored parallelism: The outer loop in wt step copy-ignored ran on the global rayon pool instead of the dedicated copy pool, effectively serializing top-level entries. Now runs entirely on the 4-thread copy pool. (#1913)

  • Windows stack overflow in copy-ignored: Copy pool worker threads used platform default stack size (~2 MiB on Windows), causing overflow with 200+ directories. Now uses explicit 8 MiB stack size across all platforms. (#1911)

  • Nix flake build: Fixed flake.nix filtering out the dev/ directory, which broke builds after OpenCode integration added include_str!("../../../dev/opencode-plugin.ts"). (#1924, thanks @mariuskimmina)

Internal

  • Unified background hook execution into a single pipeline-based path, removing ~260 lines of dual-path branching. (#1912)
  • Replaced deprecated codecov/test-results-action with codecov/codecov-action. (#1918)
  • Bumped AUR deploy action to v4.1.2 (fixes argument order with Arch Linux's updated runuser). (#1909)

Install worktrunk 0.34.2

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.34.2/worktrunk-installer.sh | sh && wt config shell install

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.34.2/worktrunk-installer.ps1 | iex"; git-wt config shell install

Install prebuilt binaries via Homebrew

brew install worktrunk && wt config shell install

Download worktrunk 0.34.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

Install via Cargo

cargo install worktrunk && wt config shell install

Install via Winget (Windows)

winget install max-sixty.worktrunk && git-wt config shell install

Install via AUR (Arch Linux)

paru worktrunk-bin && wt config shell install

0.34.1

04 Apr 05:11

Choose a tag to compare

Release Notes

Improved

  • step prune performance: Integration checks now run in parallel, dramatically reducing prune time for repos with many branches (3+ minutes → seconds with 100+ branches). Fixes #1888. (#1890, thanks @ortonomy for reporting)

Fixed

  • CPU saturation during copy operations: Restored a dedicated 4-thread copy pool that was accidentally removed in v0.34.0, preventing ~1000% CPU usage on copy-heavy operations like step copy-ignored. (#1905)

  • Background pipeline template variables: When wt switch --create fires both post-switch and post-start hooks, pipeline steps were incorrectly accumulated into a single background process, causing {{ hook_type }} to expand to the wrong value. Each hook type now spawns its own pipeline. (#1904)

Internal

  • Extracted shared classify_unknown_key to deduplicate config warning logic. (#1902)

Install worktrunk 0.34.1

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.34.1/worktrunk-installer.sh | sh && wt config shell install

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.34.1/worktrunk-installer.ps1 | iex"; git-wt config shell install

Install prebuilt binaries via Homebrew

brew install worktrunk && wt config shell install

Download worktrunk 0.34.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

Install via Cargo

cargo install worktrunk && wt config shell install

Install via Winget (Windows)

winget install max-sixty.worktrunk && git-wt config shell install

Install via AUR (Arch Linux)

paru worktrunk-bin && wt config shell install

0.34.0

03 Apr 14:27

Choose a tag to compare

Release Notes

Improved

  • Per-branch custom variables: New wt config state vars set/get/list/clear commands store custom key-value pairs per branch, accessible as {{ vars.key }} in hook templates and wt step eval. Variables persist in git config and appear in wt list --format=json. (#1006)

  • Lazy template expansion in pipelines: Pipeline steps now expand {{ vars.* }} at execution time rather than at pipeline construction, so variables set by step N are available in step N+1. (#1840)

  • wt config plugins claude commands: New install, uninstall, and install-statusline subcommands manage Claude Code integration. install registers the worktrunk plugin via the Claude marketplace, install-statusline configures the Claude Code status line, and wt config show suggests these commands instead of raw CLI instructions. (#1830, #1834)

  • [forge] config section: New explicit [forge] section with platform and hostname fields for SSH host aliases and non-standard remotes. ci.platform is deprecated with automatic migration. (#1826)

  • Forge detection with url.insteadOf: Forge platform detection now falls back to the effective URL (after git url.insteadOf rewrites), fixing CI status, PR/MR detection, and push-remote features for users with SSH aliases or corporate mirrors. (#1771, thanks @amodelaweb; thanks @roytouw for reporting #1790)

  • --branch flag for wt step commit: Commit to a specific branch without switching to it — useful in automation and scripts. (#1750)

  • Last fetch time in branch-not-found hint: When wt switch can't find a branch, the hint now shows when the remote was last fetched (e.g., "last fetched 3h ago") to help identify stale local refs. (#1877)

  • Config field renames: merge.no-ffmerge.ff and switch.no-cdswitch.cd, using positive-sense naming. Old names continue to work with deprecation warnings and automatic migration via wt config update. (#1856, #1860)

  • Syntax highlighting for template blocks: Documentation site now renders {{ }} template expressions with syntax highlighting. (#1792)

  • Hide Claude Code section when CLI unavailable: wt config show no longer displays the Claude Code integration section if the claude CLI is not found. (#1827)

Fixed

  • Copy-ignored too many open files: wt step copy-ignored could exhaust file descriptors on large trees. Now reuses a single thread pool across all copy operations. Fixes #1865. (#1864, thanks @fspeirs)

  • Squash-merged branch detection with merge-tree conflicts: wt step prune and wt list failed to detect squash-merged branches when the default branch modified the same files. Now uses patch-id matching as fallback. Fixes #1818. (#1820, thanks @tthyer for reporting)

  • Background removal blocked for 1 second: wt remove blocked unnecessarily due to incorrect shell operator precedence in the background process spawn. (#1858)

  • Fish shell getcwd error in Zellij: Removing a worktree while using fish in Zellij produced "error retrieving current directory" messages. (#1787)

  • Alias detection false positive on path substrings: wt config show incorrectly flagged unrelated aliases when the alias target path contained "wt" as a substring. Fixes #1772. (#1773, thanks @nicolasff for reporting)

  • Branch names with dots in vars: Vars parsing incorrectly split branch names containing dots (e.g., release.1.0) as nested config keys. (#1837)

  • Lazy pipeline vars expansion in background hooks: Background hook execution failed with lazy vars expansion due to raw string quoting and overly strict template validation. (#1855)

  • GitLab MR remote tracking: wt switch mr:N could reuse branches tracking the correct merge-request ref but on the wrong remote. (#1817)

  • Fork CI and integration target detection: Fixed CI check-runs querying the wrong repo for forks, branch tracking checking only merge config, and diverged local branches missing remote merges. (#1812)

  • Placeholder directory on non-current worktree removal: wt remove created unnecessary empty placeholder directories and slept for 1 second when removing worktrees other than the current one. (#1868, #1874)

  • Merge-tree errors silently swallowed: git merge-tree failures (invalid refs, corrupt repos) were treated as conflicts instead of propagating, triggering expensive patch-id fallback unnecessarily. (#1896)

  • Deprecated key in wrong config file: A deprecated section key (e.g., [commit-generation]) in the wrong config file (e.g., project config) was silently filtered. Now warns "Key X belongs in Y config as Z". (#1899)

  • Config migration mutex panic: Replaced unsafe unwrap() with error propagation in config deprecation migration. (#1887)

  • Hook show outside git repo: wt hook show now provides a clear error message when run outside a git repository. (#1809, thanks @noirbizarre)

Documentation

  • Help text rewritten for switch, merge, hook, and remove commands. (#1782, #1783, #1785, #1765, #1764)

  • Hook documentation restructured: types reordered by paired events, pipeline ordering rewritten with progressive examples, approval prompt shown in color. (#1763, #1756, #1766)

  • Hooks documented in user config reference. (#1845)

  • Deprecated post-create removed from documentation. (#1776)

  • Arch Linux official package added to installation instructions. (#1872, thanks @ctrl-q)

  • README template syntax fixed. Fixes #1851. (#1852, thanks @IlyaSemenov for reporting)

Internal

  • Config deprecation consolidated from two layers to one pre-deserialization TOML migration. (#1879, #1880, #1876)

  • Benchmark infrastructure extracted into wt-perf crate. (#1878)

  • wt remove approval path reuses already-loaded repo/config (~50ms savings). (#1875)

Deprecated

Old New Action
[ci] section [forge] section wt config update migrates; wt config show warns
no-ff in [merge] ff (reversed) wt config update migrates; wt config show warns
no-cd in [switch] cd (reversed) wt config update migrates; wt config show warns

All deprecated fields continue to work. Run wt config update to migrate, or wt config show for details.

Install worktrunk 0.34.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.34.0/worktrunk-installer.sh | sh && wt config shell install

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.34.0/worktrunk-installer.ps1 | iex"; git-wt config shell install

Install prebuilt binaries via Homebrew

brew install worktrunk && wt config shell install

Download worktrunk 0.34.0

File Platform Checksum
worktrunk-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
worktrunk-x86_64-apple-darwin.tar.xz In...
Read more

0.33.0

26 Mar 19:46

Choose a tag to compare

Release Notes

Improved

  • Hook execution pipelines: Post-* hooks support TOML array syntax for serial dependencies — steps execute in order, with maps within steps running concurrently. post-start = [{ install = "npm install" }, { build = "npm run build", lint = "npm run lint" }] runs install first, then build and lint in parallel. Docs (#1713)

  • Copy-ignored exclude patterns: wt step copy-ignored now skips built-in VCS metadata and tool-state directories (.bzr/, .conductor/, .entire/, .hg/, .jj/, .pi/, .pijul/, .sl/, .svn/, .worktrees/) by default. Additional excludes are configurable via [step.copy-ignored] exclude = [...] in user or project config. (#1667, thanks @shunkakinoki for #1653)

  • Copy-ignored parallelized: wt step copy-ignored directory walks run in parallel with a dedicated 4-thread pool, improving performance on multi-core systems. (#1721)

  • Alias append semantics: Aliases now use append semantics across all config layers, matching hook merge behavior. Within user config, per-project aliases append to global aliases on collision (global first). Across configs, project-config aliases also run alongside user aliases (user first, then project with approval) — previously the user version silently suppressed the project version. (#1724, #1727)

  • Agent skill discovery: The website now serves .well-known/agent-skills/ for web-based skill discovery by AI agents. (#1751)

Fixed

  • Picker alt-r skipped remove hooks: Removing a worktree via alt-r in the picker bypassed pre-remove and post-remove hooks. Pre-remove hooks now run synchronously (non-zero exit aborts removal), and post-remove hooks spawn in the background. (#1710)

  • False positive shell integration warning: wt config show reported "Found wt in ... but not detected as integration" for Nushell and Fish wrapper files that ARE the integration. Fixes #1735. (#1736, thanks @saschabratton)

  • Bare repo config path ignored: wt hook approvals add and other config commands failed to find .config/wt.toml in bare repositories because they looked relative to the current worktree instead of the primary worktree. Fixes #1744. (#1745, thanks @jrdncstr)

Documentation

  • Help text for wt step subcommands cleaned up — redundant openers removed. (#1737)

  • Experimental badge placement fixed in generated documentation. (#1742, #1729, #1734, #1746)

Internal

  • Copy-ignored built-in exclude constants consolidated. (#1738)

  • Cmd::env() accepts AsRef<OsStr> for direct path compatibility. (#1723)

  • Picker width survey snapshots for layout testing at various terminal sizes. (#1613)

Install worktrunk 0.33.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.33.0/worktrunk-installer.sh | sh && wt config shell install

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.33.0/worktrunk-installer.ps1 | iex"; git-wt config shell install

Install prebuilt binaries via Homebrew

brew install worktrunk && wt config shell install

Download worktrunk 0.33.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 install

Install via Winget (Windows)

winget install max-sixty.worktrunk && git-wt config shell install

Install via AUR (Arch Linux)

paru worktrunk-bin && wt config shell install

0.32.0

25 Mar 17:07

Choose a tag to compare

Release Notes

Improved

  • Hooks rationalized: Every lifecycle event now has a symmetric pre- (blocking) / post- (background) pair. This required one rename: post-createpre-start, reflecting that it runs before post-start as a blocking dependency step. A new post-commit hook fires in the background after commits (including squash commits during merge). post-merge is now background instead of blocking, consistent with all other post-* hooks. Configs using post-create get a deprecation warning on any wt command; run wt config update to rename automatically. The old name continues to work during the deprecation period. Docs (#1679, closes #1670, thanks @ortonomy for reporting #1571)

  • Detached worktree support: Detached HEAD worktrees can now be removed via wt remove /path/to/worktree and switched to via wt switch /path/to/worktree. The interactive picker also handles detached worktrees for both operations. (#1665, #1680, thanks @mjakl for reporting #1661)

  • In-place worktree removal in picker: Press alt-r in the wt switch picker to remove the selected worktree without leaving the picker. Currently hidden from picker legend and help text pending a cursor-reset issue (#1695). (#1677, #1696)

  • Smarter column dropping in wt list: Low-priority columns (Message, Time, Commit) are now dropped when Summary needs more space, using graduated thresholds based on priority distance. Extends the no-data column dropping from v0.31.0. (#1678)

Fixed

  • Bare repo project config ignored: .config/wt.toml placed in the primary worktree of a bare repository was not found when running commands from the bare repo root directory. Config is now loaded from the primary worktree as fallback, and accidental config in the bare repo root itself is skipped. Fixes #1691. (#1692, #1697, thanks @seakayone)

  • pre-start hook failure was non-blocking: pre-start was the only pre-* hook that warned on failure instead of aborting. All pre-* hooks now consistently use FailFast. (Breaking: pre-start hook failures that previously only warned now abort the operation.) (#1708)

  • Spurious mismatch warning for detached worktree switches: Switching to a detached worktree by path produced a "Branch-worktree mismatch" warning because the directory name was treated as a branch name. (#1686)

  • Detached worktree switch output showed redundant path: Output now shows "detached worktree" instead of repeating the directory name (which duplicated the path after @). (#1685)

  • Picker alt-r removal fixes: Picker removals now validate the worktree synchronously before removing it from the list, perform the actual git removal on a background thread to prevent UI freezing, and correctly handle detached worktrees. (#1699, #1702, #1717)

Documentation

  • Changelog and migration guide for hook rationalization. (#1693)

Internal

  • All test git commands now go through Cmd for consistent debug logging and timing traces. (#1714, #1716, #1718)

  • Worktree removal logic extracted into shared helpers. (#1683, #1700, #1701)