Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>JJ ViewNew to Visual Studio Code? Get it now.
JJ View

JJ View

jj-view

|
228 installs
| (2) | Free
Integrates Jujutsu (jj) version control into VS Code.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

JJ View

JJ View brings the power of Jujutsu (jj) version control directly into VS Code. Visualize your revision graph, manage changes, and streamline your workflow without leaving the editor.

Features

🌲 Interactive Revision Graph

Visualize your jj repo history with a clear, interactive graph.

  • View History: See commits, branches, and the working copy in a topological view.
  • Inspect Changes: Click on any node to view details and diffs.
  • Context Actions: Right-click nodes to perform actions like editing, squashing, or abandoning changes.
  • Drag & Drop Workflows:
    • Rebase Source: Drag a commit onto another to rebase it (and its children) onto the target.
    • Rebase Revision: Hold Ctrl (or ⌘ on macOS) while dragging to rebase only the specific revision.
    • Move Bookmarks: Drag bookmark pills from one commit to another to move them.
  • Selection:
    • Multi-Select: Ctrl+Click (or ⌘+Click) to select multiple commits.
    • Contextual Commands: Perform bulk actions like "Abandon" on all selected commits.
    • Clear: Press Escape to clear the selection.

📝 Commit Details Panel

A dedicated view for inspecting and managing commits.

  • Status Indicators: View clear visual pills for commit properties like Immutable, Empty, Conflicted, Tags and Bookmarks.
  • Commit Info: Displays Author, Committer, and Relative Timestamps. Includes a click-to-copy utility for Commit and Change IDs.
  • Format Body: Automatically format the commit description body to the configured width.
  • Diff Management:
    • Open Multi-File Diff: View all changes in the revision in a single scrollable editor.
    • Single-File Diff: Click any file to open a side-by-side diff.
    • Editable Diffs: For mutable commits, diff editors are fully editable. Save changes (Ctrl+S) to apply them back to the commit.
  • Navigation: Quickly jump between changed files.

🛠️ Source Control Integration

Full integration with VS Code's Source Control view (SCM).

  • Working Copy: View modified files, stage changes (via jj commit/squash workflows), and restore files.
  • Commit Management: Create new changes, set descriptions, and squash changes directly from the SCM panel.
  • Merge Conflicts: Identify and resolve conflicts using VS Code's merge editor.
  • File Decorations: Automatically highlights modified, added, conflicted, and ignored files in the Explorer with color-coded badges.

SCM View Source Control view managing jj changes.

🚀 Efficient Workflows

Support for common and advanced jj operations:

  • Navigation: Move to parent or child revisions easily.
  • Undo/Redo: Quickly undo or redo jj operations.
  • Squashing: Squash changes into the parent revision.
  • Absorbing: Automatically move changes into the mutable ancestor where they were introduced.
  • Rebasing: Rebase changes onto other revisions.
  • Workspace Management: Create new jj workspaces directly from the UI, with configurable default locations.
  • Editable Diffs: Edit any mutable commit directly in the diff editor. Changes are batched and applied on save, with full support for single and multi-file diffs.

Commands

Access these commands from the Command Palette (Ctrl+Shift+P or ⌘+Shift+P) or context menus.

General

  • JJ View: Refresh: Refresh the current status and log.
  • JJ View: Show Current Change: Focus the graph on the current working copy change.
  • JJ View: Show Details: Open a dedicated panel with full details of the selected commit.
  • JJ View: Undo: Undo the last jj operation.
  • JJ View: Redo: Redo the last undone jj operation.

Change Management

  • JJ View: New Change: Create a new empty change at the current head.
  • JJ View: New Before: Create a new change before the current revisions (inserts a new parent).
  • JJ View: New After: Create a new change after the current revisions (inserts a new child).
  • JJ View: Edit: Edit a specific revision.
  • JJ View: Duplicate: Duplicate a change.
  • JJ View: Abandon: Abandon (delete) a change.
  • JJ View: Discard Change: Discard all files within a change in the SCM view.
  • JJ View: Squash Change to Parent: Squash a change into its parent directly from the SCM view.
  • JJ View: Restore: Restore files in the working copy.
  • JJ View: Set Description: Edit the description of the current change.
  • JJ View: Set Description (Prompt): Edit the description of the current change using an interactive prompt.
  • JJ View: Upload: Upload the current change (runs configured upload command).
  • JJ View: Set Bookmark: Create or move a bookmark to a specific revision.
  • JJ View: Commit: Commit the current changes in the working copy (Ctrl+Enter in SCM input).
  • JJ View: Commit (Prompt): Commit the current changes in the working copy, prompting for a description message first.
  • JJ View: Open File: Open the file associated with a change.
  • JJ View: Add Workspace: Create a new jj workspace.
  • JJ View: Show Multi-File Diff: Open a comprehensive multi-file diff view for the selected revision. These views are editable for mutable commits.

History & Merging

  • JJ View: Squash into Parent: Squash the current change into its parent.
  • JJ View: Squash into Ancestor: Squash the current change into an ancestor.
  • JJ View: Absorb: Move changes into the mutable ancestor where they belong.
  • JJ View: Complete Squash: Finish a squash operation (e.g., from the editor title).
  • JJ View: New Merge Change: Create a merge commit.
  • JJ View: Open Merge Editor: Open the merge editor for conflicted files.
  • JJ View: Rebase onto Selected: Rebase the current change onto a selected target.

Navigation

  • JJ View: Move to Child: Move the working copy to a child revision.
  • JJ View: Move to Parent (Diff): Navigate to the parent revision while viewing a diff.
  • JJ View: Move to Child (Diff): Navigate to the child revision while viewing a diff.

Features & Integration

⌨️ Keybindings

  • Commit: Ctrl+Enter (or Cmd+Enter on macOS) in the SCM input box to commit changes.
  • Set Description: Ctrl+S (or Cmd+S on macOS) in the SCM input box or Commit Details panel to save the description without finishing the commit.

🔄 Automatic Refresh

The extension automatically refreshes the view when:

  • File changes are detected in the workspace.
  • jj operations are performed via the CLI (external changes are polled).
  • You switch focus back to the VS Code window.

🤖 Gerrit Integration

If you use Gerrit, JJ View provides enhanced integration:

  • Shows the current Gerrit Status (e.g., Active, Merged) and provides a link to the CL.
  • Configuration: Set jj-view.gerrit.host and jj-view.gerrit.project if they aren't automatically detected.

Extension Settings

Customize JJ View behavior in VS Code settings.

Setting Default Description
jj-view.refreshDebounceMillis 100 Base debounce time (ms) for SCM refresh based on file events.
jj-view.refreshDebounceMaxMultiplier 4 Maximum multiplier for the debounce timeout when events continue to occur.
jj-view.fileWatcherMode "polling" Controls how the extension detects external file changes. "polling" uses periodic status checks. "watch" uses a native file watcher (parcel-watcher) for more efficient, event-driven updates. Falls back to polling if the watcher fails to start.
jj-view.gerrit.host null Gerrit host URL (e.g., https://experiment-review.googlesource.com). If not set, extension attempts to detect it from .gitreview or git remotes.
jj-view.gerrit.project null Gerrit project name. If not set, extension attempts to detect it from git remotes.
jj-view.uploadCommand null Custom command to run for upload. Example: 'git push'. The command will be prefixed with 'jj' and suffixed with '-r '.
jj-view.minChangeIdLength 1 Minimum number of characters to display for change IDs. This affects the unique prefix calculation and UI truncation.
jj-view.maxMutableAncestors 10 Maximum number of mutable ancestors to display in the SCM view.
jj-view.logTheme "default" Color theme for the graph lanes in the JJ Log view. Available options: default, oceanic, sunset, neon, pastel, monochrome.
jj-view.graphLabelAlignment "aligned" Controls the horizontal alignment of commit messages in the log view. Available options: aligned, compact.
jj-view.commit.titleWidthRuler 50 Width at which to display a ruler in the commit details description editor for the title line.
jj-view.commit.bodyWidthRuler 72 Width at which to display a ruler in the commit details description editor for the body.
jj-view.binaryPath "" Optional absolute path to the 'jj' binary. If empty, the extension will search for it in your PATH
jj-view.suppressGitColocationWarning false Suppress the warning to disable the built-in Git extension in colocated repositories.
jj-view.workspacesLocation .workspaces Directory where new workspaces are created. Relative paths are resolved against the main repository root.

Advanced Configuration

Conditional jj configuration

When jj-view executes jj commands, it sets the JJ_VIEW_EXTENSION=1 environment variable. This allows you to configure conditional logic in your .jjconfig.toml file to apply specific settings only when interacting with the repository via the VS Code extension.

For example, you can configure a different default log revset for the extension:

[[--scope]]
--when.environments = ["JJ_VIEW_EXTENSION=1"]
[--scope.revsets]
log = "trunk().." # Or any other revset you prefer for the graph view

File Watcher Mode

The "watch" mode uses parcel-watcher for native, event-driven file change detection instead of periodic polling. This is more efficient for large repos, but may require additional setup depending on your platform.

Linux — Increasing inotify watch limits

The default inotify backend on Linux is limited by the system's max watch count. If you hit the limit, increase it:

# Check the current limit
cat /proc/sys/fs/inotify/max_user_watches

# Increase temporarily (resets on reboot)
sudo sysctl fs.inotify.max_user_watches=524288

# Increase permanently
echo 'fs.inotify.max_user_watches=524288' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Linux & Windows — Using Watchman (recommended)

On non-macOS platforms, we recommend installing Watchman for a more robust and scalable file watching backend. When Watchman is installed and available on your PATH, parcel-watcher will automatically use it instead of inotify (Linux) or the default Windows backend. Watchman handles large repositories more gracefully and avoids inotify watch limit issues entirely.

  • Watchman Installation Guide

Requirements

  • Jujutsu (jj): The jj CLI must be installed. By default, it must be available in your system PATH, but you can also configure a custom path in the extension settings.
    • Installation Guide

Contributing

See CONTRIBUTING.md for details.

License

Apache 2.0; see LICENSE for details.

Disclaimer

This project is not an official Google project. It is not supported by Google and Google specifically disclaims all warranties as to its quality, merchantability, or fitness for a particular purpose.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft