Download Latest Version jj-v0.36.0-x86_64-pc-windows-msvc.zip (8.4 MB)
Email in envelope

Get an email when there's a new version of Jujutsu

Home / v0.34.0
Name Modified Size InfoDownloads / Week
Parent folder
jj-v0.34.0-x86_64-apple-darwin.tar.gz 2025-10-01 9.3 MB
jj-v0.34.0-x86_64-pc-windows-msvc.zip 2025-10-01 8.4 MB
jj-v0.34.0-aarch64-apple-darwin.tar.gz 2025-10-01 8.8 MB
jj-v0.34.0-aarch64-pc-windows-msvc.zip 2025-10-01 8.0 MB
jj-v0.34.0-x86_64-unknown-linux-musl.tar.gz 2025-10-01 9.6 MB
jj-v0.34.0-aarch64-unknown-linux-musl.tar.gz 2025-10-01 9.0 MB
jj-v0.34.0-docs-html.tar.gz 2025-10-01 1.6 MB
README.md 2025-10-01 4.9 kB
v0.34.0 source code.tar.gz 2025-10-01 2.1 MB
v0.34.0 source code.zip 2025-10-01 2.5 MB
Totals: 10 Items   59.3 MB 0

About

jj is a Git-compatible version control system that is both simple and powerful. See the installation instructions to get started.

Release highlights

  • Support for uploading changes to Gerrit Code Review with jj gerrit upload. This lets you submit trees or multiple stacks of work at once. Support for fetching changes, submitting changes, and other operations is not yet implemented. This should be considered experimental, and we welcome feedback on using it.

  • Support for automated bisection using jj bisect run; this will continuously bisect a commit range until a given commit is found to trigger a bug.

Breaking changes

  • Git-based repositories are now colocated by default. Configure git.colocate = false to keep the previous behavior.

  • Conflicts written by jj < 0.11 are no longer supported. They will now appear as regular files with a .jjconflict suffix and JSON contents.

  • The minimum supported Rust version (MSRV) is now 1.88.

Deprecations

  • Various flags on jj describe and jj commit have been deprecated in favor of jj metaedit. They are:
  • describe: --author, --reset-author, --no-edit
  • commit: --author, --reset-author

  • The storage format of remote bookmarks and tags has changed. Remote bookmarks will be written in both old and new formats to retain forward compatibility. Git-tracking tags are also recorded for future native tagging support. This change should be transparent, but let us know if you see anything odd.

New features

  • The new command jj bisect run uses binary search to find a commit that introduced a bug.

  • The default editor on Unix is now nano instead of pico.

  • New config option merge.hunk-level = "word" to enable word-level merging.

  • New config option merge.same-change = "keep" to disable lossy resolution rule for same-change conflicts. #6369

  • Templates now support a replace() method on strings for pattern-based string replacement with optional limits. Supports all string patterns, including regex with capture groups (e.g. "hello world".replace(regex:'(\w+) (\w+)', "$2 $1")).

  • A new builtin hyperlink(url, text) template alias creates clickable hyperlinks using OSC8 escape sequences for terminals that support them.

  • Added a new conditional configuration --when.platforms to include settings only on certain platforms.

  • External diff commands now support substitution variable $width for the number of available terminal columns.

  • The new jj gerrit upload command allows you to upload given revisions to an instance of Gerrit Code Review.

  • jj bookmark create/set/move use the working copy as a default again and no longer require an explicit revision argument. This walks back a deprecation from jj 0.26, as the community feedback was mostly negative. Instead, bookmarking an empty revision now produces a warning, to help you catch the case where you meant to bookmark the parent revision.

  • The revset function exactly(x, n) will now evaluate x and error if it does not have exactly n elements.

  • jj util exec now matches the exit status of the program it runs, and doesn't print anything.

  • jj config get now supports displaying array and table config values.

  • jj util exec sets the environment variable JJ_WORKSPACE_ROOT

Fixed bugs

  • Fetching repositories that have submodules no longer errors even if submodule.recurse=true is set in .gitconfig (but jj still isn't able to fetch the submodules or to operate on them).

Contributors

Thanks to the people who made this release happen!

  • Angel Ezquerra (@AngelEzquerra)
  • Anton Älgmyr (@algmyr)
  • Antonin Delpeuch (@wetneb)
  • Austin Seipp (@thoughtpolice)
  • Benjamin Tan (@bnjmnt4n)
  • Conner Petzold (@ConnerPetzold)
  • Daniel Luz (@mernen)
  • Daniele Sassoli (@DanieleSassoli)
  • David Barsky (@davidbarsky)
  • Dinu Blanovschi (@dnbln)
  • Gaëtan Lehmann (@glehmann)
  • George Christou (@gechr)
  • Ian Wrzesinski (@isuffix)
  • Ilya Grigoriev (@ilyagr)
  • Isaac Corbrey (@icorbrey)
  • Ivan Petkov (@ipetkov)
  • Jonas Fierlings (@PigeonF)
  • loudgolem (@phanirithvij)
  • Martin von Zweigbergk (@martinvonz)
  • Matt Stark (@matts1)
  • Matt T. Proud (@matttproud)
  • Michael Pratt (@prattmic)
  • MochikoNyan (@MochikoNyan)
  • Philip Metzger (@PhilipMetzger)
  • Reilly Brogan (@ReillyBrogan)
  • Remo Senekowitsch (@senekor)
  • Reuven Lazarus (@rlazarus)
  • Scott Taylor (@scott2000)
  • Stephen Jennings (@jennings)
  • Steven Sherry (@Steven0351)
  • Theo Buehler (@botovq)
  • Yuya Nishihara (@yuja)
Source: README.md, updated 2025-10-01