What's Changed
Highlights
Hunk 0.18.0 makes reviews more precise, customizable, and extensible—while improving performance and reliability across large repositories and diverse terminals.
- A full extension platform. Install TypeScript extensions that add VCS backends, commands, sidebars, dialogs, interactive file views, themes, and workspace actions.
- Line-level review and commenting. A visible cursor moves with
j/k, andccomments exactly where you are looking. - Richer agent context. Experimental STML notes provide structured, terminal-native explanations with preview and layout tools.
- Full reviews from pipelines. Piped diffs retain navigation, filtering, layouts, sidebars, and other review controls.
- A UI that follows your preferences. Remapped shortcuts appear correctly, view settings can be saved, and tabs and syntax colors are configurable.
- Faster and more dependable reviews. Watch mode uses less CPU, navigation retains less memory, wrapped Unicode is faster, and CJK and emoji filenames render correctly.
All 83 merged pull requests
- docs: update Homebrew release guidance by @benvinegar in #515
- fix(config): read Windows user-profile config by @benvinegar in #533
- feat: STML terminal markup for agent comments — guide, preview, live-width feedback by @benvinegar in #512
- fix: upgrade OpenTUI for renderer stability by @benvinegar in #538
- fix: reduce retained geometry memory in large reviews by @matthew-hre in #521
- feat(ui): prompt to save view preferences on quit by @benvinegar in #468
- feat(watch): replace 250 ms watch polling with evented filesystem observation by @elucid in #531
- chore(benchmarks): backfill 0.17.1 release snapshot by @benvinegar in #547
- fix(ui): copy selection misaligns on wide (CJK) characters by @endotakuya in #548
- fix(cli): reject partially numeric line and hunk values by @fallintoplace in #535
- fix(ui): wrap agent note text by terminal cells by @kataokatsuki in #567
- fix(pager): extend row backgrounds to host edge by @benvinegar in #571
- fix(session): refresh daemons for STML payloads by @benvinegar in #572
- docs(markup): clarify native note composition by @benvinegar in #573
- feat(theme): support raw Shiki syntax scopes by @benvinegar in #570
- fix(theme): surface legacy syntax translation by @benvinegar in #574
- fix(review): save draft notes exactly once under rapid Ctrl+S by @endotakuya in #581
- fix(ui): distinguish root files in sidebar by @BowlOfSoup in #519
- fix(ui): restore threaded rendering on macOS by @benvinegar in #539
- feat: make diff tab width configurable by @benvinegar in #588
- feat(stml): require experimental opt-in by @benvinegar in #589
- fix(cli): lazy-load OpenTUI for headless commands by @benvinegar in #590
- perf(ui): optimize terminal cell width measurement (#579) by @kazu728 in #586
- feat(skill): generate the hunk-review skill from a typed agent surface by @benvinegar in #596
- fix(update): show Nix-aware upgrade guidance by @benvinegar in #598
- perf(ui): optimize wrapped Unicode rendering by @benvinegar in #601
- docs(website): add Starlight documentation site by @benvinegar in #603
- feat(website): unify marketing and docs by @benvinegar in #604
- feat(extensions): experimental TypeScript extension system (phase 1) by @benvinegar in #599
- feat(website): unify marketing and docs design by @benvinegar in #605
- feat(extensions): folder extensions with package.json manifests by @benvinegar in #606
- Extensions can replace the sidebar with custom React components by @benvinegar in #609
- feat(website): add community videos and an agent-review section to the landing page by @benvinegar in #610
- feat(extensions): keyboard commands and additive multi-sidebar views by @benvinegar in #611
- feat(ui): drive menus and help from the command table, and add an Extensions menu by @benvinegar in #614
- fix(session): support IPv6 loopback broker URLs by @benvinegar in #613
- feat(extensions): give command handlers the review selection by @benvinegar in #616
- fix(website): track documentation visits by @benvinegar in #620
- feat(extensions): dialog primitives for command handlers by @benvinegar in #617
- feat(extensions): inject resolved sidebar keybindings by @benvinegar in #615
- docs: extract theme configuration guide by @benvinegar in #622
- feat(extensions): expand event surface by @benvinegar in #619
- fix(nix): keep flake evaluable on nixpkgs without x86_64-darwin by @elucid in #621
- fix(website): upgrade Astro security dependencies by @benvinegar in #623
- Support .tsx and .jsx extension entries in discovery by @benvinegar in #625
- refactor(architecture): establish application boundaries by @benvinegar in #624
- feat(extensions): expose public hunk summaries on file views by @benvinegar in #626
- fix(deps): upgrade shell-quote security patch by @benvinegar in #627
- docs(extensions): commit the scrollbox ref contract for custom sidebars by @benvinegar in #630
- feat(extensions): give command handlers guarded review navigation by @benvinegar in #629
- refactor(session): consolidate internal session modules by @benvinegar in #628
- docs(website): add a self-contained Extend section to the docs site by @benvinegar in #631
- Restyle community video cards as paused YouTube embeds by @benvinegar in #641
- docs(website): add keybindings guide to the docs site by @benvinegar in #634
- feat(website): center and widen the docs shell on wide viewports by @benvinegar in #642
- feat(website): rebuild the landing page feature section around real TUI captures by @benvinegar in #643
- feat(extensions): add custom file previews by @benvinegar in #632
- docs(extensions): document custom file previews by @benvinegar in #644
- fix(ui): step keys scrolling multiple lines after a review-stream click by @HackAttack in #645
- feat(pager): give pager mode the full review controls by @HackAttack in #647
- ci(release): switch npm publishing to trusted publishing (OIDC) by @benvinegar in #640
- fix(ui): route keys by ownership so modal surfaces stop double-handling them by @elucid in #649
- refactor(ui): isolate extension dialog lifecycle by @benvinegar in #651
- ci(release): verify generated prerelease notes by @benvinegar in #654
- perf(ui): skip inactive file-view preparation by @benvinegar in #652
- fix(ui): keep file navigation from losing the file it just jumped to by @elucid in #655
- chore(release): prepare 0.18.0-beta.0 by @benvinegar in #653
- chore(release): link changelog pull requests by @benvinegar in #657
- chore(release): finalize 0.18.0-beta.0 metadata by @benvinegar in #660
- fix(release): include provenance in platform packages by @benvinegar in #661
- chore(deps): bump the github-actions group with 4 updates by @dependabot[bot] in #659
- fix(ui): preserve file headers on narrow terminals by @benvinegar in #668
- test(git): isolate fixture repos from the developer's Git config by @HackAttack in #679
- fix(git): display quoted Unicode paths by @benvinegar in #670
- fix(ui): preserve syntax state across folded hunks by @benvinegar in #669
- refactor(ui): isolate file presentation state by @benvinegar in #656
- feat(review): mark the current line and anchor notes to it by @loganthomas in #662
- feat(extensions): let file views refresh their prepared layouts by @benvinegar in #673
- feat(extensions): add host-mediated workspace document reads and writes by @benvinegar in #674
- feat(extensions): add interactive file-view modes by @benvinegar in #675
- feat(ui): show changed-file count in menu bar by @benvinegar in #684
- fix(ui): bound current-line navigation costs by @benvinegar in #685
- chore(release): prepare 0.18.0 by @benvinegar in #687
New Contributors
- @matthew-hre made their first contribution in #521
- @endotakuya made their first contribution in #548
- @fallintoplace made their first contribution in #535
- @kataokatsuki made their first contribution in #567
- @BowlOfSoup made their first contribution in #519
- @kazu728 made their first contribution in #586
- @HackAttack made their first contribution in #645
- @loganthomas made their first contribution in #662
Full Changelog: v0.17.7...v0.18.0