1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
[]
= ["tests/helpers/wt-perf", "tests/helpers/mock-stub"]
# Include mock-stub and wt-perf so `cargo test` builds their binaries
= [".", "tests/helpers/mock-stub", "tests/helpers/wt-perf"]
[]
= "worktrunk"
= "0.41.0"
= "2024"
= "1.93"
= "build.rs"
= "https://github.com/max-sixty/worktrunk"
= "https://worktrunk.dev"
= "A CLI for Git worktree management, designed for parallel AI agent workflows"
= "MIT OR Apache-2.0"
= "wt"
[]
# Allow releases from any branch (GitHub Actions uses detached HEAD)
= ["*"]
= true
= [
# Update skill version in frontmatter
{ = "skills/worktrunk/SKILL.md", = "version: [0-9.]+", = "version: {{version}}" },
]
[]
# Used only on Windows (#[cfg(windows)] in src/shell_exec.rs)
= ["which"]
[]
# Disabled: Enable testing for shells that require extra installation steps (nushell, powershell, elvish, xonsh, oil)
# tier-2-integration-tests = []
# Enable syntax highlighting for bash commands in output (requires tree-sitter)
# This is optional to avoid C compilation issues on some platforms
= ["cli", "syntax-highlighting"]
# Enables the `wt` binary and everything specific to the CLI: argument parsing,
# interactive picker, rich terminal rendering, and the markdown help pager.
# Library consumers (e.g. `worktrunk-sync`) should depend on worktrunk with
# `default-features = false` to avoid pulling these in.
= [
"dep:clap",
"dep:clap_complete",
"dep:crossterm",
"dep:env_logger",
"dep:humantime",
"dep:skim",
"dep:termimad",
]
= ["dep:tree-sitter", "dep:tree-sitter-bash", "dep:tree-sitter-highlight"]
# Enable shell/PTY integration tests (requires bash, zsh, fish installed on system)
# Includes: shell wrapper tests, PTY-based approval prompts, TUI select, progressive rendering
# These tests can cause nextest to suspend due to terminal foreground pgrp issues.
# When enabled, run with NEXTEST_NO_INPUT_HANDLER=1 to avoid suspension.
# See CLAUDE.md "Nextest Terminal Suspension" section for details.
= []
# Install git-wt binary so `git wt` works as a git subcommand
= []
[]
= "worktrunk"
= "src/lib.rs"
[[]]
= "wt"
= "src/main.rs"
= ["cli"]
# Also install as git-wt so `git wt <command>` works as a git subcommand.
# Primarily useful on Windows where `wt` conflicts with Windows Terminal.
# See: https://github.com/max-sixty/worktrunk/issues/133
# Install with: cargo install worktrunk --features git-wt
[[]]
= "git-wt"
= "src/git_wt.rs"
= ["cli", "git-wt"]
[]
= "1.0"
= "1.0"
= "1.0"
= "0.9"
= "0.3"
= { = "0.15", = false, = ["derive", "std"] }
= "0.4"
= { = "4.6", = ["derive", "unstable-ext", "wrap_help"], = true }
= { = "4.6", = ["unstable-dynamic"], = true }
= "0.5"
= { = "0.29", = true }
= { = "0.11", = true }
= { = "2.14", = ["serde"] }
= "0.11"
= "0.4"
# Only enable needed features - saves ~200KB by excluding debug, macros, multi_template
= { = "2.19", = false, = ["builtins", "serde", "std_collections"] }
= "1.11"
= { = "1.0", = ["derive"] }
= "1.0"
= "0.1"
= "3.1"
= "0.11"
= { = "0.28", = ["derive"] }
= "2"
= "0.4"
= { = "1.0", = ["preserve_order"] }
= { = "0.25", = ["serde"] }
# tree-sitter and tree-sitter-highlight should use matching versions.
# tree-sitter-bash may lag behind (0.25.x works with tree-sitter 0.26.x).
# These are optional dependencies controlled by the "syntax-highlighting" feature.
# To build without C compilation requirements, use: cargo install worktrunk --no-default-features --features cli
= { = "0.26", = true }
= { = "0.25.1", = true }
= { = "0.26", = true }
= "0.2"
= "0.1"
= "0.1.0"
= "3"
= "0.5.12"
= { = "2.2", = true }
= "1.21"
= "6.0"
= "0.2.1"
= "0.2"
= "0.2"
= "8.0"
# Cross-platform path canonicalization that avoids Windows verbatim paths (\\?\)
# which external tools like git cannot handle. On Unix, it's a no-op wrapper.
= "1.0"
= { = "0.34.1", = true }
= "2.1"
= "1.12"
= "0.4"
= "0.1"
= "6.1.0"
= "0.4.3"
= "0.6.0"
= { = "1.2.1", = ["derive"] }
= "3.27"
= "0.2"
[]
# Pinned to the 0.20.x line. Newer skim releases (the 3.x / 4.x rewrite)
# pin many of their direct dependencies with exact versions — e.g.,
# `color-eyre = "=0.6.5"`, `derive_builder = "=0.20.2"`, `kanal = "=0.1.1"`,
# `tokio-util = "=0.7.18"`, `unicode-normalization = "=0.1.25"`, and ~12
# others. Depending on skim would lock worktrunk onto each of those exact
# versions, so an upgrade blocks on upstream relaxing those pins.
# Windows picker support (worktrunk#2223) landed in skim v4.3.0 but is
# gated by the same constraint.
= { = "0.20", = true }
= { = "0.31", = false, = ["process", "signal"] }
= "0.4"
[]
= { = "9.1.0", = ["build"] }
[]
= { = "1.47.2", = ["yaml", "redactions", "filters"] }
= "0.6"
= "0.26"
= "3.27"
= "1.0"
= "0.8"
= "0.9"
= "1.12"
= "0.16"
= "0.2.2"
= { = "tests/helpers/wt-perf" }
= "3.1.0"
= "0.11"
[[]]
= "completion"
= false
[[]]
= "list"
= false
[[]]
= "cow_copy"
= false
[[]]
= "time_to_first_output"
= false
[[]]
= "remove"
= false
[]
= "forbid"
# The profile that 'dist' will build with
[]
= "release"
= "thin"
[]
# Local fork of skim-tuikit 0.6.6 carrying three small fixes. Run
# `task vendor-diff` to see the full diff against the upstream tarball.
#
# Upstream status: skim-tuikit is effectively abandoned. Upstream skim
# migrated to ratatui in skim-rs/skim#864 (merged 2026-01-12) and has
# shipped several releases on the new backend; crates.io skim-tuikit is
# frozen at 0.6.6 (Aug 2025) and will not receive another release. The
# bugs below are resolved (or moot) in ratatui-era skim but not in the
# vendored tuikit. These patches are permanent until we either migrate
# our picker to a post-ratatui skim (breaking API change in
# `src/commands/picker/`) or drop skim entirely.
#
# 1. Dropped-bytes bug in `Output::flush` — it used `write()` instead of
# `write_all()`, so when the kernel accepted a partial write (common
# under load or in tmux PTYs with small pipe buffers) the remainder of
# the buffer was dropped by the subsequent `buffer.clear()`, leaving
# the picker's first render missing whichever rows didn't fit in the
# first chunk. See vendor/skim-tuikit/src/output.rs.
#
# 2. Asymmetric alternate-screen enter/exit in partial-height mode — in
# full-height mode tuikit emits smcup on enter and rmcup on exit, but
# in partial-height mode (e.g. `height("90%")`) it skips smcup yet
# still emits rmcup on shutdown, leaving terminal artifacts. Fixed by
# tracking whether smcup was actually emitted and gating rmcup on that
# flag. See vendor/skim-tuikit/src/term.rs. Upstream bug was
# skim-rs/skim#880, resolved via the ratatui migration rather than a
# tuikit patch.
#
# 3. `usize` underflow panic in `Term::on_resize` — when the terminal is
# smaller than the picker's preferred height, `screen_height - height`
# underflowed and panicked with "attempt to subtract with overflow".
# Reachable by running `wt switch` under `script(1)` with stdin closed,
# or in any sufficiently small tmux pane. Fixed with `saturating_sub`,
# which clamps `cursor_row` to 0 — matching the full-screen fallback
# `ensure_height` already uses. See vendor/skim-tuikit/src/term.rs. No
# known upstream tracking issue; moot post-ratatui.
= { = "vendor/skim-tuikit" }