github modem-dev/hunk v0.18.0

4 hours ago

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, and c comments 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

Full Changelog: v0.17.7...v0.18.0

Don't miss a new hunk release

NewReleases is sending notifications on new releases.