# Bazel changelog > A fast, scalable, multi-language build system. - Vendor: Google - Category: Developer Tools - License: Apache-2.0 - Language: Java - Official site: https://bazel.build - Tracked by: What's New (https://whatsnew.fyi/product/bazel) - Harvested from: GitHub (bazelbuild/bazel) - Entries below: 23 (newest first) 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'. ## Releases ### 9.3.0rc5 - Date: 2026-10-06 - Version: 9.3.0rc5 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/9.3.0rc5 - Permalink: https://whatsnew.fyi/product/bazel/releases/9.3.0rc5 - Labels: Pre-release - **fixed** — Fix regression that caused select builtin actions to incorrectly inherit resource set overrides - **fixed** — Fixed a bug that could cause ignore_directories() to not ignore directories - **fixed** — The C++ include scanner now properly resolves headers that are generated at build time and included as part of the toolchain - **changed** — Test targets can now be built for a target platform that no execution platform is compatible with, with execution failing at runtime instead of analysis - **fixed** — Fixed repository_ctx.download_and_extract failing with an "Expected a file with a ... suffix" error when --downloader_config blocks all URLs and the archive is served from the repository cache - **fixed** — Running bazel shutdown no longer results in stale lockfile data being written - **fixed** — Cycles between MODULE.bazel files connected via include() are now reported as an error instead of hanging the build - **fixed** — Fixed a crash while evaluating MODULE.bazel files when Skyframe dropped its temporary state in response to memory pressure - **added** — rctx.download* and mctx.download* now report the size of downloaded files - **added** — Added repository_ctx.patch(directory) - **fixed** — Facts of reproducible module extensions are now restored to the expected state after external modifications by every Bazel command that updates the lockfile - **fixed** — bazel fetch --force no longer causes the fetched repos to be fetched again by the next build with a spurious warning about external modifications - **fixed** — Sandboxed actions no longer fail with "File exists" when an input is nested under a source directory input - **fixed** — Fixed a build failure with --execution_log_compact_file when a C++ action template has no inputs - **fixed** — Action rewinding with --rewind_lost_inputs can now succeed even if the remote cache doesn't verify that AC entries aren't stale - **fixed** — Fix incremental remote builds failing to create output directories beneath stale dangling symlinks - **changed** — Files uploaded to the disk cache are now copied with a copy-on-write clone where the filesystem supports it - **changed** — Retry 408 and 429 status codes with HTTP remote caching - **fixed** — Disk cache entries deleted by a concurrent garbage collection are now treated as cache misses and don't result in failures - **fixed** — Invalidate cached action execution results when remote cache/executor endpoints or --remote_instance_name change between invocations > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 9.3.0rc5 (2026-10-06) Bazel 9.3.0 is a minor LTS release. It is fully backward compatible with Bazel 9 releases starting from 9.0.1; see [Bazel 9.0.1 release notes](https://github.com/bazelbuild/bazel/releases/tag/9.0.1) for a note on backward compatibility. ##### General * Fix for regression in [#29284](https://github.com/bazelbuild/bazel/pull/29284) that caused select builtin actions to incorrectly inherit resource set overrides. ([#31136](https://github.com/bazelbuild/bazel/pull/31136)) * Fixed a bug that could cause `ignore_directories()` to not ignore directories. ([#30564](https://github.com/bazelbuild/bazel/pull/30564)) ##### C++ / Objective-C * The C++ include scanner now properly resolves headers that are generated at build time and included as part of the toolchain. ([#30879](https://github.com/bazelbuild/bazel/pull/30879)) ##### Configurability * Test targets can now be built for a target platform that no execution platform is compatible with, e.g. to cross-compile them. Running such a test fails with an error at execution time instead of failing analysis. ([#30946](https://github.com/bazelbuild/bazel/pull/30946)) ##### External Deps * Fixed `repository_ctx.download_and_extract` failing with an "Expected a file with a ... suffix" error when `--downloader_config` blocks all URLs and the archive is served from the repository cache. ([#30470](https://github.com/bazelbuild/bazel/pull/30470)) * Running `bazel shutdown` no longer results in stale lockfile data being written. ([#30394](https://github.com/bazelbuild/bazel/pull/30394)) * Cycles between `MODULE.bazel` files connected via `include()` are now reported as an error instead of hanging the build. ([#30804](https://github.com/bazelbuild/bazel/pull/30804)) * Fixed a crash while evaluating `MODULE.bazel` files when Skyframe dropped its temporary state in response to memory pressure. ([#30809](https://github.com/bazelbuild/bazel/pull/30809)) * `{r,m}ctx.download*` now report the size of downloaded files. ([#30974](https://github.com/bazelbuild/bazel/pull/30974)) * Added `repository_ctx.patch(directory)`. ([#31016](https://github.com/bazelbuild/bazel/pull/31016)) * Facts of reproducible module extensions are now restored to the expected state after external modifications by every Bazel command that updates the lockfile. ([#31073](https://github.com/bazelbuild/bazel/pull/31073)) * `bazel fetch --force` no longer causes the fetched repos to be fetched again by the next build with a spurious warning about external modifications. ([#31134](https://github.com/bazelbuild/bazel/pull/31134)) ##### Local Execution * Sandboxed actions no longer fail with "File exists" when an input is nested under a source directory input. ([#31414](https://github.com/bazelbuild/bazel/pull/31414)) ##### Performance * Fixed a build failure with `--execution_log_compact_file` when a C++ action template has no inputs. ([#30826](https://github.com/bazelbuild/bazel/pull/30826)) ##### Remote Execution * Action rewinding (`--rewind_lost_inputs`) can now succeed even if the remote cache doesn't verify that AC entries aren't stale. ([#30393](https://github.com/bazelbuild/bazel/pull/30393)) * Fix incremental remote builds failing to create output directories beneath stale dangling symlinks. ([#30969](https://github.com/bazelbuild/bazel/pull/30969)) * Files uploaded to the disk cache are now copied with a copy-on-write clone where the filesystem supports it, so a cache entry can share its blocks with the output it was uploaded from. ([#30901](https://github.com/bazelbuild/bazel/pull/30901)) * Retry 408 and 429 status codes with HTTP remote caching. ([#30973](https://github.com/bazelbuild/bazel/pull/30973)) * Disk cache entries dele _[Truncated at 4000 characters — full notes: https://github.com/bazelbuild/bazel/releases/tag/9.3.0rc5]_ ### 9.3.0rc4 - Date: 2026-10-01 - Version: 9.3.0rc4 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/9.3.0rc4 - Permalink: https://whatsnew.fyi/product/bazel/releases/9.3.0rc4 - Labels: Pre-release - **fixed** — Fix regression that caused select builtin actions to incorrectly inherit resource set overrides - **fixed** — Fix bug that could cause ignore_directories() to not ignore directories - **fixed** — C++ include scanner now properly resolves headers that are generated at build time and included as part of the toolchain - **changed** — Test targets can now be built for a target platform that no execution platform is compatible with, failing at execution time instead of analysis - **fixed** — Fix repository_ctx.download_and_extract failing with an "Expected a file with a ... suffix" error when downloader_config blocks all URLs and the archive is served from the repository cache - **fixed** — Running bazel shutdown no longer results in stale lockfile data being written - **fixed** — Cycles between MODULE.bazel files connected via include() are now reported as an error instead of hanging the build - **fixed** — Fix crash while evaluating MODULE.bazel files when Skyframe dropped its temporary state in response to memory pressure - **added** — rctx.download* and mctx.download* now report the size of downloaded files - **added** — Add repository_ctx.patch(directory) - **fixed** — Facts of reproducible module extensions are now restored to the expected state after external modifications by every Bazel command that updates the lockfile - **fixed** — bazel fetch --force no longer causes the fetched repos to be fetched again by the next build with a spurious warning about external modifications - **fixed** — Sandboxed actions no longer fail with "File exists" when an input is nested under a source directory input - **fixed** — Fix build failure with --execution_log_compact_file when a C++ action template has no inputs - **fixed** — Action rewinding with --rewind_lost_inputs can now succeed even if the remote cache doesn't verify that AC entries aren't stale - **fixed** — Fix incremental remote builds failing to create output directories beneath stale dangling symlinks - **changed** — Files uploaded to the disk cache are now copied with a copy-on-write clone where the filesystem supports it - **fixed** — Retry 408 and 429 status codes with HTTP remote caching - **fixed** — Disk cache entries deleted by a concurrent garbage collection are now treated as cache misses and don't result in failures - **fixed** — Invalidate cached action execution results when remote cache/executor endpoints or --remote_instance_name change between invocations > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 9.3.0rc4 (2026-09-30) Bazel 9.3.0 is a minor LTS release. It is fully backward compatible with Bazel 9 releases starting from 9.0.1; see [Bazel 9.0.1 release notes](https://github.com/bazelbuild/bazel/releases/tag/9.0.1) for a note on backward compatibility. ##### General * Fix for regression in [#29284](https://github.com/bazelbuild/bazel/pull/29284) that caused select builtin actions to incorrectly inherit resource set overrides. ([#31136](https://github.com/bazelbuild/bazel/pull/31136)) * Fixed a bug that could cause `ignore_directories()` to not ignore directories. ([#30564](https://github.com/bazelbuild/bazel/pull/30564)) ##### C++ / Objective-C * The C++ include scanner now properly resolves headers that are generated at build time and included as part of the toolchain. ([#30879](https://github.com/bazelbuild/bazel/pull/30879)) ##### Configurability * Test targets can now be built for a target platform that no execution platform is compatible with, e.g. to cross-compile them. Running such a test fails with an error at execution time instead of failing analysis. ([#30946](https://github.com/bazelbuild/bazel/pull/30946)) ##### External Deps * Fixed `repository_ctx.download_and_extract` failing with an "Expected a file with a ... suffix" error when `--downloader_config` blocks all URLs and the archive is served from the repository cache. ([#30470](https://github.com/bazelbuild/bazel/pull/30470)) * Running `bazel shutdown` no longer results in stale lockfile data being written. ([#30394](https://github.com/bazelbuild/bazel/pull/30394)) * Cycles between `MODULE.bazel` files connected via `include()` are now reported as an error instead of hanging the build. ([#30804](https://github.com/bazelbuild/bazel/pull/30804)) * Fixed a crash while evaluating `MODULE.bazel` files when Skyframe dropped its temporary state in response to memory pressure. ([#30809](https://github.com/bazelbuild/bazel/pull/30809)) * `{r,m}ctx.download*` now report the size of downloaded files. ([#30974](https://github.com/bazelbuild/bazel/pull/30974)) * Added `repository_ctx.patch(directory)`. ([#31016](https://github.com/bazelbuild/bazel/pull/31016)) * Facts of reproducible module extensions are now restored to the expected state after external modifications by every Bazel command that updates the lockfile. ([#31073](https://github.com/bazelbuild/bazel/pull/31073)) * `bazel fetch --force` no longer causes the fetched repos to be fetched again by the next build with a spurious warning about external modifications. ([#31134](https://github.com/bazelbuild/bazel/pull/31134)) ##### Local Execution * Sandboxed actions no longer fail with "File exists" when an input is nested under a source directory input. ([#31414](https://github.com/bazelbuild/bazel/pull/31414)) ##### Performance * Fixed a build failure with `--execution_log_compact_file` when a C++ action template has no inputs. ([#30826](https://github.com/bazelbuild/bazel/pull/30826)) ##### Remote Execution * Action rewinding (`--rewind_lost_inputs`) can now succeed even if the remote cache doesn't verify that AC entries aren't stale. ([#30393](https://github.com/bazelbuild/bazel/pull/30393)) * Fix incremental remote builds failing to create output directories beneath stale dangling symlinks. ([#30969](https://github.com/bazelbuild/bazel/pull/30969)) * Files uploaded to the disk cache are now copied with a copy-on-write clone where the filesystem supports it, so a cache entry can share its blocks with the output it was uploaded from. ([#30901](https://github.com/bazelbuild/bazel/pull/30901)) * Retry 408 and 429 status codes with HTTP remote caching. ([#30973](https://github.com/bazelbuild/bazel/pull/30973)) * Disk cache entries dele _[Truncated at 4000 characters — full notes: https://github.com/bazelbuild/bazel/releases/tag/9.3.0rc4]_ ### 8.8.1 - Date: 2026-09-24 - Version: 8.8.1 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/8.8.1 - Permalink: https://whatsnew.fyi/product/bazel/releases/8.8.1 - **fixed** — Fixed a regression that caused source directories to be slower to digest for remote execution and cache lookups > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 8.8.1 (2026-09-24) Bazel 8.8.1 is a patch LTS release. It is fully backward compatible with Bazel 8.0 and contains selected changes by the Bazel community and Google engineers. ##### Remote Execution * Fixed a regression that caused source directories to be slower to digest for remote execution and cache lookups. ([#31178](https://github.com/bazelbuild/bazel/pull/31178)) ##### Acknowledgments This release contains contributions from many people at Google, as well as Fabian Meumertzheim. _Notice_: Bazel installers contain binaries licensed under the GPLv2 with Classpath exception. Those installers should always be redistributed along with the source code. Some versions of Bazel contain a bundled version of OpenJDK. The license of the bundled OpenJDK and other open-source components can be displayed by running the command `bazel license`. The vendor and version information of the bundled OpenJDK can be displayed by running the command `bazel info java-runtime`. The binaries and source-code of the bundled OpenJDK can be [downloaded from our mirror server](https://mirror.bazel.build/openjdk/index.html). _Security_: All our binaries are signed with our [public key](https://bazel.build/bazel-release.pub.gpg) 3D5919B448457EE0. ### 9.3.0rc3 - Date: 2026-09-23 - Version: 9.3.0rc3 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/9.3.0rc3 - Permalink: https://whatsnew.fyi/product/bazel/releases/9.3.0rc3 - Labels: Pre-release - **fixed** — Fix for regression that caused select builtin actions to incorrectly inherit resource set overrides - **fixed** — Fixed a bug that could cause ignore_directories() to not ignore directories - **fixed** — The C++ include scanner now properly resolves headers that are generated at build time and included as part of the toolchain - **changed** — Test targets can now be built for a target platform that no execution platform is compatible with, with execution failing at runtime instead of during analysis - **fixed** — Fixed repository_ctx.download_and_extract failing with an Expected a file with a ... suffix error when --downloader_config blocks all URLs and the archive is served from the repository cache - **fixed** — Running bazel shutdown no longer results in stale lockfile data being written - **fixed** — Cycles between MODULE.bazel files connected via include() are now reported as an error instead of hanging the build - **fixed** — Fixed a crash while evaluating MODULE.bazel files when Skyframe dropped its temporary state in response to memory pressure - **changed** — rctx.download* and mctx.download* now report the size of downloaded files - **added** — Added repository_ctx.patch(directory) - **fixed** — Facts of reproducible module extensions are now restored to the expected state after external modifications by every Bazel command that updates the lockfile - **fixed** — bazel fetch --force no longer causes the fetched repos to be fetched again by the next build with a spurious warning about external modifications - **fixed** — Fixed a build failure with --execution_log_compact_file when a C++ action template has no inputs - **fixed** — Action rewinding (--rewind_lost_inputs) can now succeed even if the remote cache doesn't verify that AC entries aren't stale - **fixed** — Fix incremental remote builds failing to create output directories beneath stale dangling symlinks - **changed** — Files uploaded to the disk cache are now copied with a copy-on-write clone where the filesystem supports it, so a cache entry can share its blocks with the output it was uploaded from - **changed** — Retry 408 and 429 status codes with HTTP remote caching - **fixed** — Disk cache entries deleted by a concurrent garbage collection are now treated as cache misses and don't result in failures - **fixed** — Invalidate cached action execution results when remote cache/executor endpoints or --remote_instance_name change between invocations - **fixed** — With Build without the Bytes, a requested top-level output that was deleted locally is now reliably redownloaded in the next build that requests it, even if other invocations ran in between > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 9.3.0rc3 (2026-09-23) Bazel 9.3.0 is a minor LTS release. It is fully backward compatible with Bazel 9 releases starting from 9.0.1; see [Bazel 9.0.1 release notes](https://github.com/bazelbuild/bazel/releases/tag/9.0.1) for a note on backward compatibility. ##### General * Fix for regression in [#29284](https://github.com/bazelbuild/bazel/pull/29284) that caused select builtin actions to incorrectly inherit resource set overrides. ([#31136](https://github.com/bazelbuild/bazel/pull/31136)) * Fixed a bug that could cause `ignore_directories()` to not ignore directories. ([#30564](https://github.com/bazelbuild/bazel/pull/30564)) ##### C++ / Objective-C * The C++ include scanner now properly resolves headers that are generated at build time and included as part of the toolchain. ([#30879](https://github.com/bazelbuild/bazel/pull/30879)) ##### Configurability * Test targets can now be built for a target platform that no execution platform is compatible with, e.g. to cross-compile them. Running such a test fails with an error at execution time instead of failing analysis. ([#30946](https://github.com/bazelbuild/bazel/pull/30946)) ##### External Deps * Fixed `repository_ctx.download_and_extract` failing with an "Expected a file with a ... suffix" error when `--downloader_config` blocks all URLs and the archive is served from the repository cache. ([#30470](https://github.com/bazelbuild/bazel/pull/30470)) * Running `bazel shutdown` no longer results in stale lockfile data being written. ([#30394](https://github.com/bazelbuild/bazel/pull/30394)) * Cycles between `MODULE.bazel` files connected via `include()` are now reported as an error instead of hanging the build. ([#30804](https://github.com/bazelbuild/bazel/pull/30804)) * Fixed a crash while evaluating `MODULE.bazel` files when Skyframe dropped its temporary state in response to memory pressure. ([#30809](https://github.com/bazelbuild/bazel/pull/30809)) * `{r,m}ctx.download*` now report the size of downloaded files. ([#30974](https://github.com/bazelbuild/bazel/pull/30974)) * Added `repository_ctx.patch(directory)`. ([#31016](https://github.com/bazelbuild/bazel/pull/31016)) * Facts of reproducible module extensions are now restored to the expected state after external modifications by every Bazel command that updates the lockfile. ([#31073](https://github.com/bazelbuild/bazel/pull/31073)) * `bazel fetch --force` no longer causes the fetched repos to be fetched again by the next build with a spurious warning about external modifications. ([#31134](https://github.com/bazelbuild/bazel/pull/31134)) ##### Performance * Fixed a build failure with `--execution_log_compact_file` when a C++ action template has no inputs. ([#30826](https://github.com/bazelbuild/bazel/pull/30826)) ##### Remote Execution * Action rewinding (`--rewind_lost_inputs`) can now succeed even if the remote cache doesn't verify that AC entries aren't stale. ([#30393](https://github.com/bazelbuild/bazel/pull/30393)) * Fix incremental remote builds failing to create output directories beneath stale dangling symlinks. ([#30969](https://github.com/bazelbuild/bazel/pull/30969)) * Files uploaded to the disk cache are now copied with a copy-on-write clone where the filesystem supports it, so a cache entry can share its blocks with the output it was uploaded from. ([#30901](https://github.com/bazelbuild/bazel/pull/30901)) * Retry 408 and 429 status codes with HTTP remote caching. ([#30973](https://github.com/bazelbuild/bazel/pull/30973)) * Disk cache entries deleted by a concurrent garbage collection are now treated as cache misses and don't result in failures. ([#31021](https://github.com/bazelbuild/bazel/pull/31021)) * Invalidate cached action execution resul _[Truncated at 4000 characters — full notes: https://github.com/bazelbuild/bazel/releases/tag/9.3.0rc3]_ ### 8.8.1rc2 - Date: 2026-09-22 - Version: 8.8.1rc2 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/8.8.1rc2 - Permalink: https://whatsnew.fyi/product/bazel/releases/8.8.1rc2 - Labels: Pre-release - **fixed** — Fixed a regression that caused source directories to be slower to digest for remote execution and cache lookups > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 8.8.1rc2 (2026-09-22) Bazel 8.8.1 is a patch LTS release. It is fully backward compatible with Bazel 8.0 and contains selected changes by the Bazel community and Google engineers. ##### Remote Execution * Fixed a regression that caused source directories to be slower to digest for remote execution and cache lookups. ([#31178](https://github.com/bazelbuild/bazel/pull/31178)) ##### Acknowledgments This release contains contributions from many people at Google, as well as Fabian Meumertzheim. _Notice_: Bazel installers contain binaries licensed under the GPLv2 with Classpath exception. Those installers should always be redistributed along with the source code. Some versions of Bazel contain a bundled version of OpenJDK. The license of the bundled OpenJDK and other open-source components can be displayed by running the command `bazel license`. The vendor and version information of the bundled OpenJDK can be displayed by running the command `bazel info java-runtime`. The binaries and source-code of the bundled OpenJDK can be [downloaded from our mirror server](https://mirror.bazel.build/openjdk/index.html). _Security_: All our binaries are signed with our [public key](https://bazel.build/bazel-release.pub.gpg) 3D5919B448457EE0. ### 8.8.1rc1 - Date: 2026-09-22 - Version: 8.8.1rc1 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/8.8.1rc1 - Permalink: https://whatsnew.fyi/product/bazel/releases/8.8.1rc1 - Labels: Pre-release - **fixed** — Fixed a regression that caused source directories to be slower to digest for remote execution and cache lookups > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 8.8.1rc1 (2026-09-22) Bazel 8.8.1 is a patch LTS release. It is fully backward compatible with Bazel 8.0 and contains selected changes by the Bazel community and Google engineers. ##### Remote Execution * Fixed a regression that caused source directories to be slower to digest for remote execution and cache lookups. ([#31178](https://github.com/bazelbuild/bazel/pull/31178)) ##### Acknowledgments This release contains contributions from many people at Google, as well as Fabian Meumertzheim. _Notice_: Bazel installers contain binaries licensed under the GPLv2 with Classpath exception. Those installers should always be redistributed along with the source code. Some versions of Bazel contain a bundled version of OpenJDK. The license of the bundled OpenJDK and other open-source components can be displayed by running the command `bazel license`. The vendor and version information of the bundled OpenJDK can be displayed by running the command `bazel info java-runtime`. The binaries and source-code of the bundled OpenJDK can be [downloaded from our mirror server](https://mirror.bazel.build/openjdk/index.html). _Security_: All our binaries are signed with our [public key](https://bazel.build/bazel-release.pub.gpg) 3D5919B448457EE0. ### 9.3.0rc2 - Date: 2026-09-17 - Version: 9.3.0rc2 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/9.3.0rc2 - Permalink: https://whatsnew.fyi/product/bazel/releases/9.3.0rc2 - Labels: Pre-release - **changed** — Add -Djava.net.preferIPv6Addresses=system to startup JVM args which may impact certain IPv4-only environments - **fixed** — Fix regression that caused select builtin actions to incorrectly inherit resource set overrides - **fixed** — Fix bug that could cause ignore_directories() to not ignore directories - **fixed** — C++ include scanner now properly resolves headers that are generated at build time and included as part of the toolchain - **changed** — Test targets can now be built for a target platform that no execution platform is compatible with, failing at execution time instead of analysis - **fixed** — Fix repository_ctx.download_and_extract failing with 'Expected a file with a ... suffix' error when --downloader_config blocks all URLs and archive is served from repository cache - **fixed** — Running bazel shutdown no longer results in stale lockfile data being written - **fixed** — Cycles between MODULE.bazel files connected via include() are now reported as an error instead of hanging the build - **fixed** — Fix crash while evaluating MODULE.bazel files when Skyframe dropped its temporary state in response to memory pressure - **added** — rctx.download* and mctx.download* now report the size of downloaded files - **added** — Add repository_ctx.patch(directory) - **fixed** — Facts of reproducible module extensions are now restored to the expected state after external modifications by every Bazel command that updates the lockfile - **fixed** — bazel fetch --force no longer causes the fetched repos to be fetched again by the next build with a spurious warning about external modifications - **fixed** — Fix build failure with --execution_log_compact_file when a C++ action template has no inputs - **fixed** — Action rewinding (--rewind_lost_inputs) can now succeed even if the remote cache doesn't verify that AC entries aren't stale - **fixed** — Fix incremental remote builds failing to create output directories beneath stale dangling symlinks - **changed** — Files uploaded to the disk cache are now copied with a copy-on-write clone where the filesystem supports it - **changed** — Retry 408 and 429 status codes with HTTP remote caching - **fixed** — Disk cache entries deleted by a concurrent garbage collection are now treated as cache misses and don't result in failures - **fixed** — Invalidate cached action execution results when remote cache/executor endpoints or --remote_instance_name change between invocations > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 9.3.0rc2 (2026-09-17) Bazel 9.3.0 is a minor LTS release. It is fully backward compatible with Bazel 9 releases starting from 9.0.1; see [Bazel 9.0.1 release notes](https://github.com/bazelbuild/bazel/releases/tag/9.0.1) for a note on backward compatibility. ##### General * Adds `-Djava.net.preferIPv6Addresses=system` to startup JVM args which may impact certain IPv4-only environments. Override as necessary with `--host_jvm_args`. ([#31079](https://github.com/bazelbuild/bazel/pull/31079)) (This is now reverted in [RC3](https://github.com/bazelbuild/bazel/releases/tag/9.3.0rc3) for a backwards compatibility issue) * Fix for regression in [#29284](https://github.com/bazelbuild/bazel/pull/29284) that caused select builtin actions to incorrectly inherit resource set overrides. ([#31136](https://github.com/bazelbuild/bazel/pull/31136)) * Fixed a bug that could cause `ignore_directories()` to not ignore directories. ([#30564](https://github.com/bazelbuild/bazel/pull/30564)) ##### C++ / Objective-C * The C++ include scanner now properly resolves headers that are generated at build time and included as part of the toolchain. ([#30879](https://github.com/bazelbuild/bazel/pull/30879)) ##### Configurability * Test targets can now be built for a target platform that no execution platform is compatible with, e.g. to cross-compile them. Running such a test fails with an error at execution time instead of failing analysis. ([#30946](https://github.com/bazelbuild/bazel/pull/30946)) ##### External Deps * Fixed `repository_ctx.download_and_extract` failing with an "Expected a file with a ... suffix" error when `--downloader_config` blocks all URLs and the archive is served from the repository cache. ([#30470](https://github.com/bazelbuild/bazel/pull/30470)) * Running `bazel shutdown` no longer results in stale lockfile data being written. ([#30394](https://github.com/bazelbuild/bazel/pull/30394)) * Cycles between `MODULE.bazel` files connected via `include()` are now reported as an error instead of hanging the build. ([#30804](https://github.com/bazelbuild/bazel/pull/30804)) * Fixed a crash while evaluating `MODULE.bazel` files when Skyframe dropped its temporary state in response to memory pressure. ([#30809](https://github.com/bazelbuild/bazel/pull/30809)) * `{r,m}ctx.download*` now report the size of downloaded files. ([#30974](https://github.com/bazelbuild/bazel/pull/30974)) * Added `repository_ctx.patch(directory)`. ([#31016](https://github.com/bazelbuild/bazel/pull/31016)) * Facts of reproducible module extensions are now restored to the expected state after external modifications by every Bazel command that updates the lockfile. ([#31073](https://github.com/bazelbuild/bazel/pull/31073)) * `bazel fetch --force` no longer causes the fetched repos to be fetched again by the next build with a spurious warning about external modifications. ([#31134](https://github.com/bazelbuild/bazel/pull/31134)) ##### Performance * Fixed a build failure with `--execution_log_compact_file` when a C++ action template has no inputs. ([#30826](https://github.com/bazelbuild/bazel/pull/30826)) ##### Remote Execution * Action rewinding (`--rewind_lost_inputs`) can now succeed even if the remote cache doesn't verify that AC entries aren't stale. ([#30393](https://github.com/bazelbuild/bazel/pull/30393)) * Fix incremental remote builds failing to create output directories beneath stale dangling symlinks. ([#30969](https://github.com/bazelbuild/bazel/pull/30969)) * Files uploaded to the disk cache are now copied with a copy-on-write clone where the filesystem supports it, so a cache entry can share its blocks with the output it was uploaded from. ([#30901](https://github.com/bazelbuild/bazel/pull/30901)) _[Truncated at 4000 characters — full notes: https://github.com/bazelbuild/bazel/releases/tag/9.3.0rc2]_ ### 9.3.0rc1 - Date: 2026-09-15 - Version: 9.3.0rc1 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/9.3.0rc1 - Permalink: https://whatsnew.fyi/product/bazel/releases/9.3.0rc1 - Labels: Pre-release - **added** — Add -Djava.net.preferIPv6Addresses=system to startup JVM args, which may impact certain IPv4-only environments; override as necessary with --host_jvm_args - **fixed** — Fix regression that caused select builtin actions to incorrectly inherit resource set overrides - **fixed** — Fix bug that could cause ignore_directories() to not ignore directories - **fixed** — C++ include scanner now properly resolves headers that are generated at build time and included as part of the toolchain - **changed** — Test targets can now be built for a target platform that no execution platform is compatible with, with execution-time error instead of analysis-time failure - **fixed** — Fix repository_ctx.download_and_extract failing with 'Expected a file with a ... suffix' error when --downloader_config blocks all URLs and the archive is served from the repository cache - **fixed** — Running bazel shutdown no longer results in stale lockfile data being written - **fixed** — Cycles between MODULE.bazel files connected via include() are now reported as an error instead of hanging the build - **fixed** — Fix crash while evaluating MODULE.bazel files when Skyframe dropped its temporary state in response to memory pressure - **added** — rctx and mctx download methods now report the size of downloaded files - **added** — Add repository_ctx.patch(directory) - **fixed** — Facts of reproducible module extensions are now restored to the expected state after external modifications by every Bazel command that updates the lockfile - **fixed** — bazel fetch --force no longer causes the fetched repos to be fetched again by the next build with a spurious warning about external modifications - **fixed** — Fix build failure with --execution_log_compact_file when a C++ action template has no inputs - **fixed** — Action rewinding with --rewind_lost_inputs can now succeed even if the remote cache doesn't verify that AC entries aren't stale - **fixed** — Fix incremental remote builds failing to create output directories beneath stale dangling symlinks - **changed** — Files uploaded to the disk cache are now copied with a copy-on-write clone where the filesystem supports it, so a cache entry can share its blocks with the output it was uploaded from - **fixed** — Retry 408 and 429 status codes with HTTP remote caching - **fixed** — Disk cache entries deleted by a concurrent garbage collection are now treated as cache misses and don't result in failures - **fixed** — Invalidate cached action execution results when remote cache/executor endpoints or --remote_instance_name change between invocations - **fixed** — With Build without the Bytes, a requested top-level output that was deleted locally is now reliably redownloaded in the next build that requests it, even if other invocations ran in between - **changed** — Windows shell launcher now prepends rather than appends the directory containing the shell binary, restoring the behavior of Bazel 8.x > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 9.3.0rc1 (2026-09-15) Bazel 9.3.0 is a minor LTS release. It is fully backward compatible with Bazel 9 releases starting from 9.0.1; see [Bazel 9.0.1 release notes](https://github.com/bazelbuild/bazel/releases/tag/9.0.1) for a note on backward compatibility. ##### General * Adds `-Djava.net.preferIPv6Addresses=system` to startup JVM args which may impact certain IPv4-only environments. Override as necessary with `--host_jvm_args`. ([#31079](https://github.com/bazelbuild/bazel/pull/31079)) (This is now reverted in [RC3](https://github.com/bazelbuild/bazel/releases/tag/9.3.0rc3) for a backwards compatibility issue) * Fix for regression in [#29284](https://github.com/bazelbuild/bazel/pull/29284) that caused select builtin actions to incorrectly inherit resource set overrides. ([#31136](https://github.com/bazelbuild/bazel/pull/31136)) * Fixed a bug that could cause `ignore_directories()` to not ignore directories. ([#30564](https://github.com/bazelbuild/bazel/pull/30564)) ##### C++ / Objective-C * The C++ include scanner now properly resolves headers that are generated at build time and included as part of the toolchain. ([#30879](https://github.com/bazelbuild/bazel/pull/30879)) ##### Configurability * Test targets can now be built for a target platform that no execution platform is compatible with, e.g. to cross-compile them. Running such a test fails with an error at execution time instead of failing analysis. ([#30946](https://github.com/bazelbuild/bazel/pull/30946)) ##### External Deps * Fixed `repository_ctx.download_and_extract` failing with an "Expected a file with a ... suffix" error when `--downloader_config` blocks all URLs and the archive is served from the repository cache. ([#30470](https://github.com/bazelbuild/bazel/pull/30470)) * Running `bazel shutdown` no longer results in stale lockfile data being written. ([#30394](https://github.com/bazelbuild/bazel/pull/30394)) * Cycles between `MODULE.bazel` files connected via `include()` are now reported as an error instead of hanging the build. ([#30804](https://github.com/bazelbuild/bazel/pull/30804)) * Fixed a crash while evaluating `MODULE.bazel` files when Skyframe dropped its temporary state in response to memory pressure. ([#30809](https://github.com/bazelbuild/bazel/pull/30809)) * `{r,m}ctx.download*` now report the size of downloaded files. ([#30974](https://github.com/bazelbuild/bazel/pull/30974)) * Added `repository_ctx.patch(directory)`. ([#31016](https://github.com/bazelbuild/bazel/pull/31016)) * Facts of reproducible module extensions are now restored to the expected state after external modifications by every Bazel command that updates the lockfile. ([#31073](https://github.com/bazelbuild/bazel/pull/31073)) * `bazel fetch --force` no longer causes the fetched repos to be fetched again by the next build with a spurious warning about external modifications. ([#31134](https://github.com/bazelbuild/bazel/pull/31134)) ##### Performance * Fixed a build failure with `--execution_log_compact_file` when a C++ action template has no inputs. ([#30826](https://github.com/bazelbuild/bazel/pull/30826)) ##### Remote Execution * Action rewinding (`--rewind_lost_inputs`) can now succeed even if the remote cache doesn't verify that AC entries aren't stale. ([#30393](https://github.com/bazelbuild/bazel/pull/30393)) * Fix incremental remote builds failing to create output directories beneath stale dangling symlinks. ([#30969](https://github.com/bazelbuild/bazel/pull/30969)) * Files uploaded to the disk cache are now copied with a copy-on-write clone where the filesystem supports it, so a cache entry can share its blocks with the output it was uploaded from. ([#30901](https://github.com/bazelbuild/bazel/pull/30901)) _[Truncated at 4000 characters — full notes: https://github.com/bazelbuild/bazel/releases/tag/9.3.0rc1]_ ### 8.8.0 - Date: 2026-08-31 - Version: 8.8.0 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/8.8.0 - Permalink: https://whatsnew.fyi/product/bazel/releases/8.8.0 - **added** — The `and_then` method on transitions can be used to compose transitions, supporting both Starlark transitions and native transitions like `config.exec()` - **added** — The `module_extension(...)` function now accepts a `facts_version` integer parameter to invalidate persisted facts in `MODULE.bazel.lock` for extension authors making breaking changes to the facts schema - **added** — The `--experimental_remote_repo_contents_cache` startup option enables caching of reproducible repository rules in HTTP or gRPC remote caches - **added** — Bazel now parses and ignores Starlark type annotation syntax introduced by newer Bazel versions, gated by `--experimental_starlark_type_syntax` and enabled by default - **changed** — Action rewinding with `--rewind_lost_inputs` can now succeed even if the remote cache does not verify that action cache entries are not stale - **changed** — TCP keepalive is now enabled by default for gRPC connections with reasonable defaults - **changed** — Naming scheme for repo contents cache entries is now more reliable - **changed** — Bounded parallel chunk transfers are now supported for remote execution - **fixed** — Fix and consolidate repo env handling - **fixed** — Fixed an error when using strip_components with archives containing symbolic or hard links - **fixed** — Fixed spurious 'No such file' errors with the remote repo contents cache when a repo contains a symlink to a `.bzl` file - **fixed** — Fixed a crash with `--experimental_remote_repo_contents_cache` when running without a remote or disk cache - **fixed** — Running `bazel shutdown` no longer results in stale lockfile data being written - **fixed** — Fixed Bazel being unable to run a Windows executable whose path is too long to shorten under `MAX_PATH` - **fixed** — Fixed a build failure with `--execution_log_compact_file` when a C++ action template has no inputs - **fixed** — Fixed repo contents cache `FileValue` staleness - **fixed** — Fixed remote repo content caching for non-gRPC backends - **fixed** — Fixed an issue that caused Bazel to fail on a lost input even with build or action rewinding enabled - **fixed** — Prefetch .bzl files in the remote repo contents cache > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 8.8.0 (2026-08-31) Bazel 8.8.0 is a minor LTS release. It is fully backward compatible with Bazel 8.0 and contains selected changes by the Bazel community and Google engineers. ##### Configurability * The `and_then` method on `transition`s can be used to compose transitions. Both Starlark transitions and native transitions (e.g. `config.exec()`) are supported. ([#30330](https://github.com/bazelbuild/bazel/pull/30330)) ##### Core * Fix and consolidate repo env handling ([#29069](https://github.com/bazelbuild/bazel/pull/29069)) * Action rewinding (`--rewind_lost_inputs`) can now succeed even if the remote cache doesn't verify that AC entries aren't stale. ([#30398](https://github.com/bazelbuild/bazel/pull/30398)) ##### External Dependencies * Fixes an error when using strip_components with archives containing symbolic//hard links. ([#30463](https://github.com/bazelbuild/bazel/pull/30463)) * Make naming scheme for repo contents cache entries more reliable ([#29073](https://github.com/bazelbuild/bazel/pull/29073)) * `module_extension(...)` now accepts a `facts_version` integer parameter. Bumping it invalidates the facts persisted in `MODULE.bazel.lock` for that extension, allowing extension authors to make breaking changes to the facts schema without risking misinterpretation by older code paths. ([#29992](https://github.com/bazelbuild/bazel/pull/29992)) * Fixed spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a `.bzl` file. ([#30101](https://github.com/bazelbuild/bazel/pull/30101)) * Fixed a crash with `--experimental_remote_repo_contents_cache` when running without a remote or disk cache. ([#30076](https://github.com/bazelbuild/bazel/pull/30076)) * Running `bazel shutdown` no longer results in stale lockfile data being written. ([#30397](https://github.com/bazelbuild/bazel/pull/30397)) ##### OSS * Fixed Bazel being unable to run a Windows executable whose path is too long to shorten under `MAX_PATH`. ([#30021](https://github.com/bazelbuild/bazel/pull/30021)) ##### Performance * Fixed a build failure with `--execution_log_compact_file` when a C++ action template has no inputs. ([#30830](https://github.com/bazelbuild/bazel/pull/30830)) ##### Remote Execution * The results of reproducible repository rules without dependencies added at runtime (e.g., via `repository_ctx.watch` or `.getenv`) can now be cached in a regular HTTP or gRPC remote cache if the new `--experimental_remote_repo_contents_cache` startup option is provided. ([#29075](https://github.com/bazelbuild/bazel/pull/29075)) * Prefetch .bzl files in the remote repo contents cache. ([#29082](https://github.com/bazelbuild/bazel/pull/29082)) * Fix repo contents cache `FileValue` staleness ([#29084](https://github.com/bazelbuild/bazel/pull/29084)) * Fix remote repo content caching for non-gRPC backends ([#30029](https://github.com/bazelbuild/bazel/pull/30029)) * Support bounded parallel chunk transfers ([#29873](https://github.com/bazelbuild/bazel/pull/29873)) * Enable TCP keepalive by default for gRPC connections with reasonable defaults ([#30157](https://github.com/bazelbuild/bazel/pull/30157)) * Fixed an issue that caused Bazel to fail on a lost input even with build or action rewinding enabled. ([#29928](https://github.com/bazelbuild/bazel/pull/29928)) * Fixed spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a `.bzl` file. ([#30101](https://github.com/bazelbuild/bazel/pull/30101)) ##### Starlark / Build Language * Bazel now parses and ignores the Starlark type annotation syntax introduced by newer Bazel versions (gated by `--experimental_starlark_type_syntax`, enabled by default). ([#30373 _[Truncated at 4000 characters — full notes: https://github.com/bazelbuild/bazel/releases/tag/8.8.0]_ ### 8.8.0rc4 - Date: 2026-08-27 - Version: 8.8.0rc4 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/8.8.0rc4 - Permalink: https://whatsnew.fyi/product/bazel/releases/8.8.0rc4 - Labels: Pre-release - **added** — The `and_then` method on `transition`s can be used to compose transitions, supporting both Starlark transitions and native transitions like `config.exec()` - **added** — The `module_extension(...)` function now accepts a `facts_version` integer parameter to invalidate persisted facts in `MODULE.bazel.lock` for breaking changes to the facts schema - **added** — The `--experimental_remote_repo_contents_cache` startup option enables caching of reproducible repository rules in regular HTTP or gRPC remote caches - **added** — Prefetch .bzl files in the remote repo contents cache - **added** — Support bounded parallel chunk transfers for remote execution - **added** — Enable TCP keepalive by default for gRPC connections with reasonable defaults - **changed** — Bazel now parses and ignores the Starlark type annotation syntax introduced by newer Bazel versions, gated by `--experimental_starlark_type_syntax` and enabled by default - **fixed** — Fix and consolidate repo env handling - **fixed** — Action rewinding with `--rewind_lost_inputs` can now succeed even if the remote cache doesn't verify that AC entries aren't stale - **fixed** — Fix an error when using strip_components with archives containing symbolic or hard links - **fixed** — Make naming scheme for repo contents cache entries more reliable - **fixed** — Fixed spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a .bzl file - **fixed** — Fixed a crash with `--experimental_remote_repo_contents_cache` when running without a remote or disk cache - **fixed** — Running `bazel shutdown` no longer results in stale lockfile data being written - **fixed** — Fix repo contents cache `FileValue` staleness - **fixed** — Fix remote repo content caching for non-gRPC backends - **fixed** — Fixed an issue that caused Bazel to fail on a lost input even with build or action rewinding enabled - **fixed** — Fixed Bazel being unable to run a Windows executable whose path is too long to shorten under `MAX_PATH` - **fixed** — Fixed a build failure with `--execution_log_compact_file` when a C++ action template has no inputs > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 8.8.0rc4 (2026-08-27) Bazel 8.8.0 is a minor LTS release. It is fully backward compatible with Bazel 8.0 and contains selected changes by the Bazel community and Google engineers. ##### Configurability * The `and_then` method on `transition`s can be used to compose transitions. Both Starlark transitions and native transitions (e.g. `config.exec()`) are supported. ([#30330](https://github.com/bazelbuild/bazel/pull/30330)) ##### Core * Fix and consolidate repo env handling ([#29069](https://github.com/bazelbuild/bazel/pull/29069)) * Action rewinding (`--rewind_lost_inputs`) can now succeed even if the remote cache doesn't verify that AC entries aren't stale. ([#30398](https://github.com/bazelbuild/bazel/pull/30398)) ##### External Dependencies * Fixes an error when using strip_components with archives containing symbolic//hard links. ([#30463](https://github.com/bazelbuild/bazel/pull/30463)) * Make naming scheme for repo contents cache entries more reliable ([#29073](https://github.com/bazelbuild/bazel/pull/29073)) * `module_extension(...)` now accepts a `facts_version` integer parameter. Bumping it invalidates the facts persisted in `MODULE.bazel.lock` for that extension, allowing extension authors to make breaking changes to the facts schema without risking misinterpretation by older code paths. ([#29992](https://github.com/bazelbuild/bazel/pull/29992)) * Fixed spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a `.bzl` file. ([#30101](https://github.com/bazelbuild/bazel/pull/30101)) * Fixed a crash with `--experimental_remote_repo_contents_cache` when running without a remote or disk cache. ([#30076](https://github.com/bazelbuild/bazel/pull/30076)) * Running `bazel shutdown` no longer results in stale lockfile data being written. ([#30397](https://github.com/bazelbuild/bazel/pull/30397)) ##### OSS * Fixed Bazel being unable to run a Windows executable whose path is too long to shorten under `MAX_PATH`. ([#30021](https://github.com/bazelbuild/bazel/pull/30021)) ##### Performance * Fixed a build failure with `--execution_log_compact_file` when a C++ action template has no inputs. ([#30830](https://github.com/bazelbuild/bazel/pull/30830)) ##### Remote Execution * The results of reproducible repository rules without dependencies added at runtime (e.g., via `repository_ctx.watch` or `.getenv`) can now be cached in a regular HTTP or gRPC remote cache if the new `--experimental_remote_repo_contents_cache` startup option is provided. ([#29075](https://github.com/bazelbuild/bazel/pull/29075)) * Prefetch .bzl files in the remote repo contents cache. ([#29082](https://github.com/bazelbuild/bazel/pull/29082)) * Fix repo contents cache `FileValue` staleness ([#29084](https://github.com/bazelbuild/bazel/pull/29084)) * Fix remote repo content caching for non-gRPC backends ([#30029](https://github.com/bazelbuild/bazel/pull/30029)) * Support bounded parallel chunk transfers ([#29873](https://github.com/bazelbuild/bazel/pull/29873)) * Enable TCP keepalive by default for gRPC connections with reasonable defaults ([#30157](https://github.com/bazelbuild/bazel/pull/30157)) * Fixed an issue that caused Bazel to fail on a lost input even with build or action rewinding enabled. ([#29928](https://github.com/bazelbuild/bazel/pull/29928)) * Fixed spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a `.bzl` file. ([#30101](https://github.com/bazelbuild/bazel/pull/30101)) ##### Starlark / Build Language * Bazel now parses and ignores the Starlark type annotation syntax introduced by newer Bazel versions (gated by `--experimental_starlark_type_syntax`, enabled by default). ([#30 _[Truncated at 4000 characters — full notes: https://github.com/bazelbuild/bazel/releases/tag/8.8.0rc4]_ ### 8.8.0rc3 - Date: 2026-08-25 - Version: 8.8.0rc3 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/8.8.0rc3 - Permalink: https://whatsnew.fyi/product/bazel/releases/8.8.0rc3 - Labels: Pre-release - **added** — The and_then method on transitions can be used to compose transitions, supporting both Starlark transitions and native transitions like config.exec() - **added** — module_extension(...) now accepts a facts_version integer parameter to invalidate persisted facts in MODULE.bazel.lock - **added** — Results of reproducible repository rules can now be cached in a regular HTTP or gRPC remote cache with the new --experimental_remote_repo_contents_cache startup option - **changed** — Action rewinding (--rewind_lost_inputs) can now succeed even if the remote cache doesn't verify that AC entries aren't stale - **changed** — TCP keepalive is now enabled by default for gRPC connections with reasonable defaults - **changed** — Bazel now parses and ignores the Starlark type annotation syntax introduced by newer Bazel versions, gated by --experimental_starlark_type_syntax and enabled by default - **fixed** — Fixed an error when using strip_components with archives containing symbolic or hard links - **fixed** — Fixed repo env handling and consolidation - **fixed** — Fixed naming scheme for repo contents cache entries to be more reliable - **fixed** — Fixed spurious 'No such file' errors with the remote repo contents cache when a repo contains a symlink to a .bzl file - **fixed** — Fixed a crash with --experimental_remote_repo_contents_cache when running without a remote or disk cache - **fixed** — Running bazel shutdown no longer results in stale lockfile data being written - **fixed** — Fixed Bazel being unable to run a Windows executable whose path is too long to shorten under MAX_PATH - **fixed** — Fixed a build failure with --execution_log_compact_file when a C++ action template has no inputs - **fixed** — Fixed repo contents cache FileValue staleness - **fixed** — Fixed remote repo content caching for non-gRPC backends - **fixed** — Fixed an issue that caused Bazel to fail on a lost input even with build or action rewinding enabled - **added** — Prefetch .bzl files in the remote repo contents cache - **added** — Support bounded parallel chunk transfers > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 8.8.0rc3 (2026-08-25) Bazel 8.8.0 is a minor LTS release. It is fully backward compatible with Bazel 8.0 and contains selected changes by the Bazel community and Google engineers. ##### Configurability * The `and_then` method on `transition`s can be used to compose transitions. Both Starlark transitions and native transitions (e.g. `config.exec()`) are supported. ([#30330](https://github.com/bazelbuild/bazel/pull/30330)) ##### Core * Fix and consolidate repo env handling ([#29069](https://github.com/bazelbuild/bazel/pull/29069)) * Action rewinding (`--rewind_lost_inputs`) can now succeed even if the remote cache doesn't verify that AC entries aren't stale. ([#30398](https://github.com/bazelbuild/bazel/pull/30398)) ##### External Dependencies * Fixes an error when using strip_components with archives containing symbolic//hard links. ([#30463](https://github.com/bazelbuild/bazel/pull/30463)) * Make naming scheme for repo contents cache entries more reliable ([#29073](https://github.com/bazelbuild/bazel/pull/29073)) * `module_extension(...)` now accepts a `facts_version` integer parameter. Bumping it invalidates the facts persisted in `MODULE.bazel.lock` for that extension, allowing extension authors to make breaking changes to the facts schema without risking misinterpretation by older code paths. ([#29992](https://github.com/bazelbuild/bazel/pull/29992)) * Fixed spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a `.bzl` file. ([#30101](https://github.com/bazelbuild/bazel/pull/30101)) * Fixed a crash with `--experimental_remote_repo_contents_cache` when running without a remote or disk cache. ([#30076](https://github.com/bazelbuild/bazel/pull/30076)) * Running `bazel shutdown` no longer results in stale lockfile data being written. ([#30397](https://github.com/bazelbuild/bazel/pull/30397)) ##### OSS * Fixed Bazel being unable to run a Windows executable whose path is too long to shorten under `MAX_PATH`. ([#30021](https://github.com/bazelbuild/bazel/pull/30021)) ##### Performance * Fixed a build failure with `--execution_log_compact_file` when a C++ action template has no inputs. ([#30830](https://github.com/bazelbuild/bazel/pull/30830)) ##### Remote Execution * The results of reproducible repository rules without dependencies added at runtime (e.g., via `repository_ctx.watch` or `.getenv`) can now be cached in a regular HTTP or gRPC remote cache if the new `--experimental_remote_repo_contents_cache` startup option is provided. ([#29075](https://github.com/bazelbuild/bazel/pull/29075)) * Prefetch .bzl files in the remote repo contents cache. ([#29082](https://github.com/bazelbuild/bazel/pull/29082)) * Fix repo contents cache `FileValue` staleness ([#29084](https://github.com/bazelbuild/bazel/pull/29084)) * Fix remote repo content caching for non-gRPC backends ([#30029](https://github.com/bazelbuild/bazel/pull/30029)) * Support bounded parallel chunk transfers ([#29873](https://github.com/bazelbuild/bazel/pull/29873)) * Enable TCP keepalive by default for gRPC connections with reasonable defaults ([#30157](https://github.com/bazelbuild/bazel/pull/30157)) * Fixed an issue that caused Bazel to fail on a lost input even with build or action rewinding enabled. ([#29928](https://github.com/bazelbuild/bazel/pull/29928)) * Fixed spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a `.bzl` file. ([#30101](https://github.com/bazelbuild/bazel/pull/30101)) ##### Starlark / Build Language * Bazel now parses and ignores the Starlark type annotation syntax introduced by newer Bazel versions (gated by `--experimental_starlark_type_syntax`, enabled by default). ([#30 _[Truncated at 4000 characters — full notes: https://github.com/bazelbuild/bazel/releases/tag/8.8.0rc3]_ ### 8.8.0rc2 - Date: 2026-08-18 - Version: 8.8.0rc2 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/8.8.0rc2 - Permalink: https://whatsnew.fyi/product/bazel/releases/8.8.0rc2 - Labels: Pre-release - **added** — The and_then method on transitions can be used to compose transitions, supporting both Starlark transitions and native transitions like config.exec() - **added** — module_extension(...) now accepts a facts_version integer parameter to invalidate persisted facts in MODULE.bazel.lock - **added** — The --experimental_remote_repo_contents_cache startup option allows caching results of reproducible repository rules in HTTP or gRPC remote cache - **added** — Enable TCP keepalive by default for gRPC connections with reasonable defaults - **fixed** — Fixed repo env handling and consolidated environment variable handling for repositories - **fixed** — Action rewinding can now succeed even if the remote cache does not verify that AC entries are not stale - **fixed** — Fixed an error when using strip_components with archives containing symbolic or hard links - **fixed** — Fixed spurious No such file errors with the remote repo contents cache when a repo contains a symlink to a .bzl file - **fixed** — Fixed a crash with --experimental_remote_repo_contents_cache when running without a remote or disk cache - **fixed** — Running bazel shutdown no longer results in stale lockfile data being written - **fixed** — Fixed repo contents cache FileValue staleness issues - **fixed** — Fixed remote repo content caching for non-gRPC backends - **fixed** — Fixed an issue that caused Bazel to fail on a lost input even with build or action rewinding enabled - **fixed** — Fixed Bazel being unable to run a Windows executable whose path is too long to shorten under MAX_PATH - **changed** — Make naming scheme for repo contents cache entries more reliable - **changed** — Prefetch .bzl files in the remote repo contents cache - **changed** — Support bounded parallel chunk transfers - **changed** — Bazel now parses and ignores the Starlark type annotation syntax introduced by newer Bazel versions, gated by --experimental_starlark_type_syntax and enabled by default > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 8.8.0rc2 (2026-08-18) Bazel 8.8.0 is a minor LTS release. It is fully backward compatible with Bazel 8.0 and contains selected changes by the Bazel community and Google engineers. ##### Configurability * The `and_then` method on `transition`s can be used to compose transitions. Both Starlark transitions and native transitions (e.g. `config.exec()`) are supported. ([#30330](https://github.com/bazelbuild/bazel/pull/30330)) ##### Core * Fix and consolidate repo env handling ([#29069](https://github.com/bazelbuild/bazel/pull/29069)) * Action rewinding (`--rewind_lost_inputs`) can now succeed even if the remote cache doesn't verify that AC entries aren't stale. ([#30398](https://github.com/bazelbuild/bazel/pull/30398)) ##### External Dependencies * Fixes an error when using strip_components with archives containing symbolic//hard links. ([#30463](https://github.com/bazelbuild/bazel/pull/30463)) * Make naming scheme for repo contents cache entries more reliable ([#29073](https://github.com/bazelbuild/bazel/pull/29073)) * `module_extension(...)` now accepts a `facts_version` integer parameter. Bumping it invalidates the facts persisted in `MODULE.bazel.lock` for that extension, allowing extension authors to make breaking changes to the facts schema without risking misinterpretation by older code paths. ([#29992](https://github.com/bazelbuild/bazel/pull/29992)) * Fixed spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a `.bzl` file. ([#30101](https://github.com/bazelbuild/bazel/pull/30101)) * Fixed a crash with `--experimental_remote_repo_contents_cache` when running without a remote or disk cache. ([#30076](https://github.com/bazelbuild/bazel/pull/30076)) * Running `bazel shutdown` no longer results in stale lockfile data being written. ([#30397](https://github.com/bazelbuild/bazel/pull/30397)) ##### OSS * Fixed Bazel being unable to run a Windows executable whose path is too long to shorten under `MAX_PATH`. ([#30021](https://github.com/bazelbuild/bazel/pull/30021)) ##### Remote Execution * The results of reproducible repository rules without dependencies added at runtime (e.g., via `repository_ctx.watch` or `.getenv`) can now be cached in a regular HTTP or gRPC remote cache if the new `--experimental_remote_repo_contents_cache` startup option is provided. ([#29075](https://github.com/bazelbuild/bazel/pull/29075)) * Prefetch .bzl files in the remote repo contents cache. ([#29082](https://github.com/bazelbuild/bazel/pull/29082)) * Fix repo contents cache `FileValue` staleness ([#29084](https://github.com/bazelbuild/bazel/pull/29084)) * Fix remote repo content caching for non-gRPC backends ([#30029](https://github.com/bazelbuild/bazel/pull/30029)) * Support bounded parallel chunk transfers ([#29873](https://github.com/bazelbuild/bazel/pull/29873)) * Enable TCP keepalive by default for gRPC connections with reasonable defaults ([#30157](https://github.com/bazelbuild/bazel/pull/30157)) * Fixed an issue that caused Bazel to fail on a lost input even with build or action rewinding enabled. ([#29928](https://github.com/bazelbuild/bazel/pull/29928)) * Fixed spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a `.bzl` file. ([#30101](https://github.com/bazelbuild/bazel/pull/30101)) ##### Starlark / Build Language * Bazel now parses and ignores the Starlark type annotation syntax introduced by newer Bazel versions (gated by `--experimental_starlark_type_syntax`, enabled by default). ([#30373](https://github.com/bazelbuild/bazel/pull/30373)) ##### Acknowledgments This release contains contributions from many people at Google, as well as Armando Montanez, Ashutosh Kumar S _[Truncated at 4000 characters — full notes: https://github.com/bazelbuild/bazel/releases/tag/8.8.0rc2]_ ### 8.8.0rc1 - Date: 2026-08-06 - Version: 8.8.0rc1 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/8.8.0rc1 - Permalink: https://whatsnew.fyi/product/bazel/releases/8.8.0rc1 - Labels: Pre-release - **added** — The and_then method on transitions can be used to compose transitions, supporting both Starlark transitions and native transitions - **added** — module_extension(...) now accepts a facts_version integer parameter to invalidate persisted facts in MODULE.bazel.lock - **added** — The experimental_remote_repo_contents_cache startup option allows caching results of reproducible repository rules in a regular HTTP or gRPC remote cache - **added** — Bazel now parses and ignores the Starlark type annotation syntax introduced by newer Bazel versions - **changed** — Action rewinding (--rewind_lost_inputs) can now succeed even if the remote cache doesn't verify that AC entries aren't stale - **changed** — TCP keepalive is enabled by default for gRPC connections with reasonable defaults - **changed** — Prefetch .bzl files in the remote repo contents cache - **fixed** — Fix and consolidate repo env handling - **fixed** — Fixed an error when using strip_components with archives containing symbolic or hard links - **fixed** — Make naming scheme for repo contents cache entries more reliable - **fixed** — Fixed spurious No such file errors with the remote repo contents cache when a repo contains a symlink to a .bzl file - **fixed** — Fixed a crash with --experimental_remote_repo_contents_cache when running without a remote or disk cache - **fixed** — Running bazel shutdown no longer results in stale lockfile data being written - **fixed** — Fixed Bazel being unable to run a Windows executable whose path is too long to shorten under MAX_PATH - **fixed** — Fix repo contents cache FileValue staleness - **fixed** — Fix remote repo content caching for non-gRPC backends - **fixed** — Fixed an issue that caused Bazel to fail on a lost input even with build or action rewinding enabled - **changed** — Support bounded parallel chunk transfers > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 8.8.0rc1 (2026-08-06) Bazel 8.8.0 is a minor LTS release. It is fully backward compatible with Bazel 8.0 and contains selected changes by the Bazel community and Google engineers. ##### Configurability * The `and_then` method on `transition`s can be used to compose transitions. Both Starlark transitions and native transitions (e.g. `config.exec()`) are supported. ([#30330](https://github.com/bazelbuild/bazel/pull/30330)) ##### Core * Fix and consolidate repo env handling ([#29069](https://github.com/bazelbuild/bazel/pull/29069)) * Action rewinding (`--rewind_lost_inputs`) can now succeed even if the remote cache doesn't verify that AC entries aren't stale. ([#30398](https://github.com/bazelbuild/bazel/pull/30398)) ##### External Dependencies * Fixes an error when using strip_components with archives containing symbolic//hard links. ([#30463](https://github.com/bazelbuild/bazel/pull/30463)) * Make naming scheme for repo contents cache entries more reliable ([#29073](https://github.com/bazelbuild/bazel/pull/29073)) * `module_extension(...)` now accepts a `facts_version` integer parameter. Bumping it invalidates the facts persisted in `MODULE.bazel.lock` for that extension, allowing extension authors to make breaking changes to the facts schema without risking misinterpretation by older code paths. ([#29992](https://github.com/bazelbuild/bazel/pull/29992)) * Fixed spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a `.bzl` file. ([#30101](https://github.com/bazelbuild/bazel/pull/30101)) * Fixed a crash with `--experimental_remote_repo_contents_cache` when running without a remote or disk cache. ([#30076](https://github.com/bazelbuild/bazel/pull/30076)) * Running `bazel shutdown` no longer results in stale lockfile data being written. ([#30397](https://github.com/bazelbuild/bazel/pull/30397)) ##### OSS * Fixed Bazel being unable to run a Windows executable whose path is too long to shorten under `MAX_PATH`. ([#30021](https://github.com/bazelbuild/bazel/pull/30021)) ##### Remote Execution * The results of reproducible repository rules without dependencies added at runtime (e.g., via `repository_ctx.watch` or `.getenv`) can now be cached in a regular HTTP or gRPC remote cache if the new `--experimental_remote_repo_contents_cache` startup option is provided. ([#29075](https://github.com/bazelbuild/bazel/pull/29075)) * Prefetch .bzl files in the remote repo contents cache. ([#29082](https://github.com/bazelbuild/bazel/pull/29082)) * Fix repo contents cache `FileValue` staleness ([#29084](https://github.com/bazelbuild/bazel/pull/29084)) * Fix remote repo content caching for non-gRPC backends ([#30029](https://github.com/bazelbuild/bazel/pull/30029)) * Support bounded parallel chunk transfers ([#29873](https://github.com/bazelbuild/bazel/pull/29873)) * Enable TCP keepalive by default for gRPC connections with reasonable defaults ([#30157](https://github.com/bazelbuild/bazel/pull/30157)) * Fixed an issue that caused Bazel to fail on a lost input even with build or action rewinding enabled. ([#29928](https://github.com/bazelbuild/bazel/pull/29928)) * Fixed spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a `.bzl` file. ([#30101](https://github.com/bazelbuild/bazel/pull/30101)) ##### Starlark / Build Language * Bazel now parses and ignores the Starlark type annotation syntax introduced by newer Bazel versions (gated by `--experimental_starlark_type_syntax`, enabled by default). ([#30373](https://github.com/bazelbuild/bazel/pull/30373)) ##### Acknowledgments This release contains contributions from many people at Google, as well as Armando Montanez, Ashutosh Kumar S _[Truncated at 4000 characters — full notes: https://github.com/bazelbuild/bazel/releases/tag/8.8.0rc1]_ ### 9.2.0 - Date: 2026-07-13 - Version: 9.2.0 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/9.2.0 - Permalink: https://whatsnew.fyi/product/bazel/releases/9.2.0 - **added** — The new `refines_constraint_value` attribute on `constraint_setting` can be used to indicate that any non-default value for that setting specified on a `platform` requires the refined value to also be specified - **fixed** — Bazel no longer crashes when a `label_list_dict` attribute is used in a split transition - **changed** — `exec_properties` now respects `resources:cpu` and `resources:memory` for local resource estimation - **added** — The `and_then` method on `transition`s can be used to compose transitions, supporting both Starlark transitions and native transitions - **changed** — Source directories in external repositories are temporarily allowed to cross package boundaries, gated by the new `--incompatible_check_external_repo_source_dir_package_boundary` flag - **added** — Added SOCKS proxy support for `socks://`, `socks4://`, and `socks5://` URLs in `HTTPS_PROXY`/`HTTP_PROXY` environment variables and related system properties - **added** — Added the `strip_components` attribute to `extract`/`download_and_extract`/`http_archive` to allow stripping of path components when extracting files - **added** — Added the `module_ctx.tag_sort_key(tag)` method, which returns an opaque object for the given tag that can be compared to derive the order in which tags from different classes appear in the MODULE.bazel file - **added** — `module_extension(...)` now accepts a `facts_version` integer parameter to invalidate persisted facts and allow breaking changes to the facts schema - **changed** — External repos are no longer refetched whenever they contribute inputs to an action using the hermetic Linux sandbox - **changed** — The remote repo contents cache now correctly materializes chains of symlinks as action inputs, but no longer supports symlinks into the main repository - **fixed** — Fixed spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a `.bzl` file - **changed** — The remote repo contents cache no longer caches or restores repos with cross-repo symlinks to avoid a large surface area for bugs - **fixed** — Modifying environment variables no longer causes spurious reloading of packages in external repositories - **fixed** — Fixed a performance regression in Bazel 9 that causes `RepoMappingManifest` actions to consume a lot of CPU time - **changed** — Enable TCP keepalive by default for gRPC connections with reasonable defaults - **fixed** — Fixed repo content caching for non-gRPC cache backends - **changed** — CDC chunk uploads and downloads can now happen in parallel within a large blob - **changed** — Bazel no longer limits the size of gRPC messages received from the remote executor or cache - **fixed** — Fixed a crash with `--experimental_remote_repo_contents_cache` when running without a remote or disk cache > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 9.2.0 (2026-07-13) Bazel 9.2.0 is a minor LTS release. It is fully backward compatible with Bazel 9 releases starting from 9.0.1; see [Bazel 9.0.1 release notes](https://github.com/bazelbuild/bazel/releases/tag/9.0.1) for a note on backward compatibility. ##### Configurability * The new `refines_constraint_value` attribute on `constraint_setting` can be used to indicate that any non-default value for that setting specified on a `platform` requires the refined value to also be specified. ([#29727](https://github.com/bazelbuild/bazel/pull/29727)) * Bazel no longer crashes when a `label_list_dict` attribute is used in a split transition (#29830). ([#29856](https://github.com/bazelbuild/bazel/pull/29856)) * `exec_properties` now respects `resources:cpu` and `resources:memory` for local resource estimation. ([#29426](https://github.com/bazelbuild/bazel/pull/29426)) * The `and_then` method on `transition`s can be used to compose transitions. Both Starlark transitions and native transitions (e.g. `config.exec()`) are supported. ([#29888](https://github.com/bazelbuild/bazel/pull/29888)) ##### Core * Source directories in external repositories are temporarily allowed to cross package boundaries. This will be disallowed in the future, gated by the new `--incompatible_check_external_repo_source_dir_package_boundary` flag. ([#30040](https://github.com/bazelbuild/bazel/pull/30040)) ##### External Deps * Added SOCKS proxy support. Bazel now accepts `socks://`, `socks4://`, and `socks5://` URLs in `HTTPS_PROXY`/`HTTP_PROXY` environment variables and related system properties. ([#29364](https://github.com/bazelbuild/bazel/pull/29364)) * Adds the `strip_components` attribute to `extract`/`download_and_extract`/`http_archive` to allow stripping of path components when extracting files. ([#29369](https://github.com/bazelbuild/bazel/pull/29369)) * Added the `module_ctx.tag_sort_key(tag)` method, which returns an opaque object for the given tag that can be compared to derive the order in which tags from different classes appear in the MODULE.bazel file. ([#29484](https://github.com/bazelbuild/bazel/pull/29484)) * `module_extension(...)` now accepts a `facts_version` integer parameter. Bumping it invalidates the facts persisted in `MODULE.bazel.lock` for that extension, allowing extension authors to make breaking changes to the facts schema without risking misinterpretation by older code paths. ([#29871](https://github.com/bazelbuild/bazel/pull/29871)) * External repos are no longer refetched whenever they contribute inputs to an action using the hermetic Linux sandbox. ([#29889](https://github.com/bazelbuild/bazel/pull/29889)) * The remote repo contents cache now correctly materializes chains of symlinks as action inputs, but no longer supports symlinks into the main repository. ([#29959](https://github.com/bazelbuild/bazel/pull/29959)) * Fixed spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a `.bzl` file. ([#30037](https://github.com/bazelbuild/bazel/pull/30037)) * The remote repo contents cache no longer caches or restores repos with cross-repo symlinks, thus avoiding a large surface area for bugs. The effort to reenable this support is tracked by [#30160](https://github.com/bazelbuild/bazel/issues/30160). ([#30190](https://github.com/bazelbuild/bazel/pull/30190)) * Modifying environment variables no longer causes spurious reloading of packages in external repositories. ([#30194](https://github.com/bazelbuild/bazel/pull/30194)) ##### Performance * Fixed a performance regression in Bazel 9 that causes `RepoMappingManifest` actions to consume a lot of CPU time. ([#29807](https://github.com/bazelbuild/bazel/pull/29807)) ##### Remote Execution _[Truncated at 4000 characters — full notes: https://github.com/bazelbuild/bazel/releases/tag/9.2.0]_ ### 9.2.0rc2 - Date: 2026-07-09 - Version: 9.2.0rc2 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/9.2.0rc2 - Permalink: https://whatsnew.fyi/product/bazel/releases/9.2.0rc2 - Labels: Pre-release - **added** — Add refines_constraint_value attribute on constraint_setting to indicate that non-default values for that setting specified on a platform require the refined value to also be specified - **fixed** — Fix crash when label_list_dict attribute is used in a split transition - **changed** — exec_properties now respects resources:cpu and resources:memory for local resource estimation - **added** — Add and_then method on transitions to compose transitions, supporting both Starlark transitions and native transitions - **added** — Add --incompatible_check_external_repo_source_dir_package_boundary flag to disallow source directories in external repositories from crossing package boundaries - **added** — Add SOCKS proxy support for socks://, socks4://, and socks5:// URLs in HTTPS_PROXY and HTTP_PROXY environment variables - **added** — Add strip_components attribute to extract, download_and_extract, and http_archive to allow stripping of path components when extracting files - **added** — Add module_ctx.tag_sort_key(tag) method to return an opaque object for a given tag that can be compared to derive the order of tags from different classes - **added** — Add facts_version integer parameter to module_extension() to invalidate persisted facts in MODULE.bazel.lock for that extension - **fixed** — Prevent external repos from being refetched when they contribute inputs to an action using the hermetic Linux sandbox - **changed** — Remote repo contents cache now correctly materializes chains of symlinks as action inputs but no longer supports symlinks into the main repository - **fixed** — Fix spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a .bzl file - **changed** — Remote repo contents cache no longer caches or restores repos with cross-repo symlinks to avoid a large surface area for bugs - **fixed** — Fix spurious reloading of packages in external repositories when modifying environment variables - **fixed** — Fix performance regression in Bazel 9 causing RepoMappingManifest actions to consume excessive CPU time - **changed** — Enable TCP keepalive by default for gRPC connections with reasonable defaults - **fixed** — Fix repo content caching for non-gRPC cache backends - **changed** — CDC chunk uploads and downloads can now happen in parallel within a large blob - **removed** — Remove limit on the size of gRPC messages received from the remote executor or cache - **fixed** — Fix crash with --experimental_remote_repo_contents_cache when running without a remote or disk cache > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 9.2.0rc2 (2026-07-09) Bazel 9.2.0 is a minor LTS release. It is fully backward compatible with Bazel 9 releases starting from 9.0.1; see [Bazel 9.0.1 release notes](https://github.com/bazelbuild/bazel/releases/tag/9.0.1) for a note on backward compatibility. ##### Configurability * The new `refines_constraint_value` attribute on `constraint_setting` can be used to indicate that any non-default value for that setting specified on a `platform` requires the refined value to also be specified. ([#29727](https://github.com/bazelbuild/bazel/pull/29727)) * Bazel no longer crashes when a `label_list_dict` attribute is used in a split transition (#29830). ([#29856](https://github.com/bazelbuild/bazel/pull/29856)) * `exec_properties` now respects `resources:cpu` and `resources:memory` for local resource estimation. ([#29426](https://github.com/bazelbuild/bazel/pull/29426)) * The `and_then` method on `transition`s can be used to compose transitions. Both Starlark transitions and native transitions (e.g. `config.exec()`) are supported. ([#29888](https://github.com/bazelbuild/bazel/pull/29888)) ##### Core * Source directories in external repositories are temporarily allowed to cross package boundaries. This will be disallowed in the future, gated by the new `--incompatible_check_external_repo_source_dir_package_boundary` flag. ([#30040](https://github.com/bazelbuild/bazel/pull/30040)) ##### External Deps * Added SOCKS proxy support. Bazel now accepts `socks://`, `socks4://`, and `socks5://` URLs in `HTTPS_PROXY`/`HTTP_PROXY` environment variables and related system properties. ([#29364](https://github.com/bazelbuild/bazel/pull/29364)) * Adds the `strip_components` attribute to `extract`/`download_and_extract`/`http_archive` to allow stripping of path components when extracting files. ([#29369](https://github.com/bazelbuild/bazel/pull/29369)) * Added the `module_ctx.tag_sort_key(tag)` method, which returns an opaque object for the given tag that can be compared to derive the order in which tags from different classes appear in the MODULE.bazel file. ([#29484](https://github.com/bazelbuild/bazel/pull/29484)) * `module_extension(...)` now accepts a `facts_version` integer parameter. Bumping it invalidates the facts persisted in `MODULE.bazel.lock` for that extension, allowing extension authors to make breaking changes to the facts schema without risking misinterpretation by older code paths. ([#29871](https://github.com/bazelbuild/bazel/pull/29871)) * External repos are no longer refetched whenever they contribute inputs to an action using the hermetic Linux sandbox. ([#29889](https://github.com/bazelbuild/bazel/pull/29889)) * The remote repo contents cache now correctly materializes chains of symlinks as action inputs, but no longer supports symlinks into the main repository. ([#29959](https://github.com/bazelbuild/bazel/pull/29959)) * Fixed spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a `.bzl` file. ([#30037](https://github.com/bazelbuild/bazel/pull/30037)) * The remote repo contents cache no longer caches or restores repos with cross-repo symlinks, thus avoiding a large surface area for bugs. The effort to reenable this support is tracked by [#30160](https://github.com/bazelbuild/bazel/issues/30160). ([#30190](https://github.com/bazelbuild/bazel/pull/30190)) * Modifying environment variables no longer causes spurious reloading of packages in external repositories. ([#30194](https://github.com/bazelbuild/bazel/pull/30194)) ##### Performance * Fixed a performance regression in Bazel 9 that causes `RepoMappingManifest` actions to consume a lot of CPU time. ([#29807](https://github.com/bazelbuild/bazel/pull/29807)) ##### Remote Execution _[Truncated at 4000 characters — full notes: https://github.com/bazelbuild/bazel/releases/tag/9.2.0rc2]_ ### 9.2.0rc1 - Date: 2026-06-25 - Version: 9.2.0rc1 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/9.2.0rc1 - Permalink: https://whatsnew.fyi/product/bazel/releases/9.2.0rc1 - Labels: Pre-release - **added** — The new `refines_constraint_value` attribute on `constraint_setting` can be used to indicate that any non-default value for that setting specified on a `platform` requires the refined value to also be specified - **fixed** — Bazel no longer crashes when a `label_list_dict` attribute is used in a split transition - **changed** — `exec_properties` now respects `resources:cpu` and `resources:memory` for local resource estimation - **added** — The `and_then` method on `transition`s can be used to compose transitions, supporting both Starlark transitions and native transitions - **added** — Added SOCKS proxy support with `socks://`, `socks4://`, and `socks5://` URLs in `HTTPS_PROXY`/`HTTP_PROXY` environment variables and related system properties - **added** — Added the `strip_components` attribute to `extract`/`download_and_extract`/`http_archive` to allow stripping of path components when extracting files - **added** — Added the `module_ctx.tag_sort_key(tag)` method, which returns an opaque object for the given tag that can be compared to derive the order in which tags from different classes appear in the MODULE.bazel file - **added** — `module_extension(...)` now accepts a `facts_version` integer parameter to invalidate persisted facts in `MODULE.bazel.lock` for that extension - **changed** — External repos are no longer refetched whenever they contribute inputs to an action using the hermetic Linux sandbox - **changed** — The remote repo contents cache now correctly materializes chains of symlinks as action inputs, but no longer supports symlinks into the main repository - **fixed** — Fixed a performance regression in Bazel 9 that causes `RepoMappingManifest` actions to consume a lot of CPU time - **changed** — Enable TCP keepalive by default for gRPC connections with reasonable defaults - **fixed** — Fixed repo content caching for non-gRPC cache backends - **changed** — CDC chunk uploads and downloads can now happen in parallel within a large blob - **changed** — Bazel no longer limits the size of gRPC messages received from the remote executor or cache - **added** — Created `--incompatible_remove_ctx_android_fragment` for Starlark Flags migration - **fixed** — Fixed Bazel being unable to run a Windows executable whose path is too long to shorten under `MAX_PATH`, for example when 8dot3 short names are disabled > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 9.2.0rc1 (2026-06-25) Bazel 9.2.0 is a minor LTS release. It is fully backward compatible with Bazel 9 releases starting from 9.0.1; see [Bazel 9.0.1 release notes](https://github.com/bazelbuild/bazel/releases/tag/9.0.1) for a note on backward compatibility. ##### Configurability * The new `refines_constraint_value` attribute on `constraint_setting` can be used to indicate that any non-default value for that setting specified on a `platform` requires the refined value to also be specified. ([#29727](https://github.com/bazelbuild/bazel/pull/29727)) * Bazel no longer crashes when a `label_list_dict` attribute is used in a split transition (#29830). ([#29856](https://github.com/bazelbuild/bazel/pull/29856)) * `exec_properties` now respects `resources:cpu` and `resources:memory` for local resource estimation. ([#29426](https://github.com/bazelbuild/bazel/pull/29426)) * The `and_then` method on `transition`s can be used to compose transitions. Both Starlark transitions and native transitions (e.g. `config.exec()`) are supported. ([#29888](https://github.com/bazelbuild/bazel/pull/29888)) ##### External Deps * Added SOCKS proxy support. Bazel now accepts `socks://`, `socks4://`, and `socks5://` URLs in `HTTPS_PROXY`/`HTTP_PROXY` environment variables and related system properties. ([#29364](https://github.com/bazelbuild/bazel/pull/29364)) * Adds the `strip_components` attribute to `extract`/`download_and_extract`/`http_archive` to allow stripping of path components when extracting files. ([#29369](https://github.com/bazelbuild/bazel/pull/29369)) * Added the `module_ctx.tag_sort_key(tag)` method, which returns an opaque object for the given tag that can be compared to derive the order in which tags from different classes appear in the MODULE.bazel file. ([#29484](https://github.com/bazelbuild/bazel/pull/29484)) * `module_extension(...)` now accepts a `facts_version` integer parameter. Bumping it invalidates the facts persisted in `MODULE.bazel.lock` for that extension, allowing extension authors to make breaking changes to the facts schema without risking misinterpretation by older code paths. ([#29871](https://github.com/bazelbuild/bazel/pull/29871)) * External repos are no longer refetched whenever they contribute inputs to an action using the hermetic Linux sandbox. ([#29889](https://github.com/bazelbuild/bazel/pull/29889)) * The remote repo contents cache now correctly materializes chains of symlinks as action inputs, but no longer supports symlinks into the main repository. ([#29959](https://github.com/bazelbuild/bazel/pull/29959)) ##### Performance * Fixed a performance regression in Bazel 9 that causes `RepoMappingManifest` actions to consume a lot of CPU time. ([#29807](https://github.com/bazelbuild/bazel/pull/29807)) ##### Remote Execution * Enable TCP keepalive by default for gRPC connections with reasonable defaults ([#29898](https://github.com/bazelbuild/bazel/pull/29898)) * Fixed repo content caching for non-gRPC cache backends. ([#29869](https://github.com/bazelbuild/bazel/pull/29869)) * CDC chunk uploads and downloads can now happen in parallel within a large blob. ([#29796](https://github.com/bazelbuild/bazel/pull/29796)) * Bazel no longer limits the size of gRPC messages received from the remote executor or cache. ([#29885](https://github.com/bazelbuild/bazel/pull/29885)) ##### Starlark / Build Language * Created `--incompatible_remove_ctx_android_fragment` for Starlark Flags migration ([#29884](https://github.com/bazelbuild/bazel/pull/29884)) ##### Windows * Fixed Bazel being unable to run a Windows executable whose path is too long to shorten under `MAX_PATH`, e.g. when 8dot3 short names are disabled (microsoft/Windows-Containers#507). ([#29984](htt _[Truncated at 4000 characters — full notes: https://github.com/bazelbuild/bazel/releases/tag/9.2.0rc1]_ ### 9.1.1 - Date: 2026-06-03 - Version: 9.1.1 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/9.1.1 - Permalink: https://whatsnew.fyi/product/bazel/releases/9.1.1 - **fixed** — Reverted --downloader_config from being a repeatable flag to restore backward compatibility - **fixed** — Fixed a crash with file:// URIs - **fixed** — Fixed a crash with opaque URIs - **fixed** — Fixed an issue that caused Bazel to fail on a lost input even with build or action rewinding enabled - **fixed** — Fixed crash on --remote_default_exec_properties with the same key - **fixed** — Verify the whole blob when downloading chunks - **fixed** — Fixed JVM crash from VerifyException in GrpcCacheClient.onNext() - **fixed** — Invalidate unresolved symlink info after deletion in the RAFS - **changed** — Support bounded parallel chunk transfers > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 9.1.1 (2026-06-03) Bazel 9.1.1 is a patch LTS release. With the exception of `CcInfo` (see below), it is backward compatible with Bazel 9.0. ##### IMPORTANT Compatibility Note: **CcInfo** removal and **rules\_go** If you encounter the error "`The CcInfo symbol has been removed`", this is due to an intentional change in Bazel 9 regarding C++ Starlarkification. While this change was present in 9.0.0, a bug fixed in 9.0.1 ([\#28360](https://github.com/bazelbuild/bazel/pull/28360)) now correctly surfaces this error instead of failing silently or with a confusing message. To fix this, please upgrade rules\_go, rules\_nodejs or any broken rulesets. For example, ``` #### Add repo_name = None if you don't directly depend on them. bazel_dep(name = "rules_go", version = "0.59.0") bazel_dep(name = "rules_nodejs", version = "6.7.3") ``` ##### External Deps * `--downloader_config` was accidentally made a repeatable flag in 9.1.0, which was a backwards-incompatible change. This has been reverted in 9.1.1. ([#29616](https://github.com/bazelbuild/bazel/pull/29616)) * Fixed a crash with `file://` URIs. ([#29579](https://github.com/bazelbuild/bazel/pull/29579)) * Fixed a crash with opaque URIs. ([#29658](https://github.com/bazelbuild/bazel/pull/29658)) ##### Remote Execution * Fixed an issue that caused Bazel to fail on a lost input even with build or action rewinding enabled. ([#29677](https://github.com/bazelbuild/bazel/pull/29677)) * Fix crash on `--remote_default_exec_properties` with the same key. ([#29596](https://github.com/bazelbuild/bazel/pull/29596)) * Verify the whole blob when downloading chunks ([#29593](https://github.com/bazelbuild/bazel/pull/29593)) * Support bounded parallel chunk transfers ([#29614](https://github.com/bazelbuild/bazel/pull/29614)) * Fix JVM crash from VerifyException in GrpcCacheClient.onNext() ([#29583](https://github.com/bazelbuild/bazel/pull/29583)) * Invalidate unresolved symlink info after deletion in the RAFS ([#29671](https://github.com/bazelbuild/bazel/pull/29671)) ##### Acknowledgments This release contains contributions from many people at Google, as well as Armando Montanez, ashutosh0x, Boleyn Su, Fabian Meumertzheim, H5-O5, Joseph Gette, Keith Smiley, Paul Tarjan, Ted Kaplan, Tyler French, and Will Stranton. _Notice_: Bazel installers contain binaries licensed under the GPLv2 with Classpath exception. Those installers should always be redistributed along with the source code. Some versions of Bazel contain a bundled version of OpenJDK. The license of the bundled OpenJDK and other open-source components can be displayed by running the command `bazel license`. The vendor and version information of the bundled OpenJDK can be displayed by running the command `bazel info java-runtime`. The binaries and source-code of the bundled OpenJDK can be [downloaded from our mirror server](https://mirror.bazel.build/openjdk/index.html). _Security_: All our binaries are signed with our [public key](https://releases.bazel.build/bazel-release.pub.gpg) 3D5919B448457EE0. ### 9.1.1rc1 - Date: 2026-05-29 - Version: 9.1.1rc1 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/9.1.1rc1 - Permalink: https://whatsnew.fyi/product/bazel/releases/9.1.1rc1 - Labels: Pre-release - **fixed** — Reverted --downloader_config flag from being accidentally made repeatable in 9.1.0 to restore backward compatibility - **fixed** — Fixed a crash with file:// URIs - **fixed** — Fixed a crash with opaque URIs - **fixed** — Fixed an issue that caused Bazel to fail on a lost input even with build or action rewinding enabled - **fixed** — Fixed crash on --remote_default_exec_properties with the same key - **fixed** — Verify the whole blob when downloading chunks - **changed** — Support bounded parallel chunk transfers - **fixed** — Fixed JVM crash from VerifyException in GrpcCacheClient.onNext() - **fixed** — Invalidate unresolved symlink info after deletion in the RAFS > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 9.1.1rc1 (2026-05-29) Bazel 9.1.1 is a patch LTS release. With the exception of `CcInfo` (see below), it is backward compatible with Bazel 9.0. ##### IMPORTANT Compatibility Note: **CcInfo** removal and **rules\_go** If you encounter the error "`The CcInfo symbol has been removed`", this is due to an intentional change in Bazel 9 regarding C++ Starlarkification. While this change was present in 9.0.0, a bug fixed in 9.0.1 ([\#28360](https://github.com/bazelbuild/bazel/pull/28360)) now correctly surfaces this error instead of failing silently or with a confusing message. To fix this, please upgrade rules\_go, rules\_nodejs or any broken rulesets. For example, ``` #### Add repo_name = None if you don't directly depend on them. bazel_dep(name = "rules_go", version = "0.59.0") bazel_dep(name = "rules_nodejs", version = "6.7.3") ``` ##### External Deps * `--downloader_config` was accidentally made a repeatable flag in 9.1.0, which was a backwards-incompatible change. This has been reverted in 9.1.1. ([#29616](https://github.com/bazelbuild/bazel/pull/29616)) * Fixed a crash with `file://` URIs. ([#29579](https://github.com/bazelbuild/bazel/pull/29579)) * Fixed a crash with opaque URIs. ([#29658](https://github.com/bazelbuild/bazel/pull/29658)) ##### Remote Execution * Fixed an issue that caused Bazel to fail on a lost input even with build or action rewinding enabled. ([#29677](https://github.com/bazelbuild/bazel/pull/29677)) * Fix crash on `--remote_default_exec_properties` with the same key. ([#29596](https://github.com/bazelbuild/bazel/pull/29596)) * Verify the whole blob when downloading chunks ([#29593](https://github.com/bazelbuild/bazel/pull/29593)) * Support bounded parallel chunk transfers ([#29614](https://github.com/bazelbuild/bazel/pull/29614)) * Fix JVM crash from VerifyException in GrpcCacheClient.onNext() ([#29583](https://github.com/bazelbuild/bazel/pull/29583)) * Invalidate unresolved symlink info after deletion in the RAFS ([#29671](https://github.com/bazelbuild/bazel/pull/29671)) ##### Acknowledgments This release contains contributions from many people at Google, as well as Armando Montanez, ashutosh0x, Boleyn Su, Fabian Meumertzheim, H5-O5, Joseph Gette, Keith Smiley, Paul Tarjan, Ted Kaplan, Tyler French, and Will Stranton. _Notice_: Bazel installers contain binaries licensed under the GPLv2 with Classpath exception. Those installers should always be redistributed along with the source code. Some versions of Bazel contain a bundled version of OpenJDK. The license of the bundled OpenJDK and other open-source components can be displayed by running the command `bazel license`. The vendor and version information of the bundled OpenJDK can be displayed by running the command `bazel info java-runtime`. The binaries and source-code of the bundled OpenJDK can be [downloaded from our mirror server](https://mirror.bazel.build/openjdk/index.html). _Security_: All our binaries are signed with our [public key](https://releases.bazel.build/bazel-release.pub.gpg) 3D5919B448457EE0. ### 8.7.0 - Date: 2026-05-07 - Version: 8.7.0 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/8.7.0 - Permalink: https://whatsnew.fyi/product/bazel/releases/8.7.0 - **fixed** — Fix launcher/launcher_maker for cross build, e.g. build windows binary on linux machine - **changed** — package_group now supports labels with external repositories in the packages attribute - **added** — Added SOCKS proxy support, accepting socks://, socks4://, and socks5:// URLs in HTTPS_PROXY/HTTP_PROXY environment variables and related system properties - **added** — Add strip_components attribute to extract/download_and_extract/http_archive to allow stripping of path components when extracting files - **added** — Add experimental support for --rewind_lost_inputs, which can rerun actions within a single build to recover from remote or disk cache evictions - **added** — Add --experimental_remote_cache_chunking flag to read and write large blobs to/from the remote cache in chunks - **fixed** — string.splitlines() no longer treat u+0085 as a newline character when internal_starlark_utf_8_byte_strings is set > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 8.7.0 (2026-05-07) Bazel 8.7.0 is a minor LTS release. It is fully backward compatible with Bazel 8.0 and contains selected changes by the Bazel community and Google engineers. ##### Configurability * Fix launcher/launcher_maker for cross build, e.g. build windows binary on linux machine. ([#29240](https://github.com/bazelbuild/bazel/pull/29240)) ##### External Dependencies * `package_group` now supports labels with external repositories in the packages attribute ([#28896](https://github.com/bazelbuild/bazel/pull/28896)). * Added SOCKS proxy support. Bazel now accepts socks://, socks4://, and socks5:// URLs in HTTPS_PROXY/HTTP_PROXY environment variables and related system properties. ([#29305](https://github.com/bazelbuild/bazel/pull/29305)) * Adds the `strip_components attribute` to extract/download_and_extract/http_archive to allow stripping of path components when extracting files. ([#29367](https://github.com/bazelbuild/bazel/pull/29367)) ##### Remote Execution * Bazel now has experimental support for `--rewind_lost_inputs`, which can rerun actions within a single build to recover from (remote or disk) cache evictions. ([#28971](https://github.com/bazelbuild/bazel/pull/28971)) * Added `--experimental_remote_cache_chunking` flag to read and write large blobs to/from the remote cache in chunks. Requires server support. ([#28900](https://github.com/bazelbuild/bazel/pull/28900)) ##### Starlark / Build Language * `string.splitlines()` no longer treat u+0085 as a newline character when `internal_starlark_utf_8_byte_strings` is set (which defaults to true) ([#28932](https://github.com/bazelbuild/bazel/pull/28932)) ##### Acknowledgments This release contains contributions from many people at Google, as well as Boleyn Su, Fabian Meumertzheim, H5-O5, Jacob Nowjack, Justin Won, Keith Smiley, Mike Lundy, Sarad Pant, and Will Stranton. _Notice_: Bazel installers contain binaries licensed under the GPLv2 with Classpath exception. Those installers should always be redistributed along with the source code. Some versions of Bazel contain a bundled version of OpenJDK. The license of the bundled OpenJDK and other open-source components can be displayed by running the command `bazel license`. The vendor and version information of the bundled OpenJDK can be displayed by running the command `bazel info java-runtime`. The binaries and source-code of the bundled OpenJDK can be [downloaded from our mirror server](https://mirror.bazel.build/openjdk/index.html). _Security_: All our binaries are signed with our [public key](https://releases.bazel.build/bazel-release.pub.gpg) 3D5919B448457EE0. ### 8.7.0rc2 - Date: 2026-05-05 - Version: 8.7.0rc2 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/8.7.0rc2 - Permalink: https://whatsnew.fyi/product/bazel/releases/8.7.0rc2 - Labels: Pre-release - **fixed** — Fix launcher/launcher_maker for cross build, e.g. build windows binary on linux machine - **added** — package_group now supports labels with external repositories in the packages attribute - **added** — Added SOCKS proxy support with socks://, socks4://, and socks5:// URLs in HTTPS_PROXY/HTTP_PROXY environment variables and related system properties - **added** — Add strip_components attribute to extract/download_and_extract/http_archive to allow stripping of path components when extracting files - **added** — Add experimental support for --rewind_lost_inputs to rerun actions within a single build to recover from remote or disk cache evictions - **added** — Add --experimental_remote_cache_chunking flag to read and write large blobs to/from the remote cache in chunks - **changed** — string.splitlines() no longer treats u+0085 as a newline character when internal_starlark_utf_8_byte_strings is set > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 8.7.0rc2 (2026-05-04) Bazel 8.7.0 is a minor LTS release. It is fully backward compatible with Bazel 8.0 and contains selected changes by the Bazel community and Google engineers. ##### Configurability * Fix launcher/launcher_maker for cross build, e.g. build windows binary on linux machine. ([#29240](https://github.com/bazelbuild/bazel/pull/29240)) ##### External Dependencies * `package_group` now supports labels with external repositories in the packages attribute ([#28896](https://github.com/bazelbuild/bazel/pull/28896)). * Added SOCKS proxy support. Bazel now accepts socks://, socks4://, and socks5:// URLs in HTTPS_PROXY/HTTP_PROXY environment variables and related system properties. ([#29305](https://github.com/bazelbuild/bazel/pull/29305)) * Adds the `strip_components attribute` to extract/download_and_extract/http_archive to allow stripping of path components when extracting files. ([#29367](https://github.com/bazelbuild/bazel/pull/29367)) ##### Remote Execution * Bazel now has experimental support for `--rewind_lost_inputs`, which can rerun actions within a single build to recover from (remote or disk) cache evictions. ([#28971](https://github.com/bazelbuild/bazel/pull/28971)) * Added `--experimental_remote_cache_chunking` flag to read and write large blobs to/from the remote cache in chunks. Requires server support. ([#28900](https://github.com/bazelbuild/bazel/pull/28900)) ##### Starlark / Build Language * `string.splitlines()` no longer treat u+0085 as a newline character when `internal_starlark_utf_8_byte_strings` is set (which defaults to true) ([#28932](https://github.com/bazelbuild/bazel/pull/28932)) ##### Acknowledgments This release contains contributions from many people at Google, as well as Boleyn Su, Fabian Meumertzheim, H5-O5, Jacob Nowjack, Justin Won, Keith Smiley, Mike Lundy, Sarad Pant, and Will Stranton. _Notice_: Bazel installers contain binaries licensed under the GPLv2 with Classpath exception. Those installers should always be redistributed along with the source code. Some versions of Bazel contain a bundled version of OpenJDK. The license of the bundled OpenJDK and other open-source components can be displayed by running the command `bazel license`. The vendor and version information of the bundled OpenJDK can be displayed by running the command `bazel info java-runtime`. The binaries and source-code of the bundled OpenJDK can be [downloaded from our mirror server](https://mirror.bazel.build/openjdk/index.html). _Security_: All our binaries are signed with our [public key](https://releases.bazel.build/bazel-release.pub.gpg) 3D5919B448457EE0. ### 8.7.0rc1 - Date: 2026-04-27 - Version: 8.7.0rc1 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/8.7.0rc1 - Permalink: https://whatsnew.fyi/product/bazel/releases/8.7.0rc1 - Labels: Pre-release - **fixed** — Fix launcher/launcher_maker for cross build, for example build windows binary on linux machine - **changed** — package_group now supports labels with external repositories in the packages attribute - **added** — Added SOCKS proxy support for socks://, socks4://, and socks5:// URLs in HTTPS_PROXY/HTTP_PROXY environment variables and related system properties - **added** — Add strip_components attribute to extract/download_and_extract/http_archive to allow stripping of path components when extracting files - **added** — Bazel now has experimental support for --rewind_lost_inputs, which can rerun actions within a single build to recover from remote or disk cache evictions - **added** — Add --experimental_remote_cache_chunking flag to read and write large blobs to/from the remote cache in chunks - **fixed** — string.splitlines() no longer treat u+0085 as a newline character when internal_starlark_utf_8_byte_strings is set > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 8.7.0rc1 (2026-04-27) Bazel 8.7.0 is a minor LTS release. It is fully backward compatible with Bazel 8.0 and contains selected changes by the Bazel community and Google engineers. ##### Configurability * Fix launcher/launcher_maker for cross build, e.g. build windows binary on linux machine. ([#29240](https://github.com/bazelbuild/bazel/pull/29240)) ##### External Dependencies * `package_group` now supports labels with external repositories in the packages attribute ([#28896](https://github.com/bazelbuild/bazel/pull/28896)). * Added SOCKS proxy support. Bazel now accepts socks://, socks4://, and socks5:// URLs in HTTPS_PROXY/HTTP_PROXY environment variables and related system properties. ([#29305](https://github.com/bazelbuild/bazel/pull/29305)) * Adds the `strip_components attribute` to extract/download_and_extract/http_archive to allow stripping of path components when extracting files. ([#29367](https://github.com/bazelbuild/bazel/pull/29367)) ##### Remote Execution * Bazel now has experimental support for `--rewind_lost_inputs`, which can rerun actions within a single build to recover from (remote or disk) cache evictions. ([#28971](https://github.com/bazelbuild/bazel/pull/28971)) * Added `--experimental_remote_cache_chunking` flag to read and write large blobs to/from the remote cache in chunks. Requires server support. ([#28900](https://github.com/bazelbuild/bazel/pull/28900)) ##### Starlark / Build Language * `string.splitlines()` no longer treat u+0085 as a newline character when `internal_starlark_utf_8_byte_strings` is set (which defaults to true) ([#28932](https://github.com/bazelbuild/bazel/pull/28932)) ##### Acknowledgments This release contains contributions from many people at Google, as well as Boleyn Su, Fabian Meumertzheim, H5-O5, Jacob Nowjack, Justin Won, Keith Smiley, Mike Lundy, Sarad Pant, and Will Stranton. _Notice_: Bazel installers contain binaries licensed under the GPLv2 with Classpath exception. Those installers should always be redistributed along with the source code. Some versions of Bazel contain a bundled version of OpenJDK. The license of the bundled OpenJDK and other open-source components can be displayed by running the command `bazel license`. The vendor and version information of the bundled OpenJDK can be displayed by running the command `bazel info java-runtime`. The binaries and source-code of the bundled OpenJDK can be [downloaded from our mirror server](https://mirror.bazel.build/openjdk/index.html). _Security_: All our binaries are signed with our [public key](https://releases.bazel.build/bazel-release.pub.gpg) 3D5919B448457EE0. ### 9.1.0 - Date: 2026-04-20 - Version: 9.1.0 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/9.1.0 - Permalink: https://whatsnew.fyi/product/bazel/releases/9.1.0 - **added** — Reporting of cached test results can now be suppressed with --test_summary=short_uncached or --test_summary=detailed_uncached - **added** — package_group now supports labels with external repositories in the packages attribute - **added** — Bazel now has experimental support for --rewind_lost_inputs, which can rerun actions within a single build to recover from remote or disk cache evictions - **added** — Added --experimental_remote_cache_chunking flag to read and write large blobs to/from the remote cache in chunks - **changed** — The --downloader_config flag can now be specified multiple times to use several downloader config files at once - **changed** — The compatibility_level and max_compatibility_level attributes of module in MODULE.bazel are now no-ops - **changed** — The local and remote repo contents cache now include the host OS and CPU architecture in the cache key - **changed** — The remote repo contents cache now supports all reproducible repo rules - **fixed** — Fix launcher/launcher_maker for cross build, for example build windows binary on linux machine - **fixed** — rctx.symlink now implicitly watches the target if it falls back to a copy - **fixed** — string.splitlines() no longer incorrectly treats u+0085 (NEL) as a newline character > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 9.1.0 (2026-04-20) Bazel 9.1.0 is a minor LTS release. With two exceptions (see below: `CcInfo` and `--downloader_config`), it is backward compatible with Bazel 9.0 and contains selected changes by the Bazel community and Google engineers. ##### IMPORTANT Compatibility Note: **CcInfo** removal and **rules\_go** If you encounter the error "`The CcInfo symbol has been removed`", this is due to an intentional change in Bazel 9 regarding C++ Starlarkification. While this change was present in 9.0.0, a bug fixed in 9.0.1 ([\#28360](https://github.com/bazelbuild/bazel/pull/28360)) now correctly surfaces this error instead of failing silently or with a confusing message. To fix this, please upgrade rules\_go, rules\_nodejs or any broken rulesets. For example, ``` #### Add repo_name = None if you don't directly depend on them. bazel_dep(name = "rules_go", version = "0.59.0") bazel_dep(name = "rules_nodejs", version = "6.7.3") ``` ##### CLI * Reporting of cached test results can now be suppressed with `--test_summary=short_uncached` or `--test_summary=detailed_uncached`. ([#29263](https://github.com/bazelbuild/bazel/pull/29263)) ##### Configurability * Fix launcher/launcher_maker for cross build, e.g. build windows binary on linux machine. ([#29239](https://github.com/bazelbuild/bazel/pull/29239)) ##### External Deps * The `--downloader_config` flag can now be specified multiple times to use several downloader config files at once. Note that this is technically a breaking change, and will be reverted in future 9.x releases, starting from 9.1.1. Bazel 10.x will again contain this incompatible change. * The `compatibility_level` and `max_compatibility_level` attributes of `module` in MODULE.bazel are now no-ops. Module maintainers should stop specifying those attributes and provide clear build time error messages and actionable migration paths when making major breaking changes. ([#28616](https://github.com/bazelbuild/bazel/pull/28616)) * `package_group` now supports labels with external repositories in the `packages` attribute. ([#28893](https://github.com/bazelbuild/bazel/pull/28893)) * `rctx.symlink` now implicitly watches the target if it falls back to a copy. ([#28741](https://github.com/bazelbuild/bazel/pull/28741)) * The local and remote repo contents cache now include the host OS and CPU architecture in the cache key. ([#29195](https://github.com/bazelbuild/bazel/pull/29195)) * The remote repo contents cache now supports all reproducible repo rules. ([#29225](https://github.com/bazelbuild/bazel/pull/29225)) ##### Remote Execution * Bazel now has experimental support for `--rewind_lost_inputs`, which can rerun actions within a single build to recover from (remote or disk) cache evictions. ([#28958](https://github.com/bazelbuild/bazel/pull/28958)) * Added `--experimental_remote_cache_chunking` flag to read and write large blobs to/from the remote cache in chunks. Requires server support. ([#28903](https://github.com/bazelbuild/bazel/pull/28903)) ##### Starlark / Build Language * `string.splitlines()` no longer incorrectly treats u+0085 (`NEL`) as a newline character ([#28931](https://github.com/bazelbuild/bazel/pull/28931)) ##### Acknowledgments This release contains contributions from many people at Google, as well as Armando Montanez, ashutosh0x, Boleyn Su, Fabian Meumertzheim, H5-O5, Joseph Gette, Keith Smiley, Paul Tarjan, Ted Kaplan, Tyler French, and Will Stranton. _Notice_: Bazel installers contain binaries licensed under the GPLv2 with Classpath exception. Those installers should always be redistributed along with the source code. Some versions of Bazel contain a bundled version of OpenJDK. The license of the bundled OpenJDK and other open-source components can be dis _[Truncated at 4000 characters — full notes: https://github.com/bazelbuild/bazel/releases/tag/9.1.0]_ ### 9.1.0rc3 - Date: 2026-04-15 - Version: 9.1.0rc3 - Original notes: https://github.com/bazelbuild/bazel/releases/tag/9.1.0rc3 - Permalink: https://whatsnew.fyi/product/bazel/releases/9.1.0rc3 - Labels: Pre-release - **added** — Add `--test_summary=short_uncached` and `--test_summary=detailed_uncached` options to suppress reporting of cached test results - **fixed** — Fix launcher/launcher_maker for cross build, such as building Windows binary on Linux machine - **changed** — Make `compatibility_level` and `max_compatibility_level` attributes of `module` in MODULE.bazel no-ops - **added** — Support labels with external repositories in the `packages` attribute of `package_group` - **changed** — Make `rctx.symlink` implicitly watch the target if it falls back to a copy - **changed** — Include host OS and CPU architecture in the local and remote repo contents cache key - **added** — Extend remote repo contents cache to support all reproducible repo rules - **added** — Add experimental `--rewind_lost_inputs` support to rerun actions within a single build to recover from remote or disk cache evictions - **added** — Add `--experimental_remote_cache_chunking` flag to read and write large blobs to/from the remote cache in chunks - **fixed** — Fix `string.splitlines()` to no longer incorrectly treat U+0085 (NEL) as a newline character > [!NOTE] > If you are looking for [rolling releases](https://bazel.build/release#rolling-releases), please visit [this page](https://bazel.build/release/rolling). #### Release 9.1.0rc3 (2026-04-15) Bazel 9.1.0 is a minor LTS release. It is fully backward compatible with Bazel 9.0 and contains selected changes by the Bazel community and Google engineers. ##### IMPORTANT Compatibility Note: **CcInfo** removal and **rules\_go** If you encounter the error "`The CcInfo symbol has been removed`", this is due to an intentional change in Bazel 9 regarding C++ Starlarkification. While this change was present in 9.0.0, a bug fixed in 9.0.1 ([\#28360](https://github.com/bazelbuild/bazel/pull/28360)) now correctly surfaces this error instead of failing silently or with a confusing message. To fix this, please upgrade rules\_go, rules\_nodejs or any broken rulesets. For example, ``` #### Add repo_name = None if you don't directly depend on them. bazel_dep(name = "rules_go", version = "0.59.0") bazel_dep(name = "rules_nodejs", version = "6.7.3") ``` ##### CLI * Reporting of cached test results can now be suppressed with `--test_summary=short_uncached` or `--test_summary=detailed_uncached`. ([#29263](https://github.com/bazelbuild/bazel/pull/29263)) ##### Configurability * Fix launcher/launcher_maker for cross build, e.g. build windows binary on linux machine. ([#29239](https://github.com/bazelbuild/bazel/pull/29239)) ##### External Deps * The `compatibility_level` and `max_compatibility_level` attributes of `module` in MODULE.bazel are now no-ops. Module maintainers should stop specifying those attributes and provide clear build time error messages and actionable migration paths when making major breaking changes. ([#28616](https://github.com/bazelbuild/bazel/pull/28616)) * `package_group` now supports labels with external repositories in the `packages` attribute. ([#28893](https://github.com/bazelbuild/bazel/pull/28893)) * `rctx.symlink` now implicitly watches the target if it falls back to a copy. ([#28741](https://github.com/bazelbuild/bazel/pull/28741)) * The local and remote repo contents cache now include the host OS and CPU architecture in the cache key. ([#29195](https://github.com/bazelbuild/bazel/pull/29195)) * The remote repo contents cache now supports all reproducible repo rules. ([#29225](https://github.com/bazelbuild/bazel/pull/29225)) ##### Remote Execution * Bazel now has experimental support for `--rewind_lost_inputs`, which can rerun actions within a single build to recover from (remote or disk) cache evictions. ([#28958](https://github.com/bazelbuild/bazel/pull/28958)) * Added `--experimental_remote_cache_chunking` flag to read and write large blobs to/from the remote cache in chunks. Requires server support. ([#28903](https://github.com/bazelbuild/bazel/pull/28903)) ##### Starlark / Build Language * `string.splitlines()` no longer incorrectly treats u+0085 (`NEL`) as a newline character ([#28931](https://github.com/bazelbuild/bazel/pull/28931)) ##### Acknowledgments This release contains contributions from many people at Google, as well as Armando Montanez, ashutosh0x, Boleyn Su, Fabian Meumertzheim, H5-O5, Joseph Gette, Keith Smiley, Paul Tarjan, Ted Kaplan, Tyler French, and Will Stranton. _Notice_: Bazel installers contain binaries licensed under the GPLv2 with Classpath exception. Those installers should always be redistributed along with the source code. Some versions of Bazel contain a bundled version of OpenJDK. The license of the bundled OpenJDK and other open-source components can be displayed by running the command `bazel license`. The vendor and version information of the bundled OpenJDK can be displayed by running the command `bazel info java-runtime`. The binaries and source-code of the bundled OpenJDK can be [downloaded from our mirror server](https://mirror.bazel.build/openjdk/index.html). _Security_: _[Truncated at 4000 characters — full notes: https://github.com/bazelbuild/bazel/releases/tag/9.1.0rc3]_