# Jujutsu v0.39.0 - Product: Jujutsu (https://whatsnew.fyi/product/jujutsu) - Vendor: jj-vcs - Date: 2026-03-04 - Version: v0.39.0 - Original notes: https://github.com/jj-vcs/jj/releases/tag/v0.39.0 - Permalink: https://whatsnew.fyi/product/jujutsu/releases/v0.39.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Add `jj arrange` command to reorder and abandon revisions in a TUI - **added** — Add `jj bookmark advance` command to automatically move bookmarks forward to a target revision - **added** — Add support for push options in `jj git push` with the `--option` flag and `-o` short alias - **added** — Add `new_description` template evaluation in `jj new` to populate initial commit description - **added** — Add `first()`, `last()`, `get(index)`, `reverse()`, `skip(count)`, and `take(count)` methods on list types in templates - **added** — Add `builtin_draft_commit_description_with_diff` template that includes diff in commit description editor - **added** — Add `name:x` pattern aliases in revsets and templates such as `grep:x` - **added** — Add user aliases support in filesets - **added** — Add `jj util snapshot` command to manually or programmatically trigger a snapshot - **added** — Add `Timestamp::since(ts)` template function to return TimestampRange between two timestamps - **added** — Add `--simplify-parents` flag to `jj rebase` to apply simplify-parents transformation - **added** — Add support for new flags in `jj gerrit upload` including `--reviewer` and `--label` - **added** — Add `--overwrite-existing` flag to `jj bookmark rename` to replace existing bookmarks - **added** — Add conditional configuration support based on environment variables with `--when.environments` - **changed** — Relative paths now used by `jj workspace add` to enable workspaces in containers or when moved together - **changed** — `jj undo` now outputs what operation was undone in addition to the operation restored to - **changed** — Bookmarks with two or more consecutive `-` characters no longer require quoting in revsets - **changed** — `jj rebase --branch` and `jj rebase --source` now print a message instead of returning an error for empty revision sets - **changed** — Changed Git representation of conflicted commits to include files from first side of conflict - **changed** — Background snapshotting now suppresses stdout and stderr to avoid long hangs - **changed** — `jj gerrit upload` no longer requires the `-r` flag and defaults to uploading current work - **removed** — Drop support for legacy index files written by jj < 0.33 - **removed** — Remove deprecated config options `core.fsmonitor` and `core.watchman.register-snapshot-trigger` - **removed** — Remove deprecated command `jj op undo` - **deprecated** — `jj debug snapshot` is deprecated in favor of `jj util snapshot` and will be removed in v0.45.0 - **fixed** — Windows: use native file locks (LockFileEx) instead of polling with file creation - **fixed** — `jj` now safely detaches HEAD of alternate Git worktrees if their checked-out branch is moved or deleted - **fixed** — `jj file track --include-ignored` now works when fsmonitor.backend is set to watchman ###### 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.39.0/install-and-setup/) to get started. ###### Release highlights * `jj arrange` command brings up a TUI where you can reorder and abandon revisions. [#1531](https://github.com/jj-vcs/jj/issues/1531) * `jj bookmark advance` automatically moves bookmarks forward to a target revision (defaults to `@`) using customization points `revsets.bookmark-advance-from` and `revsets.bookmark-advance-to`. It is heavily inspired by the longstanding community alias `jj tug`. ###### Breaking changes * Dropped support for legacy index files written by jj < 0.33. New index files will be created as needed. * The following deprecated config options have been removed: - `core.fsmonitor` - `core.watchman.register-snapshot-trigger` * The deprecated command `jj op undo` has been removed. Use `jj op revert` or `jj undo`/`redo` instead. ###### Deprecations * `jj debug snapshot` is deprecated in favor of `jj util snapshot`. Although this was an undocumented command in the first place, it will be removed after 6 months (v0.45.0) to give people time to migrate away. ###### New features * Add support for push options in `jj git push` with the `--option` flag. This allows users to pass options to the remote server when pushing commits. The short alias `-o` is also supported. * `jj new` now evaluates the `new_description` template to populate the initial commit description when no `-m` message is provided. * Templates now support `first()`, `last()`, `get(index)`, `reverse()`, `skip(count)`, and `take(count)` methods on list types for more flexible list manipulation. * New `builtin_draft_commit_description_with_diff` template that includes the diff in the commit description editor, making it easier to review changes while writing commit messages. * Revsets and templates now support `name:x` pattern aliases such as `'grep:x' = 'description(regex:x)'`. * Filesets now support [user aliases](docs/filesets.md#aliases). * `jj workspace add` now links with relative paths. This enables workspaces to work inside containers or when moved together. Existing workspaces with absolute paths will continue to work as before. * `jj undo` now also outputs what operation was undone, in addition to the operation restored to. * Bookmarks with two or more consecutive `-` characters no longer need to be quoted in revsets. For example, `jj diff -r '"foo--bar"'` can now be written as `jj diff -r foo--bar`. * New flag `--simplify-parents` on `jj rebase` to apply the same transformation as `jj simplify-parents` on the rebased commits. [#7711](https://github.com/jj-vcs/jj/issues/7711) * `jj rebase --branch` and `jj rebase --source` will no longer return an error if the given argument resolves to an empty revision set (`jj rebase --revisions` already behaved this way). Instead, a message will be printed to inform the user why nothing has changed. * Changed Git representation of conflicted commits to include files from the first side of the conflict. This should prevent unchanged files from being highlighted as "added" in editors when checking out a conflicted commit in a colocated workspace. * New template function `Timestamp::since(ts)` that returns the `TimestampRange` between two timestamps. It can be used in conjunction with `.duration()` in order to obtain a human-friendly duration between two `Timestamp`s. * Added new `jj util snapshot` command to manually or programmatically trigger a snapshot. This introduces an official alternative to the previously-undocumented `jj debug snapshot` command. The Watchman integration has also been updated to use this command instead. * Changed background snapshotting to suppress stdout and stderr to avoid lon _[Truncated at 4000 characters — full notes: https://github.com/jj-vcs/jj/releases/tag/v0.39.0]_