PackageTrack
Sign in Get early access

github.com/idursun/jjui

v0.10.9 #1015 most downloaded on Go modules idursun/jjui

What this package is like to depend on

Last release 23 days ago

31 Jul 2026

Ships fairly regularly

a new release about every 2 weeks

Some releases are documented

notes for 10 of 39 stable releases

Nothing withdrawn

no release was ever pulled

2 years old

267 releases · first in 2025

117 releases in the last 12 months

see the full history below

Release timeline

267 releases · Feb 2025 to Jul 2026
2026
Release Pre-release

Releases

latest 60 of 267
  1. v0.10.10-0.20260731163318-d8bff6bd65eb 31 Jul 2026 pre-release

    Nothing published for this version

  2. v0.10.10-0.20260728004732-0b467a022863 28 Jul 2026 pre-release

    Nothing published for this version

  3. v0.10.10-0.20260725165924-b3c9da4e89a3 25 Jul 2026 pre-release

    Nothing published for this version

  4. v0.10.9 24 Jul 2026
    Release notes

    A release with per-file diff navigation, targeted bookmark pushes, filtering for changed files and choice dialogs, and adaptive light and dark themes.

    Features

    Browse Individual Files in the Diff Viewer

    Press ctrl+t in the diff viewer to choose a changed file and show only its diff. Select (all files) to restore the complete diff.

    Use [ and ] to move directly to the previous or next changed file. Navigation wraps at either end of the file list and is available for revision, Details, Diff Range, and Evolog diffs.

    Push Bookmarks from Selected Changes

    The Git menu can now push all eligible bookmarks from the highlighted revision or a multi-selection in one command. Open the menu with g, press p to show push commands, then press b.

    The command includes non-conflicted local bookmarks that are new or tracked on the selected remote and deduplicates bookmark names across the selected changes.

    (#701, #702, #715, #716)

    Adaptive Light and Dark Themes

    Theme files can now define shared colors with separate light and dark overrides in a single file. Selected backgrounds can also be blended toward the active component or terminal background, with a global or per-appearance strength configured through ui.background_blend.

    For example, a theme can share role styles while changing the selected background and blend strength for each terminal appearance:

    [colors]
    ":selected" = { bold = true }
    "revset completion text" = { fg = "green" }
    "revset completion text:selected" = { fg = "bright green" }
    
    [light]
    background_blend = 0.2
    
    [light.colors]
    ":selected" = { bg = "white" }
    
    [dark]
    background_blend = 0.4
    
    [dark.colors]
    ":selected" = { bg = "bright black" }

    The active theme's blend strength can also be overridden from config.toml:

    [ui]
    background_blend = { light = 0.2, dark = 0.7 }

    jjui queries the terminal background and ANSI palette when blending is enabled and reapplies the active theme when the terminal appearance changes.

    Theme selectors now support the :selected suffix, including role-specific selectors such as revset completion text:selected. The legacy selected selector syntax remains supported.

    (#406, #637, #668, #712)

    Improvements

    Filter Changed Files in Details

    Press / in the Details view to filter changed files by a case-insensitive path substring. Matching text is highlighted, and existing file selections are preserved while filtering.

    Press enter to keep the filter active or esc to clear it.

    Filter Any Choice Dialog

    Press / to filter any choice dialog, including dialogs created by Lua scripts. The obsolete filter option has been removed from the Lua choose() helper.

    (#717)

    Fixes

    Selected Bookmark Push Eligibility

    Fixed selected bookmark pushes so local bookmarks that exist on the chosen remote but are not tracked there are not included.

    Selected Theme Styles

    Selected rows now preserve role-specific styles for text, dimmed content, and matched text. Git and Bookmarks remote selectors also receive the correct scoped styles, and custom themes no longer inherit unspecified colors from the built-in theme.

    Notes

    Minimum Supported jj Version

    jjui now requires jj v0.37 or later because the revision log uses the change_offset template keyword introduced in v0.37.

    (#714)

    What's Changed

    New Contributors

    Full Changelog: v0.10.8...v0.10.9

    Open source →
    Release notes

    v0.10.9 Latest

    Latest

    Compare

    Choose a tag to compare

    Open source →
  5. v0.10.9-0.20260705184917-1a923cf32fad 05 Jul 2026 pre-release

    Nothing published for this version

  6. v0.10.8 04 Jul 2026
    Release notes

    A release with a new revision insertion workflow and fixes for command error output and inline describe editing.

    Features

    Create Changes Between Revisions

    Added a new revisions.open_new_between action, bound by default to alt+n, for creating a new change between revisions.

    The operation uses the selected revisions as --insert-after targets and the current revision as the default --insert-before target. You can press space to pin one or more explicit insert-before revisions before applying with enter.

    For example, if A and B are selected as insert-after revisions and C is the insert-before revision, applying the operation runs:

    jj new --insert-after A --insert-after B --insert-before C

    When the same single revision is both the insert-after and insert-before target, jjui falls back to:

    jj new A

    Fixes

    Command Error Output Is Preserved

    Fixed failed command handling so non-zero command output is preserved and shown correctly after removing the confusing generic ssh.hijack_askpass hint.

    (#704)

    Inline Describe Cursor Movement

    Fixed inline describe rendering so the editor synchronizes its size before handling wrapped cursor movement. This prevents incorrect cursor/line behavior when editing descriptions in constrained layouts.

    Full Changelog: v0.10.7...v0.10.8

    Open source →
    Release notes

    v0.10.8

    Compare

    Choose a tag to compare

    Open source →
  7. v0.10.8-0.20260702162944-3145561f5d92 02 Jul 2026 pre-release

    Nothing published for this version

  8. v0.10.7 29 Jun 2026
    Release notes

    A release with a new diff range workflow, Lua workspace switching, revset completion improvements, and several UI polish fixes.

    Features

    • Added a revisions diff range operation started with alt+d (#600).
      • The initially selected revision becomes the --from target.
      • The next selected revision becomes the --to target.
      • The result is shown in jjui's built-in diff viewer.
      • x swaps the from and to targets.
      • t selects the --to target from bookmarks/tags.
      • f selects the --from target from bookmarks/tags.
    • Added Lua change_workspace support for custom workspace switching (#689, #685).
      • This lets Lua actions switch the workspace path used by subsequent jj commands.
      • The API intentionally uses change_workspace rather than change_dir to avoid implying full repository switching semantics.

    Improvements

    • Improved embedded model layout for details and evolog (#474).
      • Embedded views now push surrounding revision content up to claim the available space.
      • Opening details near the bottom of the list no longer leaves it constrained to a small remainder of the viewport.
    • Improved revset completion behavior (#703).
      • Revset history now appears before other completions instead of replacing function and alias completions after the first use.
      • Revset function arguments such as remote= are now completed.
      • Accepted function completions now keep showing the function signature.
      • Selected completion styling now paints the background across the text.
      • Added missing diff_lines completions.
    • Improved absorb target selection (#695).
      • Pressing s during absorb now selects descendants of the highlighted revision, which makes it easier to narrow the target set when many mutable commits are preselected.
      • Removed the << default >> marker from absorb UI.

    Fixes

    • Fixed flash cards being corrupted by command output containing carriage returns (#698).
      • This affects output from commands such as Git/SSH progress or error messages that use \r for in-place terminal updates.
      • Flash rendering now preserves the card border instead of letting command output overwrite it.
    • Removed the ssh.hijack_askpass hint from unrelated command failures (#704, #693).
      • The hint was originally dimmed, then removed because it was still misleading for failures unrelated to SSH prompts.
    • Stopped showing flash messages for successful interactive commands, since they could stack up and become distracting.
    • Fixed preview refresh behavior so focus-triggered refreshes do not reset the diff scroll position unnecessarily (#688).
      • This fixes losing preview reading position in tmux when focus-events is enabled.
    • Fixed bookmark behavior so m moves main.
    • Fixed describe behavior so an empty message does not trigger a stash.
    • Fixed selected substyle/theme inheritance so selected substyles render correctly.

    What's Changed

    • fix: set filesearch list half viewport height by @baggiiiie in #690
    • add change_workspace function to support workspace switching by @msgongora in #689
    • refactor(ui): introduce split container for preview rendering by @baggiiiie in #691
    • fix(flash): prevent command output from corrupting card borders by @baggiiiie in #698
    • Show revset history before completions by @baggiiiie in #703

    New Contributors

    Full Changelog: v0.10.6...v0.10.7

    Open source →
    Release notes

    v0.10.7

    Compare

    Choose a tag to compare

    Open source →
  9. v0.10.7-0.20260608222846-3411f6167d98 08 Jun 2026 pre-release

    Nothing published for this version

  10. v0.10.7-0.20260526211405-281650c7e243 26 May 2026 pre-release

    Nothing published for this version

  11. v0.10.7-0.20260521085056-e7d7264f4cb2 21 May 2026 pre-release

    Nothing published for this version

  12. v0.10.6 18 May 2026
    Release notes

    A quick maintenance update with a handful of usability improvements and scripting additions.

    • jjui now uses the real terminal cursor instead of a virtual one. Cursor rendering is now correct when focus moves between views and when returning from external commands.
    • Theme rendering has been improved so that themes now paint the backgrounds of view areas more consistently. Lua scripting also now exposes set_theme(name), which changes the active theme at runtime. This builds on the earlier light/dark runtime theme switching work, but it is not wired to the UI by default, so you need to call it from your own action.
    • jjui now sets the JJUI environment variable before invoking jj. This makes it easier to use jj conditional config specifically for commands run from inside jjui, for example:
      [[--scope]]
      --when.environments = ["JJUI"]
      [--scope.ui]
      diff-formatter = "delta"
    • Preview commands now set DFT_WIDTH, so difftastic output wraps to the preview pane width automatically.
    • Revision navigation now resolves longer or non-loaded change IDs and commit IDs through jj when they cannot be matched directly in the loaded revision list. This makes Lua navigation actions work more reliably with user-provided revision IDs.
    • The : prompt now parses quoted jj arguments correctly, so commands like new -m "message text" work as expected.
    • ctrl+n and ctrl+p are now available as list navigation aliases in more places, including revset completion/history, the target picker, and the fuzzy file finder.

    What's Changed

    • fix(exec): parse jj prompt input with shellwords (#655) by @SAY-5 in #675

    New Contributors

    Full Changelog: v0.10.5...v0.10.6

    Open source →
    Release notes

    v0.10.6

    Compare

    Choose a tag to compare

    Open source →
  13. v0.10.6-0.20260511200735-4f37ff318d47 11 May 2026 pre-release

    Nothing published for this version

  14. v0.10.5 07 May 2026
    Release notes

    This release adds several usability and customisation improvements, including dynamic theme switching, better list and input handling, new UI configuration options, and fixes for a few revision workflow issues.

    New features

    • Added dynamic light/dark theme switching, with support for terminal theme change notifications and a polling fallback where those notifications are unavailable. #641
    • Added ui.mouse_support = false to completely disable jjui mouse handling. #663 #661
    • Added ui.set_window_title = false to disable jjui's custom terminal window title. #341
    • Lua/input customisation improvements:
      • input({ value = ... }) can now open with a pre-filled value. #660 #653
      • revisions.open_set_bookmark({ value = ... }) can now pre-fill bookmark names. #652

    Improvements

    • Added ctrl+n / ctrl+p as up/down aliases in input-driven lists, so list navigation works without leaving the home row. #667 #666
    • Improved the details view styling so explanatory hints remain readable when a file row is selected.
    • Custom TOML actions can now define their binding inline with the action, instead of requiring a separate [[bindings]] entry.
      [[actions]]
      name = "new after"
      lua = '''
        jj("new", "-A", context.change_id(), "--no-edit")
        revisions.refresh()
      '''
      seq = ["\\", "n", "a"]
      scope = "revisions"

    Fixes

    • Fixed Lua scripts that chain built-in actions so each step waits for the previous one to finish before continuing.
    • Added @ and f bindings in revert mode for jumping to the working copy and ace-jump navigation. #662
    • Fixed squash preview refresh when moving to the target revision. #658
    • Fixed split hints in details view so they follow checked files instead of the currently hovered unchecked file. #659
    • Fixed revision selection after rewrite operations so focus stays on the intended row.

    What's Changed

    • refactor: inline theme styles into renderers by @idursun in #651
    • Dynamic light/dark switching by @zerowidth in #641
    • feat(bookmark): pre-fill bookmark name via open_set_bookmark value arg by @rdeaton in #652
    • feat(input): allow pre-filled value for input field by @baggiiiie in #660
    • feat(ui): config setting to completely disable mouse support by @shoce in #663
    • feat(ui): add ctrl-n/p list navigation aliases by @vvvu in #667

    New Contributors

    Full Changelog: v0.10.4...v0.10.5

    Open source →
    Release notes

    v0.10.5

    Compare

    Choose a tag to compare

    Open source →
  15. v0.10.5-0.20260503204922-720fae37a82a 03 May 2026 pre-release

    Nothing published for this version

  16. v0.10.5-0.20260427194835-3a29862bcec6 27 Apr 2026 pre-release

    Nothing published for this version

  17. v0.10.5-0.20260426224031-a9bd116a1f59 26 Apr 2026 pre-release

    Nothing published for this version

  18. v0.10.4 26 Apr 2026
    Release notes

    A quick maintenance release with a few improvements and fixes.

    Features

    Absorb operation

    Absorb is now an operation, similar to rebase, revert, duplicate, and other revision operations, instead of immediately running jj absorb with jj's default destination set.

    Default absorb targets are preselected and shown with << into >>. Use space to toggle candidate targets, enter to apply, and esc to cancel. Leaving the target set unchanged keeps the previous plain absorb behaviour; changing the set constrains absorb to the selected targets.

    (#634, #640)

    Directory entries in fuzzy file search

    Fuzzy file/path search now includes directory entries such as src/ and src/pkg/, not only leaf file paths. This makes it easier to filter or jump by directory in larger trees.

    (#642)

    Improvements

    Better theme control for selected rows

    Selected-row styling is now theme-owned for revset completion, target picker, details lists, and menu shortcuts. Themes can customise selected sub-roles such as "revset completion selected matched", "revset completion selected text", "revset completion selected dimmed", "picker selected matched", and "picker selected text".

    This fixes cases where "revset completion selected" changed the selected row background but not the selected foreground or bold styling. Default selected backgrounds for revset completion and target picker now also align with revision details.

    (#637)

    Consistent preview position toggle in details

    shift+p now toggles the preview between side and bottom positions in the details view, matching the existing behaviour in revisions, evolog, and oplog views.

    (#649)

    Fixes

    Lua revset actions outside the revset editor

    Lua scripts can now dispatch revset actions such as revset.set(...) even when the revset editor is not open. This fixes custom revision-scoped Lua actions that update the current revset.

    Stale file selection after closing details

    Closing the details view now clears stale selected-file state, and restoring an existing details operation resynchronises file selection. This fixes cases where a later command error could make Esc behave incorrectly instead of dismissing the visible flash message.

    (#643)

    Bookmark names with special characters

    Bookmark operations now match bookmark names exactly. This fixes deleting bookmarks whose names contain characters that jj would otherwise interpret as string pattern syntax, such as 1.3.63-+-json-length-fix.

    (#632, #650)

    What's Changed

    • feat(absorb): add target picker for jj absorb --into by @manusajith in #640
    • feat: include directories in path entries for fuzzy_files by @baggiiiie in #642
    • Remove unused struct fields, methods, and functions by @nikosavola in #648
    • fix(details): add shift+p binding for preview_toggle_bottom by @ansel1 in #649
    • fix(ui): unable to dismiss flash message after split command error by @baggiiiie in #643
    • fix(bookmarks): match bookmark names exactly by @baggiiiie in #650

    New Contributors

    Full Changelog: v0.10.3...v0.10.4

    Open source →
    Release notes

    v0.10.4

    Compare

    Choose a tag to compare

    Open source →
  19. v0.10.4-0.20260423203718-96911e3f14b3 23 Apr 2026 pre-release

    Nothing published for this version

  20. v0.10.4-0.20260419202814-f136b9c82bcb 19 Apr 2026 pre-release

    Nothing published for this version

  21. v0.10.4-0.20260419005334-344b4b465e66 19 Apr 2026 pre-release

    Nothing published for this version

  22. v0.10.3 17 Apr 2026
    Release notes

    This release includes new Lua customisation support, repo-local configuration, preview sizing improvements, and a set of UI fixes. There were also some internal changes around action routing and rendering, so if something feels broken or behaves differently, please let me know.

    Features

    Repository-local configuration

    Repository-local configuration is now supported. You can add .jjui/config.toml or .jjui/config.lua to a repository to customise jjui for that repo while still inheriting global configuration. This is useful for repo-specific revsets, limits, bindings, and Lua configuration. JJUI_CONFIG_DIR remains a hard override when set. #609

    Lua editor metadata

    Lua scripting now has installable editor metadata. Run jjui --install-lua-types to write generated types.lua metadata to your jjui config directory and create .luarc.json for LuaLS when one does not already exist. This gives Lua users autocomplete and basic type information for config.lua, plugins, and embedded Lua scripts. #617

    Preview pane sizing

    Preview commands now receive the preview pane size through COLUMNS and LINES. Width-sensitive tools such as difft, and configured delta setups, can now wrap output to the jjui preview pane instead of the outer terminal width. #608

    Layered revision operations

    Revision operations can now be layered more naturally, with active operation scopes reflected in key handling and help/status display. Active key bindings are grouped by their current scope, and overridden bindings are shown with strikethrough, making it easier to understand which shortcuts are available in nested operations. #625

    Improvements

    Inline describe customisation

    Inline describe is now easier to customise from bindings and Lua. You can bind revisions.inline_describe.new_line separately from revisions.inline_describe.accept, and accept can take force = true for workflows that intentionally update immutable revisions. #260

    [[bindings]]
    action = "revisions.inline_describe.accept"
    key = "enter"
    scope = "revisions.inline_describe"
    
    [[bindings]]
    action = "revisions.inline_describe.new_line"
    key = "shift+enter"
    scope = "revisions.inline_describe"
    • jjui now refreshes only once on startup instead of doing duplicate initial refresh work.
    • Git operation screens now close when the underlying command starts executing, making the transition from choosing an action to running it clearer.
    • Debug logging now uses JJUI_DEBUG instead of the generic DEBUG environment variable, reducing the chance that unrelated shell configuration accidentally enables jjui debug behaviour.

    Fixes

    • Fixed paste handling in Bubble Tea v2 text-input flows, including pasting into the bookmark filter input. #601, #597
    • Fixed rebase source plus insert-between so jjui generates the correct jj rebase -s <source> --insert-before <rev> --insert-after <rev> command. #598
    • Fixed diff rendering for tab-indented lines. The diff view now preserves indentation and handles wrapping and horizontal scrolling correctly for tab-expanded content. #606, #604
    • Fixed command history rendering so long histories are not clipped at the top border, including exact-fit cases. Flash and command-history overlays also layer more cleanly above the status area. #626, #622
    • Fixed fuzzy file overlay ordering so the fuzzy file UI appears in the correct layer.
    • Fixed clipped rendering for partially visible list items and fallback messages while horizontally scrolled.
    • Fixed revset alias parameter metadata preservation.

    What's Changed

    • Handle Bubble Tea paste messages in text-input flows by @shardulbee in #601
    • Set preview subprocess size via env by @OliverJAsh in #608
    • add repo config file which overrides global config.toml by @nickchomey in #609
    • fix(diff): preserve tab indentation in diff view by @baggiiiie in #606
    • Update installation instruction for archlinux by @TeddyHuang-00 in #613
    • refactor: replace owner-based dispatch with scope-layer routing by @idursun in #625
    • fix: command history clipping by @idursun in #626
    • fix(set_parents): leak set_parents operation key scope by @baggiiiie in #628
    • fix(details): sync details selection for routed intents by @baggiiiie in #627
    • fix: add back esc to clear selected revisions by @baggiiiie in #629
    • fix(revisions): avoid toggle-select panic on empty revisions by @baggiiiie in #636
    • feat(lua): install Lua meta types by @idursun in #617

    New Contributors

    Full Changelog: v0.10.2...v0.10.3

    Open source →
    Release notes

    v0.10.3

    Compare

    Choose a tag to compare

    Open source →
  23. v0.10.3-0.20260413222101-2905a8de74d1 13 Apr 2026 pre-release

    Nothing published for this version

  24. v0.10.3-0.20260406001223-96f66bf90750 06 Apr 2026 pre-release

    Nothing published for this version

  25. v0.10.3-0.20260402224025-d5647fca2496 02 Apr 2026 pre-release

    Nothing published for this version

  26. v0.10.3-0.20260330221952-011f87aaca4d 30 Mar 2026 pre-release

    Nothing published for this version

  27. v0.10.3-0.20260322200917-24737015838c 22 Mar 2026 pre-release

    Nothing published for this version

  28. v0.10.3-0.20260317100253-2d1d51af2aee 17 Mar 2026 pre-release

    Nothing published for this version

  29. v0.10.2 16 Mar 2026
    Release notes

    Quick release to continue the release early, release often streak.

    Features

    • Custom diff and preview content — You can now use diff.show() and ui.preview.show() in your Lua actions to display custom command output in the diff and preview panels. (#593)

    Bug Fixes

    • Rebase source + insert between — Rebase now correctly uses -s (source) instead of -r when combining source mode with insert-between. (#598)
    • Missing actions in status bar — Actions with the same name in different scopes (e.g. revset.edit and revisions.edit) are no longer hidden from the status bar. (#595)
    • Misaligned lines across terminals — Terminals handle Unicode width calculation differently — Ghostty enables grapheme clustering by default while Kitty does not. We now detect the terminal's width mode and calculate widths accordingly, fixing rendering in both. (#592)
    • Operation action overrides — Some built-in actions during operations couldn't be overridden in config.lua. For example, revisions.details.diff, revisions.evolog.diff, and revisions.rebase.* actions can now be properly overridden. (#586, #598)

    What's Changed

    • fix(render): detect terminal width method by @idursun in #592
    • feat: add diff and preview show intents by @idursun in #593

    Full Changelog: v0.10.1...v0.10.2

    Open source →
    Release notes

    v0.10.2

    Compare

    Choose a tag to compare

    Open source →
  30. v0.10.2-0.20260311231227-6a93588646ba 11 Mar 2026 pre-release

    Nothing published for this version

  31. v0.10.1 11 Mar 2026
    Release notes

    Everything from v0.10.0 with additional bug fixes and some improvements.

    Improvements

    • We show jjui: press a key to continue message after a shell command is run. The underlying interactive detection code has been improved with additional signals to skip showing that message if the executed command started an interactive PTY.

    Fixes

    • Fixed slow starts on Windows machines. #581
    • Fixed improper rendering of double-width characters as well as misalignment of borders when double-width characters are present. #526

    Full Changelog: v0.10.0...v0.10.1

    Open source →
    Release notes

    v0.10.1

    Compare

    Choose a tag to compare

    Open source →
  32. v0.10.1-0.20260309214502-f5c713682077 09 Mar 2026 pre-release

    Nothing published for this version

  33. v0.10.0 08 Mar 2026
    Release notes

    Wow, a major release after a very long time. As promised, v0.10 is ready, and it comes with breaking changes.

    First, thank you to everybody who contributed code, bug reports, ideas, and testing for this release. In particular, thanks to @baggiiiie for various features and fixes, @nickchomey for contributions and continuous feedback, and @vic for updating the documentation website. Thanks as well to everyone else for various code contributions, reporting issues, and verifying fixes.

    We changed a lot in v0.10, but the biggest shift is that we finally got rid of some legacy configuration and moved to a unified actions + bindings model. Old concepts like [custom_commands] and [leader] are now replaced by a more consistent system built around actions, bindings, and first-class support for leader-style key sequences.

    This release also introduces config.lua, which makes it much easier to customise and extend jjui with real scripting instead of only static configuration. Between config.toml, config.lua, Lua actions, and bindings, much more of the UI can now be customised in one consistent way.

    The documentation has been updated with migration notes and examples such as the Lua Cookbook.

    From my testing it looks ready, but I am sure more rough edges will show up once more people start using it, so please keep reporting issues as you find them.

    ⚠️ Breaking Changes

    v0.10 replaces the legacy keybinding and customisation model with the new actions + bindings system.

    • [keys] configuration is no longer used.
    • [custom_commands] is replaced by [[actions]] and [[bindings]].
    • [leader] sequences are replaced by sequence bindings via seq.

    If you have an existing configuration, plan to migrate it rather than expecting a drop-in upgrade from v0.9.x.

    ✨Highlights

    • Unified actions + bindings system. Keyboard input now flows through a single dispatch pipeline, default bindings are declared in TOML, actions are discoverable, and custom behaviour can be defined in both TOML and Lua.
    • Much stronger scripting support. Lua setup now receives the full config plus runtime context, generated intent-backed actions replace handwritten drift-prone bridges, and new helpers like wait_close() and wait_refresh() make multi-step scripts more predictable.
    • Upgraded TUI foundations. Moving from Bubble Tea v1 to v2 brings better terminal support, a new rendering engine for better performance, and better input handling, including support for bindings like ctrl+space and dedicated shift+... style keys.
    • Improved diff and selection workflows. The diff view now supports word wrap, revisions and details support modifier-based mouse selection, and several details and evolog interactions are more consistent.

    🚀 New and Improved

    Command History

    • Added command history, available with shift+w, to review dismissed command runs together with their output.
    • Moved running command information out of the status area and into dedicated flash messages, so the command and its output are now shown together in one place.

    Help and Status

    • Reintroduced a dedicated Help view for full keybinding discovery, with filtering and scrolling, alongside the existing inline help.
    • Changed status/help binding presentation to column-major order so related bindings are easier to scan.

    Lua and Configuration

    • Shipped the unified actions + bindings architecture introduced in v0.10.
    • Exposed the full config object to Lua setup, including runtime context such as repository path via config.repo, and terminal state via config.terminal.dark_mode, config.terminal.fg, and config.terminal.bg.
    • Standardised closeable action naming around open_* and aligned apply/close semantics for more predictable scripted workflows.

    Oplog

    • Added quick search to oplog and shared the search behavior with revision search.

    Evolog

    • Changed evolog preview defaults to show interdiff output, matching jj evolog -p more closely.

    Abandon

    • Added s in abandon mode to target descendants of the selected revision(s).

    Revset

    • Kept revset editing open when the expression is invalid, improving iteration while editing.
    • Improved revset editing so function completion inserts ( when appropriate, while the function list display is cleaner and less noisy.

    Diff

    • Added word wrap in the diff view, with explicit wrapped and unwrapped modes plus soft-wrap-aware scrolling.
    • Added g and G in the diff view to jump to the top and bottom.

    Details and Revisions

    • Added Ctrl+click single-item toggle and Alt+click range selection in revisions and details.
    • Added a revisions.details.select_file action for finer control in details workflows.

    🛠️ Fixes

    • Fixed rendering issues with double-width characters.
    • Simplified divergent revision handling by using change_id/offset directly from the jj log prefix template.
    • Fixed git push --all behaviour for deleted bookmarks and corrected related command descriptions.

    ⚙️ Internal Updates

    • Upgraded to Bubble Tea v2.
    • Replaced remaining cellbuf usage with ultraviolet.
    • Hardcoded model-level key handling has been removed in favor of dispatcher-driven intents.
    • Continued internal cleanup around rendering, overlays, display context, and generated action plumbing to support the new architecture.

    What's Changed

    • Unified Actions + Bindings system by @idursun in #533
    • feat(oplog): add QuickSearch to oplog, share logic with revision search by @baggiiiie in #521
    • fix: add missing keys in bindings by @baggiiiie in #538
    • feat(evolog): change default evolog command to show interdiff by @academician in #539
    • fix: add back esc to clear checked revisions by @baggiiiie in #541
    • remove gh-pages workflow from main branch. by @vic in #542
    • docs: fix readme links by @baggiiiie in #549
    • Update CONTRIBUTING.md for documentation by @vic in #547
    • feat(lua): add "filter" and "ordered" option to choose lua api by @baggiiiie in #548
    • feat(abandon): use s for selecting descendants by @idursun in #544
    • feat: add change_offset in jj log prefix template for divergent revisions by @baggiiiie in #550
    • fix: make bookmark input visible when user has custom template-aliases by @baggiiiie in #551
    • fix(evolog): keep restore mode navigation on revisions and esc close by @baggiiiie in #554
    • Expose full config to Lua setup and add runtime context (repo + terminal) by @idursun in #553
    • feat(flash): command history by @idursun in #556
    • Update to bubbletea v2 by @idursun in #558
    • Ctrl+click and Alt+click for single and range selection by @idursun in #563
    • feat: add ( to functions when autocompleted by @nickchomey in #564
    • feat(status): change display to column major order by @baggiiiie in #569
    • fix: remove parentheses from functions list, but add when autocomplete by @nickchomey in #567
    • fix(git): prevent panic when opening git menu with no selected revision by @baggiiiie in #571
    • Refactor/Lua bridge by @idursun in #572
    • fix(ui): guard against nil commit in OpenBookmarks intent by @baggiiiie in #573
    • feat(diff): word wrap by @idursun in #575
    • Add pgup/pgdown keybindings to evolog and details by @academician in #576
    • feat(lua): make default actions overridable and expose jjui.builtin.* by @idursun in #577
    • feat(help): add "help view" bound to f1 by @idursun in #578

    New Contributors

    Full Changelog: v0.9.12...v0.10.0

    Open source →
    Release notes

    v0.10.0

    Compare

    Choose a tag to compare

    Open source →
  34. v0.9.13-0.20260305212109-00763cae4922 05 Mar 2026 pre-release

    Nothing published for this version

  35. v0.9.13-0.20260228211458-e2d42a32c5be 28 Feb 2026 pre-release

    Nothing published for this version

  36. v0.9.13-0.20260226230134-e07315fa5d25 26 Feb 2026 pre-release

    Nothing published for this version

  37. v0.9.13-0.20260218151916-0beea7eef4d3 18 Feb 2026 pre-release

    Nothing published for this version

  38. v0.9.13-0.20260217232556-af57886ece21 17 Feb 2026 pre-release

    Nothing published for this version

  39. v0.9.13-0.20260217230513-36c0c3dc3ebc 17 Feb 2026 pre-release

    Nothing published for this version

  40. v0.9.12 17 Feb 2026

    Nothing published for this version

  41. v0.9.12-0.20260214190755-89792cbf1f16 14 Feb 2026 pre-release

    Nothing published for this version

  42. v0.9.12-0.20260214124727-9212391f8ef7 14 Feb 2026 pre-release

    Nothing published for this version

  43. v0.9.11 10 Feb 2026

    Nothing published for this version

  44. v0.9.11-0.20260207222657-289fbd0cc5dc 07 Feb 2026 pre-release

    Nothing published for this version

  45. v0.9.11-0.20260207094738-af4144258896 07 Feb 2026 pre-release

    Nothing published for this version

  46. v0.9.11-0.20260204152914-375b46c62ec6 04 Feb 2026 pre-release

    Nothing published for this version

  47. v0.9.11-0.20260201224644-884b5c5a87e8 01 Feb 2026 pre-release

    Nothing published for this version

  48. v0.9.11-0.20260127163139-0b4efd3f3f73 27 Jan 2026 pre-release

    Nothing published for this version

  49. v0.9.11-0.20260122120315-ff5902cf16a1 22 Jan 2026 pre-release

    Nothing published for this version

  50. v0.9.11-0.20260121215624-0e16bf29d557 21 Jan 2026 pre-release

    Nothing published for this version

  51. v0.9.11-0.20260120001111-e3900cc3a8ce 20 Jan 2026 pre-release

    Nothing published for this version

  52. v0.9.11-0.20260119205311-eb51e41ddf6e 19 Jan 2026 pre-release

    Nothing published for this version

  53. v0.9.11-0.20260118200621-1fbad6dc3133 18 Jan 2026 pre-release

    Nothing published for this version

  54. v0.9.11-0.20260117233337-8b29b21273ce 17 Jan 2026 pre-release

    Nothing published for this version

  55. v0.9.10 15 Jan 2026

    Nothing published for this version

  56. v0.9.10-0.20260115194216-e6dd7df5b4c7 15 Jan 2026 pre-release

    Nothing published for this version

  57. v0.9.10-0.20260109203746-2809358a3607 09 Jan 2026 pre-release

    Nothing published for this version

  58. v0.9.9 08 Jan 2026

    Nothing published for this version

  59. v0.9.9-0.20260106155036-b7ef867e353a 06 Jan 2026 pre-release

    Nothing published for this version

  60. v0.9.9-0.20260104002502-1507698ebdc1 04 Jan 2026 pre-release

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive