# Jujutsu v0.41.0 - Product: Jujutsu (https://whatsnew.fyi/product/jujutsu) - Vendor: jj-vcs - Date: 2026-05-07 - Version: v0.41.0 - Original notes: https://github.com/jj-vcs/jj/releases/tag/v0.41.0 - Permalink: https://whatsnew.fyi/product/jujutsu/releases/v0.41.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** — jj fix now supports formatting specific line ranges via line-range-arg and run-tool-if-zero-line-ranges configs - **added** — New global flag --no-integrate-operation to run commands without impacting repo state or working copy - **added** — The --pattern flag for file search now accepts various pattern kinds through kind:pattern syntax - **added** — New config option diff.git.show-path-prefix to suppress a/ and b/ path prefixes in diff --git output - **added** — New replace(pattern, content, replacement) template function supporting pattern replacement with lambda formatting - **added** — New ByteString template type for things like file content - **added** — jj gerrit upload now supports --message, --edit, --merged options and multiple --hashtag repetitions - **added** — New remotes..fetch-bookmarks and fetch-tags options to configure default fetch targets - **added** — JJ_PAGER environment variable can now override ui.pager config - **changed** — The --pattern flag for file search now defaults to regex: instead of glob: - **changed** — jj git push --all/--tracked/-r REVSETS no longer fails when revisions are private or have conflicts - **changed** — Branch/bookmark patterns passed to jj git clone are now saved to jj repo settings file instead of .git/config - **deprecated** — In the templating language, Operation type's .tags() function has been deprecated in favor of .attributes() - **fixed** — Improved consistency with git handling of .gitignore including / after entries and \r\r\n for macOS files - **fixed** — jj status now filters untracked paths by fileset - **fixed** — Improved performance for snapshotting, visibly improving jj status speed for large repositories - **fixed** — Pre-existing Git submodule directories are no longer considered conflicts in checkouts - **fixed** — Fixed a panic in jj gerrit upload when run without -r and the inferred revision was immutable - **fixed** — jj status now respects path filters in working copy summaries - **fixed** — jj git remote rename/remove now updates the trunk() alias - **fixed** — Commands no longer incorrectly diagnose a stale working copy and suggest running jj op integrate when it would have no effect ###### 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.41.0/install-and-setup/) to get started. ###### Release highlights * `jj fix` now supports formatting specific line ranges (allowing you to format only modified lines); see the configuration manual and notes below for more. * The new global flag `--no-integrate-operation` will let you run a command without impacting the repo state or the working copy, which is useful when automated tools may create snapshots in the background. ###### Breaking changes * The `--pattern` flag for `file search` now defaults to `regex:` instead of `glob:`. * `jj git push --all`/`--tracked`/`-r REVSETS` no longer fails when revisions to push are private or have conflicts. Bookmarks which aren't eligible to push will be skipped. * Branch/bookmark patterns passed to `jj git clone` are now saved to jj's repo settings file instead of `.git/config`. Git fetch refspecs are set to the default value. ###### Deprecations * In the templating language, the `Operation` type's `.tags()` function has been deprecated in favor of `.attributes()`. ###### New features * The `--pattern` flag for `file search` now accepts various pattern kinds through `kind:pattern` syntax. * A new global flag `--no-integrate-operation` lets you run a command without impacting the repo state or the working copy. * A new config option `diff.git.show-path-prefix` can be used to suppress the `a/` and `b/` path prefixes in the `diff --git` output. * `jj fix` now supports line range-limited formatting via the `fix.tools..line-range-arg` and `run-tool-if-zero-line-ranges` configs. This allows running tools only on modified lines and fine-grained control over when the tool is run. If you have set the `line-range-arg` config, use `--all-lines` to match the previous behavior of formatting the entire file. * A new `replace(pattern, content, replacement)` template function is added which supports replacement of content in templates, using a lambda to format replacement text. It supports all string patterns, including regexes with capture groups (e.g. `replace(regex:'(\w+) (\w+)', "hello world", |c| c.get(1) ++ " " ++ c.get(2))`). * New `ByteString` template type for things like file content. * `jj gerrit upload` now supports the new options `--message` (`-m`), `--edit` and `--merged`. You can now also pass multiple hashtags by repeating the `--hashtag` option. * New `remotes..fetch-bookmarks`/`fetch-tags` options to [configure default fetch targets.](docs/config.md#default-bookmarks-and-tags-to-fetch) * `JJ_PAGER` can now override the `ui.pager` config, matching `JJ_EDITOR` for callers that need a jj-specific environment override. ###### Fixed bugs * Improving consistency with `git` handling of `.gitignore`, including `/` after entries and `\r\r\n` for MacOS files. * `jj status` filters untracked paths by fileset [#9287](https://github.com/jj-vcs/jj/issues/9287) * Improved performance for snapshotting, visibly improving `jj status` speed for large repositories. * Pre-existing Git submodule directories are no longer considered conflicts in checkouts. [#8065](https://github.com/jj-vcs/jj/issues/8065). * Fixed a panic in `jj gerrit upload` when run without `-r` and the inferred revision was immutable. [#9398](https://github.com/jj-vcs/jj/issues/9398) * `jj status` respects path filters in working copy summaries. * `jj git remote rename`/`remove` now updates the `trunk()` alias. * Commands would sometimes incorrectly diagnose a stale working copy and suggest running `jj op integrate` when it would have no effect. This should now be much less likely to happen in practice. [#9314](https://github.com/jj-vcs/jj/issues/9314) ###### Contributors Thanks to the _[Truncated at 4000 characters — full notes: https://github.com/jj-vcs/jj/releases/tag/v0.41.0]_