Hunk 0.24: beyond the diff
Hunk 0.24 brings complete-file and directory browsing, a live workspace compass, npm-installed extensions, and version-matched agent skills into your terminal review workspace. Worker highlighting makes startup interaction smoother, while a round of memory fixes keeps large reviews and long-running sessions leaner.
For npm- and curl-managed installs:
hunk update 0.24.0
npm install -g hunkdiff@0.24.0Homebrew availability will be verified after publication; until then, Homebrew propagation is pending. The commands above select the exact release for npm- and curl-managed installations.
Explore the source and find your next review
hunk open shows complete syntax-highlighted files and browses directories with lazy loading, live refresh, and keyboard or mouse navigation. Inspect the surrounding source without manufacturing a diff. The new read-only workspace status view brings together staging state, tracked and untracked changes, and sibling worktrees, with navigation into history and full diff reviews. Static and versioned JSON status output are available too. #1148, #1067
Automatic diff layout now uses the space actually left after side panes and padding: opening a pane can switch to unified, and closing it can restore split. auto_split_min_width controls the threshold, while scroll_off keeps surrounding context visible during line navigation. Binary files remain reachable through file navigation and sidebar clicks, and the sidebar follows held file-navigation keys without overriding ordinary manual scrolling. #1170, #1109, #1178, #1085
Keep reviews responsive—and let old reviews go
Syntax highlighting runs in a worker by default, with grammar warmup during startup to reduce the input stall after the review first appears. Large-diff highlight failures use bounded retries rather than restarting on every scroll. #1105, #785
Live reloads no longer retain every previous review's files and render state. Nonwrapped reviews reuse geometry across terminal resizes, and keyboard navigation leaves copy-selection content lazy rather than materializing it eagerly. Sessions also stop repeatedly submitting a rejected review to an unchanged daemon while retaining recovery when the review or daemon changes. #1201, #1200, #1202, #1199
Review reliability improves too: wheel scrolling no longer leaves comments targeting stale lines, notes survive reloads that temporarily omit their files, suspended windows keep their sessions registered, and terminal-editor handoffs release Hunk's stdin reader before launching the editor. #1143, #1164, #1131, #1134, #1165
Performance note: release benchmarks have no gated regressions against 0.23.0 or beta.1. The known sidebar-follow tradeoff from beta.1 remains relative to beta.0: navigation p95 is 42.74 ms versus beta.0's 36.35 ms, beta.1's 44.55 ms, and 0.23.0's 46.32 ms. This preserves correct sidebar following during held navigation and resizing.
Easier extensions, agent setup, and shell navigation
hunk extension install accepts npm packages—including scopes, versions, ranges, and tags—alongside Git sources, without running npm lifecycle scripts. Folder-local package imports work in compiled Hunk binaries. Extensions gain generation-scoped presentation filters and independent left/right pane controls. #1162, #1163, #1118, #1171
Install agent pointer skills through the skills CLI; hunk skill show supplies the full instructions matched to your installed Hunk version. Bash and Zsh completions help discover commands, flags, and supported values. The note-composer save shortcut is now remappable, and hunk gh --help and the docs cover more of the available review workflows. #1167, #1157, #962, #1186
Compatibility notes
- Default theme:
github-dark-defaultis the default again. Settheme = "terminal", pass--theme terminal, or use the theme picker to keep following your terminal palette. This differs from 0.23 and the 0.24 betas. #1195 - Automatic layout: the default threshold is 160 available diff columns, excluding panes and outer padding. Configure
auto_split_min_widthor select explicitsplit/unifiedmode to override it. - Navigation context:
scroll_offdefaults to five rows;scroll_off = 0or--scroll-off 0restores edge-only scrolling. - Highlighting:
--fastis now a no-op and will be removed in a later release. Windows compiled binaries and custom themes withsyntax_scopescontinue to highlight inline. - Patch validation: nonempty input without recognizable file changes now fails explicitly instead of silently opening an empty review. Genuinely empty reviews have their own message. #1183, #1182
- Extensions: the public API is version 31. Gate new APIs on
hunk.apiVersionwhen supporting older Hunk versions. - Persistent state: Hunk uses the XDG state directory while preserving existing state and global extension locations. Agent notes start hidden; use the review controls to reveal them.
- Runtime requirements: npm installations require Node.js 22 or newer; standalone binaries do not require Node.js.
Community contributors
- @0xferrous fixed combined conflict diffs and plain-text pager output through pipes. #1102, #1112
- @Ajay-Satish-01 made the note-composer save shortcut remappable. #962
- @andreifilip123 added the configurable context margin around the current line. #1109
- @andrewloux improved macOS test portability and kept noted files recoverable across reloads. #1146, #1131
- @bottercode fixed lockfile refresh during release versioning. #1158
- @brettinternet added generation-scoped extension presentation filters. #1118
- @edenbuilds validated extension VCS watch hooks before registration. #1080
- @elucid fixed installer release lookup, clarified session-selector errors, and sped up terminal-theme refresh. #1140, #1149, #1130
- @HackAttack fixed annotated-note navigation, wheel-scroll comment targets, and suspended-session registration. #1147, #1143, #1134
- @igshehata preserved text entered immediately after opening a note composer. #1125
- @LandonSchropp added hunk-verdict and hunk-backup to the extension directory. #1137
- @masonmcelvain made worker highlighting the default and warmed grammars during startup. #1105
- @mikemikimike moved persistent state to the XDG state directory. #920
- @mvanhorn fixed folder-extension package imports in compiled binaries. #1163
- @silvioprog added Bash and Zsh shell completions. #1157
- @strawberry-little-bear corrected terminal-width handling for grapheme Prepend characters. #1153
- @teepark made automatic layout depend on available diff width and added its configurable threshold. #1170
- @Lawgk kept the sidebar selection visible during held file navigation and terminal resizing. #1085
- @rnihesh fixed live reloads retaining every previous review's files and render state. #1201
All merged pull requests
-
publish v0.23.0 notes by @benvinegar in #1135
-
bump taiki-e/install-action from 2.86.3 to 2.87.14 in the github-actions group by @dependabot[bot] in #1139
-
adopt new hunk logo, flat favicon, and brand guide by @benvinegar in #1145
-
explain selector misses instead of protocol-validation-failed by @elucid in #1149
-
refresh terminal colors via direct OSC probe by @elucid in #1130
-
pass the lifecycle, trust prompt and jj source tests on macOS by @andrewloux in #1146
-
Add hunk-mark-read to hunk-extension marketplace by @benvinegar in #1155
-
measure grapheme Prepend scalars with the cluster that follows them by @strawberry-little-bear in #1153
-
compact same-directory rename labels by @benvinegar in #1156
-
add complete-file viewer and lazy directory browser by @benvinegar in #1148
-
Fix/draft note focus transition by @igshehata in #1125
-
render conflicted Git diffs by @0xferrous in #1102
-
handle plain text output through pipes by @0xferrous in #1112
-
add generation-scoped presentation scope API by @brettinternet in #1118
-
bound and surface large-diff highlight retries by @benvinegar in #785
-
Add hunk-guide and hunk-verdict to hunk-extension marketplace by @benvinegar in #1159
-
Highlighting: Make the worker the default and warm it during startup by @masonmcelvain in #1105
-
reveal note composers at the bottom edge by @benvinegar in #1160
-
preserve filter focus when results reappear by @benvinegar in #1161
-
reject non-callable VCS operation watch hooks by @edenbuilds in #1080
-
stop annotated navigation skipping notes drawn outside hunks by @HackAttack in #1147
-
refresh bun.lock when versioning packages by @bottercode in #1158
-
Add LandonSchropp/hunk-verdict and hunk-backup to the extension directory by @LandonSchropp in #1137
-
add scroll_off setting for viewport margin by @andreifilip123 in #1109
-
keep a session connected when a reload leaves out a noted file by @andrewloux in #1131
-
stop wheel scroll and stale hover from drifting comment targets off the highlighted line by @HackAttack in #1143
-
restore comment targets after batched wheel returns by @benvinegar in #1164
-
add bash and zsh shell completions by @silvioprog in #1157
-
release stdin before launching terminal editors by @benvinegar in #1165
-
support managed npm package sources by @benvinegar in #1162
-
add a workspace compass with sibling worktrees by @benvinegar in #1067
-
link GitHub release notes after hunk update by @benvinegar in #1166
-
load folder-local packages in compiled binaries by @benvinegar in #1163
-
let note composer save be remapped by @Ajay-Satish-01 in #962
-
reveal pane edges independently by @benvinegar in #1171
-
distribute version-matched agent skills via skills CLI by @benvinegar in #1167
-
trim verbose README prose by @benvinegar in #1174
-
keep sessions alive while window is suspended by @HackAttack in #1134
-
store persistent state under XDG state directory by @mikemikimike in #920
-
isolate suspension test daemon port by @benvinegar in #1176
-
clarify configuration overrides and examples by @benvinegar in #1175
-
prepare 0.24.0-beta.0 by @benvinegar in #1177
-
keep binary files reachable by file navigation and clicks by @bottercode in #1178
-
reject unrecognized nonempty patch input by @benvinegar in #1183
-
Add hunk-why to hunk-extension marketplace by @benvinegar in #1179
-
distinguish empty reviews from filtered files by @benvinegar in #1182
-
keep the selected file visible in the sidebar during held navigation by @Lawgk in #1085
-
allow published prereleases in changelog smoke by @benvinegar in #1185
-
correct stale facts and fill gaps across hunk.dev docs by @benvinegar in #1186
-
prepare 0.24.0-beta.1 by @benvinegar in #1187
-
publish 0.24.0-beta.1 notes by @benvinegar in #1194
-
restore GitHub Dark Default as the default theme by @benvinegar in #1195
-
reuse nowrap geometry across terminal resizes by @benvinegar in #1200
-
stop resubmitting rejected reviews to unchanged daemons by @benvinegar in #1199
-
stop reloads from retaining every previous review by @rnihesh in #1201
-
Add hunk-checkpoint to hunk-extension marketplace by @benvinegar in #1189
-
keep copy-selection rows lazy during navigation by @benvinegar in #1202
-
add brand page and logo downloads by @benvinegar in #1203
-
Prepare stable 0.24.0 by @benvinegar in #1205
Release notes: https://hunk.dev/changelog/0.24/
Full changelog: v0.23.0...v0.24.0