# Jujutsu v0.44.0 - Product: Jujutsu (https://whatsnew.fyi/product/jujutsu) - Vendor: jj-vcs - Date: 2026-08-06 - Version: v0.44.0 - Original notes: https://github.com/jj-vcs/jj/releases/tag/v0.44.0 - Permalink: https://whatsnew.fyi/product/jujutsu/releases/v0.44.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** — Support for fetching and pushing tags, now stabilized with tracked or untracked tag management like bookmarks - **added** — New merge_point() revset function to find the point where multiple branches merge - **added** — jj workspace list now shows workspace roots by default with customizable output - **added** — New try(expr, fallback...) template function to suppress runtime errors - **added** — jj run now processes revisions from oldest to newest by default with guaranteed start order - **added** — jj run gained --passthrough flag to connect subprocess stdout/stderr directly to terminal - **added** — jj run gained --ignore-changes flag to avoid editing revisions even if command modifies working copy - **added** — jj run gained --ignore-errors flag to continue running remaining revisions on nonzero exit code - **added** — jj file search now supports -n/--line-number to prefix matches with 1-based line numbers - **added** — jj git push gained --allow-conflicts flag to allow pushing commits containing conflicts - **added** — New jj tag track/untrack commands to associate local tags with remotes - **added** — Added builtin_log() revset alias for the built-in default jj log revset - **added** — Added config option diff.stat.max-bar-width to limit the ++-- bar width - **added** — jj absorb now supports --interactive/-i/--tool to interactively choose which hunks to absorb - **changed** — jj git fetch now fetches tags the same way it fetches bookmarks as @ with automatic tracking - **changed** — jj git clone --fetch-tags=all|none|included removed in favor of --tag=PATTERN - **changed** — jj git push --all now pushes all tags in addition to bookmarks - **changed** — WorkspaceRef.root() and RepoPath.absolute() template functions now return Option and FsPath respectively instead of String - **changed** — jj file search now prints every matched line prefixed by file path instead of only file paths - **changed** — Passing an argument more than once is no longer an error, with last occurrence winning - **fixed** — Recursive alias definitions are detected more precisely to allow repeated aliases and fallback to default commands - **fixed** — Git temporary files are now cleaned up more reliably in the presence of signals - **fixed** — Fixed Git HEAD mismatch after the working copy became immutable - **fixed** — jj now creates a new working-copy revision as soon as the current workspace becomes immutable and during snapshotting - **fixed** — Snapshotting no longer fails if working copy contains a path with non-UTF-8 name - **fixed** — Fixed failure when reading configuration in copied repo with empty repo-level configuration directory - **fixed** — jj diff and jj status no longer omit a rename or copy in merge commit when renamed source is present in multiple parents ###### 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.44.0/install-and-setup/) to get started. ###### Release highlights * Support for fetching and pushing tags has now been stabilized. Tags can be tracked or untracked just like bookmarks. Tracked tags are pushed by default. ###### Breaking changes * `jj git fetch` now fetches tags the same way it fetches bookmarks. Tags are fetched as `@`, and these remote tags are automatically tracked by local tags of the same name. Running `jj git fetch` in an existing repository will re-fetch all tags to initialize the tracking state. Git's `tagOpt` is no longer respected. To disable tag fetching, set `remotes..fetch-tags = '~*'` in the jj configuration. * `jj git clone --fetch-tags=all|none|included` is removed in favor of `--tag=PATTERN`. * `jj git push --all` now pushes all tags in addition to bookmarks. * The `WorkspaceRef.root()` and `RepoPath.absolute()` template functions now return `Option` and `FsPath` respectively, instead of `String`. The `path` keyword in `jj config list` templates now returns `Option`. * `jj file search` now prints every matched line prefixed by the file path, instead of only the file paths of files containing a match. Use `--name-only` for the previous behavior. [#9399](https://github.com/jj-vcs/jj/issues/9399) * Passing an argument more than once is no longer an error. The last occurrence wins, so `jj --no-pager --no-pager version` and `jj log -n 5 -n 10` now work, and an argument baked into an alias or a wrapper can be given explicitly as well. Arguments that can be specified multiple times, such as `--config` and `jj log -r`, are unaffected and still collect all of their values. [#8101](https://github.com/jj-vcs/jj/issues/8101) [#9859](https://github.com/jj-vcs/jj/issues/9859) ###### Deprecations None ###### New features * New `merge_point()` revset function which (similar to `fork_point`) finds the point where multiple branches merge. * `jj workspace list` now shows workspace roots by default. The output can be customized with `templates.workspace_list` or `-T`, and `WorkspaceRef.root()` returns an optional `FsPath` value. [#9713](https://github.com/jj-vcs/jj/pull/9713), [#9826](https://github.com/jj-vcs/jj/pull/9826) * New `try(expr, fallback...)` template function to suppress runtime errors. * `jj run` now processes revisions from oldest to newest by default. The start order is guaranteed: each revision begins execution only after the previous one has started, even with `--jobs` higher than 1. * `jj run` gained a `--passthrough` flag that connects the subprocess's stdout/stderr directly to the terminal instead of capturing output. * `jj run` gained a `--ignore-changes` flag to avoid editing any revisions even if the command modifies the working copy. * `jj run` gained a `--ignore-errors` flag to continue running against the remaining revisions even if the command exits with a nonzero exit code. * `jj file search` now supports `-n`/`--line-number` to prefix each match with its 1-based line number within the file. * `jj git push` gained a `--allow-conflicts` flag to allow pushing commits containing conflicts. * New `jj tag track`/`untrack` commands to associate local tags with remotes. Note that fetched tags are tracked by default. * Added `builtin_log()` revset alias for the built-in default `jj log` revset. `revsets.log` now defaults to `builtin_log()`, so custom log revsets can reuse the built-in default instead of copying its full expression. * Added config option `diff.stat.max-bar-width` for use with `--stat` to limit the `++--` bar width. In the templating language, `diff.stat()` can optionally take a second (positional or named _[Truncated at 4000 characters — full notes: https://github.com/jj-vcs/jj/releases/tag/v0.44.0]_