v0.43.0

jj-vcs/jjv0.43.0Jul 2, 2026by yuja

AI Summary

This release introduces the `jj run` command for running commands over multiple changes with isolated working copies, adds support for config files in `/etc/jj`, and improves Git integration by rebasing descendants based on change IDs. It also removes several deprecated functions and symbols.

Key Highlights

  • Introduces `jj run` for running commands (e.g., cargo check) over multiple changes with private working copies.
  • Enhances `jj git fetch` to generate evolution history based on preserved change IDs.
  • Adds `jj show --reversed` flag for viewing revisions in reverse order.
  • Config files are now searched in the `/etc/jj` directory.
  • Deprecated `git_head()` and `git_refs()` functions have been removed from revsets and templates.

Breaking Changes

  • Removed deprecated `git_head()` and `git_refs()` functions from revsets and templates.
  • Git-like symbols (e.g., `refs/heads/main`) are no longer resolved to revisions.
  • Removed deprecated `ui.revsets-use-glob-by-default` config option.
  • `jj bookmark track`/`untrack` no longer supports `<kind>:<bookmark>@<remote>` patterns.

New Features

  • `jj show` now supports the `--reversed` flag.
  • `jj` now looks for config files in `/etc/jj`.
  • `jj config gc` deletes configuration of deleted/moved repos.
  • `jj run` allows running commands over sets of changes with private working copies.
  • `jj gerrit upload` now supports the `-o` (`--option`) flag.
  • `jj git fetch` now rebases descendants of revisions based on change IDs.
  • Added a `forks()` revset function.
  • Colors config now supports crossed-out text styling.

Full Release Notes

### About

jj is a Git-compatible version control system that is both simple and powerful. See
the [installation instructions](https://jj-vcs.github.io/jj/v0.43.0/install-and-setup/) to get started.

### Release highlights

* `jj run` allows you to run a command over a set of changes, each with their
  own private working copy; the commands may update the working copy and
  changes/conflicts are propagated accordingly, e.g., `jj run -- cargo check
  --all-features` or `jj run -- cargo fix` behaves as one might expect.

### Breaking changes

* The deprecated `git_head()` and `git_refs()` functions have been removed from
  revsets and templates.

* Git-like symbols (e.g. `refs/heads/main`) are no longer resolved to
  revisions. Use the bookmark/tag `<name>` or `<name>@<remote>` syntax instead.

* The deprecated `ui.revsets-use-glob-by-default` option has been removed.

* `jj bookmark track`/`untrack` no longer supports `<kind>:<bookmark>@<remote>`
  patterns. However, the `<bookmark>@<remote>` symbol syntax is still supported.
  [#9226](https://github.com/jj-vcs/jj/issues/9226)

### Deprecations

### New features

* `jj show` now supports `--reversed` flag.

* `jj` now looks for config files in `/etc/jj`.

* `jj config gc` will delete configuration of deleted/moved repos from
  `~/.config/jj/repos` folder.
  [#9362](https://github.com/jj-vcs/jj/issues/9362)

* `jj run` allows you to run a command over a set of changes, each with their
  own private working copy; the commands may update the working copy and
  changes/conflicts are propagated accordingly, e.g., `jj run -- cargo check
  --all-features` or `jj run -- cargo fix` behaves as one might expect.

* `jj gerrit upload` now supports the `-o` (`--option`) flag, which works like
  `git push -o` (`--push-option`).

* `jj git fetch` now rebases the descendants of revisions that were rewritten
  based on their change IDs. Previously, when multiple bookmarked revisions
  existed in a stack, those rewritten revisions and their descendants wouldn't
  always be rebased. Note that immutable descendants will not be rebased.

* Add a `forks()` revset function that yields all commits with more than 1 child.

* `colors` config now supports crossed-out text styling with
  `{ crossed-out = true }`.

### Fixed bugs

* On Windows, querying a path's file identity no longer follows symbolic links,
  matching the behavior on Unix. Previously a symlink shared the identity of its
  target, so two symlinks pointing at the same target were treated as the same
  file. This identity check is used when writing the working copy to detect
  aliases of the reserved `.git` and `.jj` directories.
  [#8924](https://github.com/jj-vcs/jj/issues/8924)

* `jj` now creates a new working-copy revision during snapshotting if the
  working copy was immutable. Previously, the new revision was created
  immediately after the working copy became immutable.
  [#7751](https://github.com/jj-vcs/jj/issues/7751)
  [#9338](https://github.com/jj-vcs/jj/issues/9338)

* `jj git remote add` now warns if the new remote exactly matches an existing
  remote's fetch URL or effective push URL.
  [#413](https://github.com/jj-vcs/jj/issues/413)

* Fixed corrupt loose Git objects on Intel Raptor Lake CPU and aarch64.
  Previously, jj could report a successful commit even though `git fsck` would
  later fail with `incorrect data check`, `corrupt loose object`, or `missing
  blob`, and later jj operations could fail with `corrupt deflate stream`.

### Contributors

Thanks to the people who made this release happen!

* adlerd (@adlerd)
* ase (@adamse)
* Atakan Yenel (@atakanyenel)
* Austin Seipp (@thoughtpolice)
* Benjamin Tan (@bnjmnt4n)
* David Rieber (@drieber)
* figsoda (@figsoda)
* Gaëtan Lehmann (@glehmann)
* hexbinoct (@hexbinoct)
* Jakub Stasiak (@jstasiak)
* Jonas Carpay (@jonascarpay)
* Joseph Lou (@josephlou5)
* Josh McKinney (@joshka)
* Josh Steadmon (@steadmon)
* Martin von Zweigbergk (@martinvonz)
* Matt Stark (@matts1)
* Philip Metzger (@PhilipMetzger)
* shoce (@shoce)
* Stephen Jennings (@jennings)
* Thomas Axelsson (@thomas-2nd)
* Vincent Ging Ho Yim (@cenviity)
* Yuya Nishihara (@yuja)