GitHub
By storing unresolved conflicts inside commit metadata and treating the working copy as an automatic commit, Jujutsu eliminates rebase aborts while preparing Google to unify engineering workflows into a single cloud-hosted commit graph.
AI-assisted summary of Jujutsu: A Git-Compatible VCS - Git Merge 2022 — original source. Check the original for full context.
Source published:
Key ideas
- Google is transitioning internal source control from Fig (a Mercurial wrapper) to Jujutsu (jj), an open-source, Git-compatible DVCS written in Rust and led full-time by Martin von Zweigbergk. (4:21)
- Jujutsu eliminates dirty working copies and the Git staging area by modeling the working copy as an ordinary commit that automatically amends on every CLI invocation. (6:11)
- Merge and rebase operations in Jujutsu never fail on conflicts; instead, conflicts are stored as structured metadata inside commits, enabling delayed resolution and automatic rebasing of descendant commits. (9:43)
- An Operation Log records whole-repository snapshots on every command, enabling repository-wide undo, time-travel inspection, and crash-resilient multi-device synchronization. (15:31)
- Google's internal deployment roadmap aims to store developer commits in a single centralized cloud graph using lazy indexing (inspired by Meta's segmented changelog) and virtual file system mounts. (29:35)
Detailed notes
## Background Published on YouTube by GitHub on October 18, 2022, this video captures a presentation from Git Merge 2022 delivered by Google engineer Martin von Zweigbergk on Jujutsu (jj), a Git-compatible version control system. According to the description, the session explores Jujutsu's design and features—including anonymous branches, first-class conflicts, automatic descendant rebasing, and treating the working copy as an automatic commit—alongside Google's long-term deployment plans.
## TL;DR Martin von Zweigbergk outlines the evolution of source control at Google and how the performance and consistency limitations of Fig (a Mercurial wrapper) led to the development of Jujutsu (jj). He highlights core UX innovations, such as treating the working copy as an auto-amending commit, handling conflicts as first-class metadata rather than workflow-stopping failures, and recording whole-repository state transitions in an Operation Log for effortless inspection and undo. Implemented as a modular Rust library, Jujutsu delivers Git compatibility while enabling automatic rebasing of descendant stacks. Finally, von Zweigbergk discusses missing features like copy tracking and blame, alongside Google's roadmap to deploy Jujutsu on top of its monorepo using lazy commit indexing and cloud storage backends.
## Atmosphere & style The presentation has the calm, deliberate atmosphere of a seasoned infrastructure engineer sharing a passion project that organically evolved into a core corporate initiative. Von Zweigbergk speaks with understated humor and technical modesty, opening with a dry clarification about the name's non-relation to anime and openly dissecting early architectural missteps. It feels deeply practical and grounded, giving version control practitioners an authentic look behind the curtain of developer tooling and large-scale repository engineering.
## Bulletin - [04:21](https://www.youtube.com/watch?v=bx_LGilOuE4&t=261s) Google is transitioning internal source control from Fig (a Mercurial wrapper) to Jujutsu (jj), an open-source, Git-compatible DVCS written in Rust and led full-time by Martin von Zweigbergk. - [06:11](https://www.youtube.com/watch?v=bx_LGilOuE4&t=371s) Jujutsu eliminates dirty working copies and the Git staging area by modeling the working copy as an ordinary commit that automatically amends on every CLI invocation. - [09:43](https://www.youtube.com/watch?v=bx_LGilOuE4&t=583s) Merge and rebase operations in Jujutsu never fail on conflicts; instead, conflicts are stored as structured metadata inside commits, enabling delayed resolution and automatic rebasing of descendant commits. - [15:31](https://www.youtube.com/watch?v=bx_LGilOuE4&t=931s) An Operation Log records whole-repository snapshots on every command, enabling repository-wide undo, time-travel inspection, and crash-resilient multi-device synchronization. - [29:35](https://www.youtube.com/watch?v=bx_LGilOuE4&t=1775s) Google's internal deployment roadmap aims to store developer commits in a single centralized cloud graph using lazy indexing (inspired by Meta's segmented changelog) and virtual file system mounts.
## Key takeaways - [01:20](https://www.youtube.com/watch?v=bx_LGilOuE4&t=80s) Google's prior DVCS tooling, Fig, suffered from Python performance bottlenecks, lack of distributed file system consistency, and brittle CLI output parsing. - [04:21](https://www.youtube.com/watch?v=bx_LGilOuE4&t=261s) Jujutsu was developed as an independent VCS rather than upstream Git patches to freely explore radical UX changes and avoid ecosystem incompatibilities with internal Google tools. - [06:11](https://www.youtube.com/watch?v=bx_LGilOuE4&t=371s) Anonymous branches track all commits by default without requiring explicit branch names, hiding obsolete revisions automatically when rewritten. - [07:30](https://www.youtube.com/watch?v=bx_LGilOuE4&t=450s) Treating the working copy as a regular commit (@) renders commands like git stash and git commit obsolete while keeping the CLI uniform. - [09:43](https://www.youtube.com/watch?v=bx_LGilOuE4&t=583s) First-class conflicts are recorded directly inside commit objects as metadata rather than raw file markers, eliminating rebase abort/continue states and enabling asynchronous team resolution. - [12:45](https://www.youtube.com/watch?v=bx_LGilOuE4&t=765s) Because rebasing never fails due to conflicts, Jujutsu automatically rebases entire stacks of descendant commits whenever an ancestor commit is updated or amended. - [13:46](https://www.youtube.com/watch?v=bx_LGilOuE4&t=826s) The jj move command allows arbitrary transfer of diffs between commits, such as moving a conflict resolution directly into the originating commit. - [14:35](https://www.youtube.com/watch?v=bx_LGilOuE4&t=875s) Rebasing merge commits recalculates the resolution diff against auto-merged parents, preserving conflict resolutions cleanly across history rewrites. - [15:31](https://www.youtube.com/watch?v=bx_LGilOuE4&t=931s) The Operation Log snapshots the entire repository state—including branches, commits, and working copy locations—allowing point-in-time inspection (--at-op) and surgical operation undos. - [18:32](https://www.youtube.com/watch?v=bx_LGilOuE4&t=1112s) Jujutsu's strict transaction model commits state append-only to the Operation Log, preventing repository corruption during crashes or across cloud-synced folders like Dropbox. - [19:53](https://www.youtube.com/watch?v=bx_LGilOuE4&t=1193s) Implemented as a modular Rust library rather than a monolithic CLI, Jujutsu features pluggable commit storage and working copy backends designed for lazy evaluation at scale. - [22:29](https://www.youtube.com/watch?v=bx_LGilOuE4&t=1349s) Operations are executed repository-first in the object database before mutating files on disk, significantly cutting disk I/O and network latency. - [24:10](https://www.youtube.com/watch?v=bx_LGilOuE4&t=1450s) Full Git interoperability allows developers to adopt Jujutsu inside existing Git projects and collaborate seamlessly with peers using standard Git. - [25:35](https://www.youtube.com/watch?v=bx_LGilOuE4&t=1535s) Jujutsu incorporates Mercurial's revset functional revision syntax and advanced history manipulation tools like split, fold, and non-linear rebases. - [27:45](https://www.youtube.com/watch?v=bx_LGilOuE4&t=1665s) Key missing features currently include explicit rename/copy tracking (versus Git's heuristic detection), git blame equivalent tooling, and network sync for the native backend. - [29:35](https://www.youtube.com/watch?v=bx_LGilOuE4&t=1775s) Google's internal enterprise plan integrates Jujutsu with a custom VFS and cloud storage to connect developer workspaces and cloud IDEs into a single shared commit graph.
## Detailed walkthrough ### [00:08](https://www.youtube.com/watch?v=bx_LGilOuE4&t=8s) Introduction to Jujutsu (jj)
Martin von Zweigbergk introduces himself at Git Merge 2022, briefly searching for his speaker notes before diving in. He explains that he works on source control at Google and has spent nearly three years developing Jujutsu (abbreviated as `jj`), a Git-compatible version control system (VCS). Addressing an obvious pop-culture question with a dry chuckle, he clarifies that the project has no relation to the anime *Jujutsu Kaisen*. Instead, the name comes from the CLI command `jj`, which was chosen simply because it is easy to type.
```mermaid flowchart TD accTitle: History of Source Control at Google accDescr: Evolution of internal version control tooling at Google leading to the creation of Jujutsu. subgraph Monorepo Evolution CVS["CVS (early days)"] --> P4["Perforce"] P4 --> Piper["Piper (in-house VCS)"] Piper --> CitC["CitC (Cloud Storage FUSE)"] end subgraph DVCS & Next-Gen CitC --> Fig["Fig (Mercurial wrapper)"] Fig --> JJ["Jujutsu / jj (Next-Gen VCS)"] end ```
Martin presents an agenda for the talk covering his background, the history of source control at Google, the core workflows and architecture of Jujutsu, and the upcoming plans for both the open-source project and its integration within Google.
[01:20](https://www.youtube.com/watch?v=bx_LGilOuE4&t=80s) Source Control History at Google and Fig’s Limitations
Martin recounts his career path: after graduating, he worked at Ericsson for roughly seven years. While there, he spearheaded their migration from ClearCase to Git and spent his personal time cleaning up Git rebase scripts. After joining Google, he worked briefly on a compensation app before spending the next eight years working on Fig, an internal client that wraps Mercurial to interface with Google's massive monorepo.
To give context, Martin summarizes Google’s source control journey. In the early days, the company supposedly started with CVS, later migrating to Perforce. When the Perforce server could no longer scale to Google's massive codebase, Google engineered its own centralized VCS called Piper. Because the repository was far too vast for a developer's physical disk, they created CitC (Clients in the Cloud), a virtual file system mounted on top of Piper that nearly every Googler uses. However, engineers coming from outside Google deeply missed the distributed version control (DVCS) workflows they were accustomed to, which led to the creation of Fig to bring Mercurial workflows on top of CitC. Those curious about the monorepo's sheer scale can refer to the *@Scale* presentation by Rachel Potvin and Josh Levenberg.
While engineers generally like Fig, Martin highlights three severe pain points: - **Performance:** Python is slow, and eager data structures fail to scale to the size of Google's monorepo. - **Consistency:** Mercurial was never designed for distributed file systems, leading to write races and repository corruption when stored across Google's distributed infrastructure. - **Integration complexity:** Fig relies on shelling out to the Mercurial CLI and parsing its text output, which Martin describes as decidedly “not fun.”
[04:21](https://www.youtube.com/watch?v=bx_LGilOuE4&t=261s) The Genesis of Jujutsu and Why Not Just Git
A few years ago, the team began brainstorming requirements for a next-generation version control system. One idea that surfaced was automatically creating a commit on every single editor save. Martin was captivated by the concept: “I got really excited by that idea and started jj to experiment with it.” He worked on Jujutsu as a 20% project for about two years. By spring 2022, Google decided to invest more heavily, making it Martin's full-time (100%) project.
Martin explains why he chose to create a new VCS rather than submitting these features to upstream Git. His primary goal was to experiment with a fundamentally different user experience: “I think that would end up being a completely separate set of commands inside of Git and that would be really ugly and wouldn't and shouldn't get accepted upstream.” Furthermore, Git integration was historically ruled out for Fig because of deep ecosystem incompatibilities at Google. Multiple internal tools reimplement Git by reading directly from the file system, which meant any novel feature added to Git would have to be duplicated across two or three separate internal implementations.
[06:11](https://www.youtube.com/watch?v=bx_LGilOuE4&t=371s) Anonymous Branches and the Automatic Working Copy Commit
Turning to user-facing workflows, Martin highlights the first major feature borrowed from Mercurial: anonymous branches. Instead of throwing developers into Git's notoriously intimidating detached `HEAD` state, Jujutsu tracks all commits without forcing the user to name them with branches. Commits appear cleanly in the log output and are never garbage collected accidentally. To prevent the log from becoming an unreadable mess, Jujutsu automatically hides the old versions of commits whenever they are rewritten (via amend or rebase). Developers can also manually hide commits using `jj abandon`.
```mermaid flowchart LR accTitle: Working Copy as a Commit accDescr: Comparison of Jujutsu automatic commit model versus Git staging workflows. subgraph JJ Model WC["Working Copy (@)"] -->|"auto-amends on edit"| WC WC -->|"jj checkout"| NewC["New Commit (@)"] OldC["Existing Commit"] -->|"jj edit"| OldC end ```
The second core realization when using Jujutsu is that the working copy is itself an actual commit, displayed in `jj log` with an `@` symbol. Every file modification in the working copy is automatically amended into this `@` commit whenever any `jj` command is executed. - Running `jj checkout <commit>` creates a brand new working copy commit on top of the target commit. - Running `jj edit <commit>` switches the working copy commit directly to an existing commit so the user can continue amending it in place.
This fundamental architectural choice eliminates several major Git pain points: - **No dirty working copies:** “The working copy will never be dirty, so if you check out a different commit or rebase or something, it will never tell you that you have unstaged changes.” - **Automatic backup:** Every invocation of a `jj` command creates an automatic backup commit of your current state. - **`git stash` is obsolete:** The working copy commit already acts as an ongoing, persistent stash. - **`git commit` is unnecessary:** Changes are already committed; setting or modifying a commit message is handled whenever convenient via `jj describe`. - **A uniform CLI:** The `@` commit is a standard commit, eliminating arbitrary flags needed to target unstaged files. For instance, `jj restore` defaults to restoring files from `@`'s parent into `@` (matching `git restore`), but can take any arbitrary pair of commits. - **Changes stay put:** Uncommitted edits do not inadvertently travel with the user across branches during checkouts.
[09:43](https://www.youtube.com/watch?v=bx_LGilOuE4&t=583s) First-Class Conflicts and Automatic Descendant Rebasing
Another defining architectural pillar of Jujutsu is first-class conflicts. In Jujutsu, operations like `jj merge` or `jj rebase` never fail when a conflict occurs. If a merge encounters conflicting changes, the operation succeeds completely, creating a merge commit that stores the conflicts as structured metadata directly in the commit object itself—rather than injecting raw conflict markers into files and halting the world.
Martin details the major advantages of this design: - **Delayed conflict resolution:** Developers are free to ignore a conflict immediately after a merge or rebase, check out another commit, and resolve the conflicts hours or days later. - **Collaborative resolutions:** Because conflicts are committed, developers can push them to a remote branch, resolve a subset of files, and let a teammate resolve the rest. - **No interrupted state commands:** “A rebase never fails... which makes continue and abort and for rebase and cherry-pick and all those similar commands unnecessary.” - **Unified conflict flow:** Users do not need to memorize whether a conflict was caused by a cherry-pick, merge, or rebase. They simply edit the conflicted commit, fix the files in their working copy, and the conflict indicators disappear automatically from the log.
Martin notes that it took him a year of experimentation to realize the ultimate payoff of non-failing operations: because rebasing never fails, Jujutsu can automatically rebase all descendant commits whenever an ancestor in a stack is amended or edited. Users no longer need to manually orchestrate complex interactive rebases to propagate changes through a stack of dependent patches; `jj` handles the whole cascade, sliding branches along automatically. Furthermore, Jujutsu can even rebase existing conflicts and their recorded resolutions onto new bases, preserving work in progress across evolving branches.
[13:46](https://www.youtube.com/watch?v=bx_LGilOuE4&t=826s) Moving Changes and Rebasing Merges Correctly
When conflict resolution happens in the working copy (which behaves like an automatic commit), that resolution is carried along when the commit is rebased, preventing conflicts from polluting the working copy. Jujutsu offers a dedicated command to manipulate where these diffs live: `jj move` (or `jj move --to`). Martin von Zweigbergk compares it to the squash workflows discussed earlier at the conference, “but much more generic you can can move a change from any commit into any other commit.” By default, without a `--from` flag, it pulls the changes directly from the working copy into the specified target. In his demo walkthrough, moving the resolution into the initial conflicting commit clears the conflict across the entire stack, leaving the working copy clean and empty.
Von Zweigbergk also explains how Jujutsu handles merges during history rewrites. Instead of breaking merge resolutions during a rebase, `jj` rebases merges cleanly by computing the diff between the merge commit and its auto-merged parents, and then applying that diff onto the new auto-merged parents. This principle is not reserved solely for rebasing; Jujutsu treats all diffs and inspection commands on merge commits this way, auto-merging the parents just like the merge-diff concepts discussed by Elijah Newren earlier in the day.
```mermaid flowchart LR accTitle: Rebase Merge Architecture accDescr: Diagram showing how Jujutsu rebases a merge commit by calculating the resolution diff against auto-merged parents and applying it onto new auto-merged parents.
subgraph OriginalState["Original State"] P1["Parent 1"] & P2["Parent 2"] --> AutoMerge["Auto-merged Parents"] AutoMerge -->|"Diff (Conflict Resolution)"| MergeCommit["Merge Commit"] end
subgraph NewState["Rebased State"] NewP1["New Parent 1"] & NewP2["New Parent 2"] --> NewAutoMerge["New Auto-merged Parents"] NewAutoMerge -->|"Apply Same Diff"| RebasedMerge["Clean Rebased Merge"] end
OriginalState -.->|"Rebase diff onto new parents"| NewState ```
[15:31](https://www.youtube.com/watch?v=bx_LGilOuE4&t=931s) The Operation Log: Repository State as Version Control
The final major feature highlighted is the Operation Log (op log). Von Zweigbergk suggests that “you can think of it as the entire repo being under Source control.” Unlike Git's reflogs, which track individual branch pointers independently, Jujutsu's Operation Log tracks the entire state of the repository at once—including all references, anonymous heads, and the exact position of the working copy across every worktree. Each operation snapshot records operational metadata, such as the timestamp, username, and hostname where the action was executed.
Because the repository is captured at distinct points in time, users can inspect prior states at will. Passing `--at-op` to commands like `jj status`, `jj log`, or `jj diff` displays the repository exactly as it existed before a given change occurred—for instance, showing a modified file right before its commit description was written. Entire repositories can be rolled back to any previous state, such as when the repo was freshly initialized before any files were added. Even more powerfully, `jj undo` can invert a single past operation without wiping out intermediate work:
- **Whole-repo snapshots**: Captures branches, anonymous commits, working copy pointers, timestamps, user IDs, and machine hostnames together. - **Time-travel inspection**: Read-only evaluation via `jj status --at-op <op_id>`, `jj log`, or `jj diff` to reconstruct how an unfamiliar repository reached its current state. - **Surgical undo**: Functions like a metadata-level `git revert`, reversing the ref mutations of a specific operation (e.g., restoring an accidentally abandoned commit) while leaving subsequent work intact.
[18:32](https://www.youtube.com/watch?v=bx_LGilOuE4&t=1112s) Concurrency, Crash Resilience, and the Transaction Model
Beyond user-facing recovery, the Operation Log serves as an architectural safety mechanism. It enables safe multi-device concurrency: a repository synced across multiple machines via a file sync service like Dropbox will never suffer data corruption or lost commits. While conflicting operations can occur, Jujutsu handles them gracefully by creating a merge node directly within the Operation Log itself.
Under the hood, Jujutsu enforces a strict transaction model. When any command starts, it loads the repository at the latest recorded operation. Concurrent modifications made by other processes remain invisible to that command. Once the operation finishes, it commits its modifications as a new operation entry in the log. Because appending an operation record cannot fail—mirroring the guarantee that writing a Git commit object cannot fail—the internal programming model avoids catastrophic transaction aborts. Reflecting on this design choice, Von Zweigbergk admits: “and this is actually why I developed the the Operation Log for the simpler programming model and then uh the undo and trying travel stuff is just an accident.”
[19:53](https://www.youtube.com/watch?v=bx_LGilOuE4&t=1193s) Architectural Decisions: Rust Library and Laziness at Scale
Turning to the codebase architecture, Jujutsu is implemented in Rust as a reusable core library rather than a monolithic command-line tool. While the CLI is its primary consumer, the library design is meant to support IDE integrations, graphical interfaces, and server deployments, while avoiding the rewrite cycles common in the Git ecosystem. To fit Google-scale monorepos and diverse developer setups, Jujutsu makes its subsystems pluggable:
1. **Commit Storage Backends**: Ships with a Git backend (storing commits inside a backing `.git` repository) and a simple custom backend, with the option to implement cloud-backed storage. 2. **Working Copy Backends**: Supports local disk writes or smart Virtual File Systems (VFS) that prevent unnecessary file checkouts. 3. **Scalability Through Laziness**: Tailored for massive repositories by eliminating any operations that require loading all ancestors of a commit or traversing entire tree hierarchies unless strictly required.
```mermaid flowchart TD accTitle: Jujutsu Modular Architecture accDescr: Architectural block diagram showing Jujutsu's core library interfacing with consumers on top, and pluggable storage backends on the bottom.
subgraph Interfaces["Consumers"] CLI["jj CLI"] IDE["IDE / GUI (Future)"] Server["Server Services"] end
subgraph Core["jj-lib (Rust Core Library)"] Engine["Transaction & Operation Engine"] Algorithms["Lazy Graph Algorithms"] end
subgraph PluggableBackends["Modular Backends"] GitStore["Git Backend (.git)"] CloudStore["Custom / Cloud Backend"] DiskVFS["Disk Working Copy"] SmartVFS["Virtual File System (VFS)"] end
Interfaces --> Core Core --> PluggableBackends ```
[22:29](https://www.youtube.com/watch?v=bx_LGilOuE4&t=1349s) Repository-First Operations and Git Compatibility
A core design principle of Jujutsu is to execute operations in the repository first before touching the working copy on disk. Commands build new commit objects and update references in the object store; only after the transaction is safely committed is the local working copy touched, and only if the command actually altered it. Treating the working copy as an ordinary commit drastically simplifies internal mechanics, eliminating concerns over dirty working copies—much like Elijah Newren’s `merge-ort` engine in Git. Avoiding superfluous disk writes yields massive speed improvements and prevents unnecessary network round-trips to remote backends.
Jujutsu retains full compatibility with existing Git workflows, allowing individual developers to adopt `jj` in an existing team without forcing teammates to switch. At the storage layer, the Git backend reads commits directly from Git's object database and translates them into Jujutsu’s in-memory structures. The tool provides commands to import refs from Git, export refs back to Git, and communicate directly with remote Git repositories, provided the Git backend is active.
[25:35](https://www.youtube.com/watch?v=bx_LGilOuE4&t=1535s) Mercurial Heritage and Future Project Roadmap
Von Zweigbergk's background as a long-time Mercurial contributor heavily shaped Jujutsu's developer experience. He deliberately ported Mercurial's best ideas into `jj`, including: - A clean, staging-area-free workflow. - A functional revision selection syntax inspired by Mercurial revsets. - Powerful history-rewriting tools akin to `hg split`, `hg fold` (squashing), and `hg rebase` (which rebases non-linear commit DAGs rather than just single linear branches).
While Mercurial achieved extreme customizability through Python monkey patching—which cannot be replicated in a compiled Rust tool—Jujutsu relies on modular abstractions to bridge the gap, though Von Zweigbergk notes there is still a long way to go to match that level of extensibility.
Looking forward, Jujutsu has transitioned from an informal personal venture into an officially backed project. As Von Zweigbergk observes, “this is has probably has been my 20 project for most of its lifetime so there's a lot of features and functionality missing.” Key priorities for the open-source project and Google's internal integration include implementing garbage collection and repacking for both commits and Operation Log entries, alongside batch prefetching and caching mechanisms to ensure acceptable performance when lazily pulling objects over high-latency networks.
[27:45](https://www.youtube.com/watch?v=bx_LGilOuE4&t=1665s) Missing Features, Extensibility, and Community Collaboration
Martin von Zweigbergk outlines the current gaps and missing functionality in Jujutsu (jj), starting with handling file history across moves. At present, the tool lacks support for copies and renames, leaving an open architectural design choice. Jujutsu needs to determine whether it will explicitly track renames and copies in metadata—the approach used by systems like Mercurial and BitKeeper—or detect them dynamically via heuristics after the fact, as Git does. He invites feedback and suggestions from the audience on which direction to pursue. In addition, standard commands such as `git blame` are still missing, although he notes that community momentum is picking up, mentioning he had just received a pull request addressing some missing functionality a few days prior.
```mermaid flowchart TD accTitle: Jujutsu Extensibility and Backend Architecture accDescr: Diagram illustrating Jujutsu's core API connecting CLI, language bindings, and interchangeable backends.
subgraph ClientLayer["Clients & Integrations"] CLI["jj CLI / Custom Commands"] Bindings["Language Bindings"] end
subgraph CoreEngine["Jujutsu Core Engine"] API["jj Public Rust API"] end
subgraph BackendLayer["Storage Backends"] GitBE["Git Backend (Recommended)"] NativeBE["Native Backend (Experimental)"] CloudBE["Cloud Storage Backend (Google Monorepo)"] end
CLI --> API Bindings --> API API --> GitBE API --> NativeBE API --> CloudBE ```
Beyond core version-control features, significant architectural work is required around extensibility and language bindings. The goal is to make Jujutsu modular so developers can plug in custom CLI commands or write third-party backends using the API directly without needing to maintain source patches. To prevent fragmentation, von Zweigbergk emphasizes providing multi-language bindings so other tooling ecosystems can leverage the native engine: “Language bindings again want to avoid rewrites so hope people can use the API instead.” Security hardening is another priority. Regarding backend options, the non-Git native backend remains experimental and lacks basic network primitives like push and pull. For the foreseeable future, von Zweigbergk strongly advises users to stick with the default Git backend: “The Git backend is just what I would recommend to everyone for many, many years ahead anyway.” He highlights the GitHub project repository, underscoring that external contributors are welcomed and essential: “We don't want this to be just Google running the project.”
- **Rename/copy strategies under consideration**: Explicit tracking (Mercurial / BitKeeper style) versus dynamic detection (Git style). - **Missing CLI tooling**: Functionality equivalent to `git blame` remains unimplemented. - **Extensibility roadmap**: Supporting out-of-tree custom commands and backends via the API without source-code patching. - **Native storage maturity**: The non-Git backend lacks push/pull network capabilities, making the Git backend the recommended choice for years to come.
---
[29:35](https://www.youtube.com/watch?v=bx_LGilOuE4&t=1775s) Google's Roadmap: Monorepo Scale, Cloud Storage, and VFS Integration
Jujutsu has become Martin von Zweigbergk’s full-time engineering project at Google, where the primary objective is overhauling and modernizing the company's internal developer ecosystem. The internal rollout consists of two primary pillars: replacing Google's existing Mercurial client with Jujutsu (`jj`), and decoupling repository and commit storage from individual developer workstations by migrating it into the cloud. The ambition is to unify developer activity under a single, centralized system: “We're hoping to create a single huge commit graph with all the commits from all Google developers in just one graph.” Storing repos in the cloud will allow remote development environments, cloud IDEs, and code-review tools to directly inspect and mutate a developer's repository state from anywhere.
```mermaid flowchart TD accTitle: Google Jujutsu Cloud Integration Architecture accDescr: Architecture of Google's Jujutsu deployment connecting cloud services, lazy index, VFS, and cloud storage.
subgraph GoogleCloud["Cloud Services"] CloudIDE["Cloud IDE"] ReviewTool["Internal Review Tool"] JjServer["jj Server Service"] end
subgraph JujutsuGoogle["Jujutsu Custom Core"] LazyIndex["Lazy Commit Index (Segmented Changelog)"] CustomVFS["Custom Virtual File System (VFS)"] InternalCmds["Internal Commands (Reviews / Land to Mainline)"] end
subgraph StorageLayer["Distributed Storage"] CloudStorage["Cloud Commit Storage & Op Logs"] end
CloudIDE --> JjServer ReviewTool --> JjServer JjServer --> LazyIndex JjServer --> CustomVFS InternalCmds --> LazyIndex LazyIndex --> CloudStorage CustomVFS --> CloudStorage ```
Scaling Jujutsu to Google's massive monorepo requires replacing foundational data structures. The existing commit graph indexing assumes all ancestral commits are locally present on disk, which fails at monorepo scale. Von Zweigbergk explains that this index must be re-engineered to be lazy, likely adopting the "segmented changelog" design developed by Meta for their Mercurial infrastructure. On the storage front, Google will implement custom backends for distributed cloud storage of commits and operation logs (which serve as repository state tracking). On developer workstations, rather than relying on sparse checkouts, Jujutsu will interface with Google's virtual file system (VFS), allowing developers to mount specific commits directly with local file overrides on top. Finally, custom commands will handle internal review workflows and landing changes to the mainline branch, with a dedicated Jujutsu server sitting on top to service cloud IDEs and code review interfaces.
- **Internal transition goal**: Deprecate internal Mercurial usage and deploy Jujutsu across Google. - **Unified graph**: Consolidating all engineers' working commits into a single cloud-backed commit graph. - **Commit index refactoring**: Transitioning to a lazy commit index inspired by Meta's segmented changelog to handle the monorepo's vast history. - **Filesystem strategy**: Using an internal VFS instead of sparse checkouts by instructing the filesystem driver to materialize target commits directly. - **Service layer**: Introducing a central server daemon enabling cloud IDEs and internal web review platforms to programmatically interact with repos. - **Contact & Community**: Community discussions are held on Discord (linked via the project's GitHub repository), and inquiries can be sent directly to `martinvonz@google.com`.
## Notable quotes > [06:11](https://www.youtube.com/watch?v=bx_LGilOuE4&t=371s) The working copy will never be dirty, so if you check out a different commit or rebase or something, it will never tell you that you have unstaged changes. — Martin von Zweigbergk
> [27:45](https://www.youtube.com/watch?v=bx_LGilOuE4&t=1665s) The Git backend is just what I would recommend to everyone for many, many years ahead anyway. — Martin von Zweigbergk
> [29:35](https://www.youtube.com/watch?v=bx_LGilOuE4&t=1775s) We're hoping to create a single huge commit graph with all the commits from all Google developers in just one graph. — Martin von Zweigbergk
## Mentioned Martin von Zweigbergk, Jujutsu, jj, Git, Mercurial, Google, Ericsson, ClearCase, CVS, Perforce, Piper, CitC, Fig, Rachel Potvin, Josh Levenberg, Elijah Newren, Rust, Dropbox, BitKeeper, Meta, GitHub, Discord
## Video description Presented by Martin von Zweigbergk
Jujutsu (jj) can be used as an alternative CLI for Git repos, but it's much more than just a different CLI. It adds many new features, such as undo, anonymous branches, first-class conflicts (stored in commits), and automatic rebasing of descendants on rewrite. It also makes the working copy an actual commit (created automatically), leading to a simpler and more powerful UX than the staging area. The session is going to cover jj's design and features, and our plans for the project at Google.
About Git Merge: Git Merge is dedicated to amplifying new voices in the Git community and showcasing the most thought-provoking projects from developers, maintainers, and teams around the world. Git Merge 2022 took place at Morgan Manufacturing in Chicago, IL on September 14th and 15th.
[Source](https://www.youtube.com/watch?v=bx_LGilOuE4)