- 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
- Add and_then method on transitions to compose transitions, supporting both Starlark transitions and native transitions
- Add --incompatible_check_external_repo_source_dir_package_boundary flag to disallow source directories in external repositories from crossing package boundaries
- Add SOCKS proxy support for socks://, socks4://, and socks5:// URLs in HTTPS_PROXY and HTTP_PROXY environment variables
- Add strip_components attribute to extract, download_and_extract, and http_archive to allow stripping of path components when extracting files
- 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
- Add facts_version integer parameter to module_extension() to invalidate persisted facts in MODULE.bazel.lock for that extension
- exec_properties now respects resources:cpu and resources:memory for local resource estimation
- Remote repo contents cache now correctly materializes chains of symlinks as action inputs but no longer supports symlinks into the main repository
- Remote repo contents cache no longer caches or restores repos with cross-repo symlinks to avoid a large surface area for bugs
- Enable TCP keepalive by default for gRPC connections with reasonable defaults
- CDC chunk uploads and downloads can now happen in parallel within a large blob
- Fix crash when label_list_dict attribute is used in a split transition
- Prevent external repos from being refetched when they contribute inputs to an action using the hermetic Linux sandbox
- Fix spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a .bzl file
- Fix spurious reloading of packages in external repositories when modifying environment variables
- Fix performance regression in Bazel 9 causing RepoMappingManifest actions to consume excessive CPU time
- Fix repo content caching for non-gRPC cache backends
- Fix crash with --experimental_remote_repo_contents_cache when running without a remote or disk cache
- Remove limit on the size of gRPC messages received from the remote executor or cache
[!NOTE] If you are looking for rolling releases, please visit this page.
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 for a note on backward compatibility.
Configurability
- The new
refines_constraint_valueattribute onconstraint_settingcan be used to indicate that any non-default value for that setting specified on aplatformrequires the refined value to also be specified. (#29727) - Bazel no longer crashes when a
label_list_dictattribute is used in a split transition (#29830). (#29856) exec_propertiesnow respectsresources:cpuandresources:memoryfor local resource estimation. (#29426)- The
and_thenmethod ontransitions can be used to compose transitions. Both Starlark transitions and native transitions (e.g.config.exec()) are supported. (#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_boundaryflag. (#30040)
External Deps
- Added SOCKS proxy support. Bazel now accepts
socks://,socks4://, andsocks5://URLs inHTTPS_PROXY/HTTP_PROXYenvironment variables and related system properties. (#29364) - Adds the
strip_componentsattribute toextract/download_and_extract/http_archiveto allow stripping of path components when extracting files. (#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) module_extension(...)now accepts afacts_versioninteger parameter. Bumping it invalidates the facts persisted inMODULE.bazel.lockfor that extension, allowing extension authors to make breaking changes to the facts schema without risking misinterpretation by older code paths. (#29871)- External repos are no longer refetched whenever they contribute inputs to an action using the hermetic Linux sandbox. (#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)
- Fixed spurious "No such file" errors with the remote repo contents cache when a repo contains a symlink to a
.bzlfile. (#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. (#30190)
- Modifying environment variables no longer causes spurious reloading of packages in external repositories. (#30194)
Performance
- Fixed a performance regression in Bazel 9 that causes
RepoMappingManifestactions to consume a lot of CPU time. (#29807)
Remote Execution
- Enable TCP keepalive by default for gRPC connections with reasonable defaults (#29898)
- Fixed repo content caching for non-gRPC cache backends. (#29869)
- CDC chunk uploads and downloads can now happen in parallel within a large blob. (#29796)
- Bazel no longer limits the size of gRPC messages received from the remote executor or cache. (#29885)
- Fixed a crash with
--experimental_remote_repo_contents_cachewhen running without a remote or disk cache. (#30060) - Fixed a spurious remote-execution failure with
--experimental_output_paths=stripwhere a lost input in a tree artifact shared between actions could not be recovered by action rewinding. (#30193)
Starlark / Build Language
- Created
--incompatible_remove_ctx_android_fragmentfor Starlark Flags migration (#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) - Windows launcher stubs now embed an
asInvokerUAC manifest, preventing "The requested operation requires elevation. (error: 740)" for targets whose name matches the installer-detection heuristic. (#30182)
Acknowledgments
This release contains contributions from many people at Google, as well as Ashutosh0x, Bryce Lampe, Fabian Meumertzheim, Fredrik Medley, gaurav0107, Grzegorz Lukasik, Jacob Nowjack, John Cater, JonathanPerry651, Keith Smiley, peakschris, Rgis Desgroppes, Richard Lavoie, Sarad, Son Luong Ngoc, Tamir Duberstein, Tyler French, vadim, Will Stranton, and Yonatan Goldschmidt.
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.
Security: All our binaries are signed with our public key 3D5919B448457EE0.