Jujutsu X

Jujutsu X provides a native VS Code experience for the Jujutsu (jj) version control
system—featuring an interactive commit graph, drag-and-drop rebasing, conflict resolution, and more.
Jujutsu X is based on Jujutsu Kaizen.
Supported systems
- Linux - Fully supported
- Windows - Should mostly work
- macOS and other systems - Should mostly work
🚀 Key features
- Interactive commit graph with elided commits like the
jj CLI
- Efficient: Defaults to showing up to 500 commits, can be configured to show more
- Drag-and-drop for rebase, squash, move bookmarks/tags, and more
- Context menus for change/bookmark/tag operations
- Flexible configuration supports squash and edit workflows and more
- Conflict resolution via the native VS Code merge editor
- Bookmark and tag management with remote sync
- Multi-workspace support with automatic stale workspace updates
- Operation log with undo/redo
- Handles divergent commits, conflicted bookmarks, and more
📖 Full Feature List
🔗 Graph view
- Compact graph view
- High information density
- Author name omitted if it's your own change
- Elided commits

- Select a change to see its affected files and diffs
- Create merge changes with shift-select and then pressing the "+" button
- Drag & drop changes onto other changes
- Right click on a change for a context menu

- Edit the change, new child change
- Describe the change
- Manage bookmarks/tags
- Copy the commit's web URL, for example the Github URL
- Copy the full change ID
- Absorb the change into its parents
- Abandon one or more changes (shift-click to select multiple)
✋ Drag & drop operations
- Rebase a change (with or without descendants) onto/after/before any other change

- Squash a change into any other change
- Duplicate a change onto/after/before any other change
- Apply the reverse of change (revert) onto/after/before any other change
- Move bookmarks by dragging them onto a target change
📁 File management
- Show changed files in the working copy and parent changes
- Show changed files in the selected change when clicking on a change in the graph
- Right-click context menu: View as diff, open at revision, open in working copy, copy paths
- Configurable file click action: View as diff, open at revision, open in working copy
- Line-by-line blame annotations (optional)
💫 Change management
- Quickly commit with Ctrl+Enter, no commit message required
- Ctrl+Shift+Enter opens the commit message in the full VS Code editor
- Flexible configuration supports both the
squash workflow, the
edit workflow, and more
- Move changes between working copy and parents
- Move specific lines from the working copy to its parent changes
- Discard changes
⚠️ Conflicts
- Show conflicts in the graph and change view

- Resolve conflicts with the VS Code merge editor

🔀 Divergent changes
- Show divergent changes in the graph and change view

- Allow all meaningful operations on divergent changes
🙈 Hidden changes
- Properly render hidden changes in the graph, for example when a change with a remote bookmark is rewritten locally
🏷️ Bookmark/Tag management
- Create, move, and delete bookmarks
- Move bookmarks via drag&drop
- Upload a bookmark to all its tracking remotes with a single click

- Right-click context menu to push a bookmark to a specific remote
- Right-click context menu to push a tag to a specific remote
- Track/untrack remotes
- Delete a bookmark/tag

- Set and delete tags
- Show conflicted bookmarks and tags with
?? suffix
💼 Multi-Workspace support
- Show workspace labels in the graph view

- Automatically update stale workspaces (can be disabled with
jjx.autoUpdateStaleWorkspace, in which case the user
will be prompted to update a stale workspace)
🔄 Operation management
- Browse the operations log with quick undo/redo buttons

- Undo any jj operation or restore repository to a previous state
📋 Prerequisites
- Ensure
jj is installed and available in your system's $PATH, or configure a custom path using the jjx.jjPath
setting
- Ensure
jj is of a recent version (>=0.38.0)
⚙️ Configuration
The following settings can be configured in VS Code's settings:
| Setting |
Default |
Description |
jjx.autoUpdateStaleWorkspace |
true |
Automatically run jj workspace update-stale when the current workspace is stale |
jjx.baseWebURL |
"" |
Base URL for the 'Copy URL' feature (e.g., https://github.com/user/repo). Overrides git_web_url() when set |
jjx.changeDoubleClickAction |
"new" |
Action when double-clicking a change in the graph view: "edit" (jj edit) or "new" (jj new) |
jjx.commandTimeout |
null |
Global timeout in milliseconds for all jj commands. If not set, per-command defaults will be used |
jjx.commitAction |
"commit" |
Action when pressing Ctrl+Enter in source control: "commit" (jj commit) or "new" (jj new). Ctrl+Shift+Enter does the same but also opens an editor |
jjx.elideImmutableCommits |
true |
Hide chains of immutable commits between relevant commits in the graph view |
jjx.elidedVisibleImmutableParents |
1 |
Number of immutable parent commits to show in the log when eliding commits |
jjx.enableAnnotations |
true |
Enables in-line blame annotations |
jjx.fileClickAction |
"diff" |
Action when clicking a file: "diff" (compare to parent), "at-revision" (open at clicked revision), or "working-copy" (open in working copy) |
jjx.graphStyle |
"compact" |
Display style for commits: "full" shows all details, "compact" shows single line |
jjx.jjPath |
"" |
Path to the jj executable. If not set, your PATH and common locations will be searched |
jjx.logLimit |
500 |
Maximum number of commits shown in the graph view |
jjx.pollIntervalSeconds |
30 |
Interval in seconds between repository polls. Set to 0 to disable |
jjx.showTooltips |
true |
Show tooltips when hovering over commits in the graph view |
🐛 Known issues
If you encounter any problems, please report them on GitHub!
🔧 Troubleshooting
Double modification annotations ("M, M") in file explorer
If you see annotations like "M, M" next to files, this is caused by VS Code's built-in Git extension running alongside
JJX. To disable Git, disable git.enabled in your VS Code settings.
If you experience performance issues, try these steps:
- Disable
jjx.enableAnnotations, blame annotations are expensive to compute for large repos
- Lower
jjx.logLimit to show fewer commits in the graph
📝 License
This project is licensed under the AGPL-3.0 License. Code from the original project
Jujutsu Kaizen is licensed under the MIT License. See LICENSE.md for
details.
| |