Skip to content

10.0.0rc2

Pre-release
Pre-release

Choose a tag to compare

@bazel-io bazel-io released this 22 Oct 21:12
e6042f9

Note

If you are looking for rolling releases, please visit this page.

Release 10.0.0rc2 (2026-10-22)

Baseline: 649a7be

Bazel 10.0 is a major long-term-support (LTS) release. It contains new features and backwards incompatible changes.

Highlights

  • TBA

Migration-Ready Incompatible Flags

The following flags are flipped in 10.0:

Users can use bazelisk --migrate with the BAZELISK_INCOMPATIBLE_FLAGS environment variable to test these flag flips with Bazel 9.x.

  • --experimental_fetch_all_coverage_outputs
  • --experimental_split_coverage_postprocessing
  • --incompatible_check_testonly_for_output_files (#28875, #28876)
  • --incompatible_exclude_starlark_flags_from_exec_config (#26909)
  • --incompatible_no_implicit_file_export (#10225, #27674)
  • --rewind_lost_inputs (#30415)

The following flags will be flipped in a future major release:

  • --incompatible_check_external_repo_source_dir_package_boundary (#30019)
  • --incompatible_config_setting_private_default_visibility (#12933)
  • --incompatible_disable_starlark_host_transitions (#17032)
  • --incompatible_eagerly_resolve_select_keys (#26281)
  • --incompatible_fail_on_unknown_output_groups
  • --incompatible_package_group_build_output
  • --incompatible_prefer_depending_configuration_runfiles
  • --incompatible_remove_ctx_android_fragment (#29884)
  • --incompatible_remove_ctx_apple_fragment
  • --incompatible_remove_ctx_objc_fragment
  • --incompatible_require_matching_aspect_hints_providers
  • --incompatible_require_mnemonic_for_run_actions
  • --incompatible_require_repo_extension_metadata (#30202)
  • --incompatible_symbolic_macro_strict_attrs (#27430)

General

  • [Incompatible] Added support for platform-specific startup options in .bazelrc files (startup:linux, startup:macos, startup:windows, etc.) (#26882).
  • [Incompatible] --test_tmpdir= now resets a value from a .bazelrc file to the default execroot temp directory instead of creating _tmp in the workspace. Use --test_tmpdir=. to retain workspace-relative behavior (#30318).
  • [Incompatible] --incompatible_modify_execution_info_additive is now deprecated and a no-op. When --modify_execution_info is specified multiple times, all values are always applied in order.
  • The JDK bundled with Bazel has been updated to JDK 27 (#31491).
  • --server_javabase and nojdk builds of Bazel can now use JREs in addition to JDKs (#30643).
  • Added --target_query and --target_query_file flags for building or testing the result of a bazel query in a single command (#28996).
  • Reporting of cached test results can now be suppressed with --test_summary=short_uncached or --test_summary=detailed_uncached (#28290).
  • The new --expand_param_files flag expands param files into their contents in --subcommands and --verbose_failures output (#29130).
  • Large numbers with 5+ digits in CLI output are now formatted with comma separators for improved readability (e.g., "12,345 targets configured" instead of "12345 targets configured") (#28922).
  • .bazelrc config declarations can now be empty (#29212).
  • A .bazelrc file may now only import files recursively with a depth of up to 512 imports. If you encounter a "Maximum import depth exceeded parsing config file" error and cannot shorten your import chain, set the BAZEL_UNLIMITED_IMPORT_DEPTH environment variable to any value to disable this limit.
  • Added -Djava.net.preferIPv6Addresses=system to startup JVM args, which may impact certain IPv4-only environments. Override as necessary with --host_jvm_args (#29237).
  • The --action_cache_gc_idle_delay, --action_cache_gc_threshold, and --action_cache_gc_max_age flags are no longer experimental.
  • The --disk_cache_gc_idle_delay, --disk_cache_gc_max_size, and --disk_cache_gc_max_age flags are no longer experimental.
  • The --install_base_gc_max_age flag is no longer experimental.
  • Added --output:display_full_kind for query options to display the full kind for Starlark rules with the label_kind, location, and xml output formats (#29147).
  • In the output of bazel query --output=build, string attributes containing newline characters are now enclosed in triple double quotes (""") for better readability.
  • bazel query --output=proto now supports dict(label, string) (LABEL_KEYED_STRING_DICT) aspect attributes.
  • bazel query --output=streamed_proto can opt into parallel serialization with --experimental_parallel_streamed_proto_output (#30959).
  • aquery now supports the config(expr, word) function (#10872).
  • Added bazel dump --skyframe=keys to report only the keys available in Skyframe (always use with --skykey_filter to limit the number of keys reported) (#30006).
  • Added bazel dump --skyframe=changed to list the Skyframe values that the last command created or changed, together with the changed dependencies that caused each change (#31564).
  • Fixed --progress_in_terminal_title output under screen and emacs.
  • Fixed an issue where bazel test --nobuild failed with TEST_WITH_NOANALYZE instead of succeeding after analysis (#13821).
  • Fixed a bug where a Bazel server kept its command lock after its client was killed, stalling later invocations (#30960).
  • The self-extracting installer now correctly creates installation directories when custom paths contain spaces (#31226).
  • Fixed grep: invalid option -- P errors on macOS when running release and documentation scripts (#30909).
  • Removed distrusted eMudhra and Sectigo AAA root CA certificates from the bundled JDK, to address the private key leakage (see https://emudhra.we-have-a-problem.com/). (#31925)

Android

  • Added an implicit MODULE.tools dependency on rules_android v0.8.0 (#31425).
  • Added proper error ordering for the bazel mobile-install command (#30998).
  • Created --incompatible_remove_ctx_android_fragment for migrating Android configuration flags to Starlark (#29884).

Build Event Protocol

  • BEP events are now written respecting parent-child ordering constraints.
  • BuildFinished events in BEP now consistently contain an "infrastructure-caused" detailed exit code when a single target contains both infrastructure-caused and user-caused exit codes in its failed actions.
  • Added a new instance_id field to the BuildMetrics BES event to help diff between the current and previous builds on a running server (#29817).
  • Improved BES upload failure messages to include the failed invocation's ID.

C++ / Objective-C

  • C static libraries can now elide backward reference warnings (when linking with LLD and such warnings are enabled) if the warn_backrefs_defined feature is defined and enabled for the toolchain.
  • The --fdo_optimize flag now accepts repo labels as well as package labels (#29118).
  • The C++ include scanner now properly resolves headers that are generated at build time and included as part of the toolchain (#30879).
  • CcStarlarkInternal now exposes hash functions used by rules_cc Java rules to Starlark.
  • Removed CoptsFilter from Bazel (no longer used since rules_cc 0.2.19).

Configurability / cquery

  • [Incompatible] The deprecated remote_execution_properties attribute on platform has been removed in favor of exec_properties.
  • [Incompatible] The config_setting targets @bazel_tools//src/conditions:{host_windows,remote} have been removed (#28300). Toolchains are usually a better fit as they don't depend on the configuration of the host machine running Bazel or fixed execution modes.
  • [Incompatible] --incompatible_check_testonly_for_output_files has been flipped (#28875, #28876).
  • [Incompatible] --use_target_platform_for_tests is now a no-op (#30351). By default, tests are executed on an execution platform that has all constraints of the target platform, making this flag obsolete. To migrate, make sure that your target platform or a platform with at least the same constraints is registered as an execution platform.
  • 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 (#29655).
  • The and_then method on transitions can be used to compose transitions. Both Starlark transitions and native transitions (e.g., config.exec()) are supported (#29542).
  • 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 (#30493).
  • bazel config <output path prefix> (e.g., bazel config x86-opt) now supports inspecting configurations based on output path prefixes in addition to configuration checksum prefixes.
  • --experimental_override_platform_cpu_name has been renamed to --override_platform_cpu_name.
  • Transitive rule and toolchain resolution errors are now formatted into a multi-line indented hierarchy (#15791).
  • Fixed launcher and launcher_maker for cross-builds (e.g., building a Windows binary on a Linux machine) (#29200).
  • Platforms whose names contain / no longer fail analysis when used in output directory names. (#31707)

Core

  • Fixed a crash with --keep_going when the scope of a genquery depends on a failing module extension. (#31818)

Coverage

  • --experimental_split_coverage_postprocessing and --experimental_fetch_all_coverage_outputs now default to true, enabling coverage support with remote execution by default (#24927).
  • The BAZEL_LLVM_PROFILE_FILE environment variable can now be used to customize the LLVM profile filename pattern for C++ coverage collection (e.g., --test_env=BAZEL_LLVM_PROFILE_FILE=%p.profraw). Defaults to %h-%p-%m.profraw when unset (#26807).
  • The actions generating the combined coverage reports no longer spuriously rerun due to non-deterministic inputs (#31432).

External Dependencies

  • [Incompatible] Removed the deprecated repository rule new_git_repository. Users should use git_repository instead (they are identical) (#29226).
  • [Incompatible] Added support for decompressing Brotli archives (.br, .tar.br) (#29198).
  • [Incompatible] --experimental_sibling_repository_layout is now a no-op (#30586).
  • [Incompatible] bazel mod tidy now evaluates all module extensions in the dependency graph to update the lockfile, including extensions used only by dependencies. It can thus be used as a full replacement for bazel mod deps when the goal is to ensure that the lockfile is up to date. When using bazel vendor, this may require vendoring additional dependencies (#31329).
  • [Incompatible] bazel_dep() no longer accepts dependencies on the current module, which serve no purpose and were never intended to be allowed. Remove self-dependencies and use the module's own repository name for self-references (#31552).
  • [Incompatible] The root module can no longer use use_repo() to import an extension repository that it overrides with the root module itself (using override_repo() or inject_repo()). Remove the self-import and use the root module's existing repository name; other modules can still import the overridden repository (#31553).
  • [Incompatible] Bzlmod now enforces that integrity strings for patches and overlay files in source.json are non-empty (#29017).
  • 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 (#28600).
  • The values of keyword arguments passed to use_repo can now contain the special substrings {name} and {version}, which are treated as equivalent to the corresponding attributes of the current module (#27890).
  • bazel vendor --lockfile_deps additionally vendors the repositories required to update the lockfile (e.g., with bazel mod tidy) while fetching is disabled, and can be combined with target patterns. The @bazel_tools//tools:tools_for_bazel_subcommands filegroup is deprecated (#31562).
  • bazel mod show_repo now prints the path of each repo's directory as a # Located at: comment in text output and as the new repo_root field in proto and JSON output (#31176).
  • 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 (#29343).
  • 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 (#29556).
  • Facts of reproducible module extensions are now restored to the expected state after external modifications by every Bazel command that updates the lockfile (#30937).
  • Module extensions are now correctly rerun when the root module changes the dev_dependency value of a use_extension call, which is visible to extensions as module_ctx.root_module_has_non_dev_dependency (#30738).
  • Fixed --lockfile_mode=error validation when rolling back changes to module extension facts (#28718).
  • Running bazel shutdown no longer results in stale lockfile data being written (#30348).
  • Cycles between MODULE.bazel files connected via include() are now reported as an error instead of hanging the build (#30737).
  • Fixed a crash while evaluating MODULE.bazel files when Skyframe dropped its temporary state in response to memory pressure (#30756).
  • Added the strip_components attribute to repository_ctx.extract, repository_ctx.download_and_extract, and http_archive to allow stripping leading path components when extracting archives (#29281), and fixed handling of symbolic and hard links when using strip_components (#30044).
  • Added add_prefix attribute to git_repository to allow cloning repositories into a given subdirectory prefix (#29453).
  • Added repository_ctx.patch(directory) to support applying patches in a specified subdirectory (#30987).
  • Added an exclude parameter to repository_ctx.watch_tree() to allow excluding glob patterns from being watched (#29444).
  • repository_ctx.symlink now implicitly watches the target if it falls back to a copy (#28682).
  • repository_ctx.download* and module_ctx.download* now report the size of downloaded files (#29463), include the download state in debugPrint, and add an error key to the returned struct when success is False (#29142).
  • Added SOCKS proxy support. Bazel now accepts socks://, socks4://, and socks5:// URLs in HTTPS_PROXY/HTTP_PROXY environment variables and related system properties (#29274).
  • Added urlencode($1) support to --downloader_config rewrite rules (#25758).
  • Bazel now fails over immediately to mirror URLs if a TLS handshake error occurs (#28347), and downloader rewrites to endpoints that refuse connections no longer repeat the connector's full retry sequence (#30867).
  • 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 (#30449).
  • Credential helper failures now abort HTTP downloads instead of continuing without authentication (#30647), and null values in credential helper JSON responses are now treated as unset (#30874).
  • read_user_netrc in @bazel_tools//tools/build_defs/repo:utils.bzl now honors the NETRC environment variable, matching http_* repository rules (#31378).
  • The remote repo contents cache now supports all reproducible repo rules (#27634), includes the host OS and CPU architecture in the local and remote cache key (#29148), and works with non-gRPC cache backends (#29744).
  • The remote repo contents cache now correctly materializes chains of symlinks as action inputs (including symlinks to .bzl files, fixing spurious "No such file" errors), but no longer caches or restores repos with cross-repo symlinks or symlinks into the main repository (#29767, #30031, #30161).
  • Fixed a crash with --experimental_remote_repo_contents_cache when running without a remote or disk cache (#30045).
  • External repos are no longer refetched whenever they contribute inputs to an action using the hermetic Linux sandbox (#29701), or after bazel fetch --force on the next build (#31108).
  • Modifying environment variables no longer causes spurious reloading of packages in external repositories (#29946).
  • 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 (#30019).
  • Fixed a bug that could cause ignore_directories() in REPO.bazel to not ignore directories (#30536).
  • package_group now supports labels with external repositories in the packages attribute (#28811).

Java

  • Fixed a flaky crash when Java compilation actions encounter multiple lost .jdeps files (#30012).

Local Execution

  • [Incompatible] The environment variable LC_CTYPE now defaults to C.UTF-8 for actions that set use_default_shell_env = True, resulting in a Unicode-aware locale on Linux, MSYS2, and macOS 15.4+. Pass --action_env==LC_CTYPE (note the two =s) to explicitly unset this variable and restore the previous behavior, or --action_env=LC_CTYPE=UTF-8 on older versions of macOS (#25801).
  • [Incompatible] Removed /usr/local/bin from the default strict action PATH. Set --action_env and --host_action_env to /bin:/usr/bin:/usr/local/bin if needed (#29257).
  • [Incompatible] exec_properties now respects resources:cpu and resources:memory for local resource estimation (#29284, #30747).
  • [Incompatible] Bind mounts specified via --sandbox_add_mount_pair (or -M/-m flags in linux-sandbox) are now correctly remounted read-only when using the hermetic sandbox (--experimental_sandbox_hermetic). Build actions that write to these paths will now fail with a read-only filesystem error.
  • [Incompatible] Bazel no longer trims whitespace from lines in the unused_inputs_list file before matching them against an action's inputs, as file names may begin or end with whitespace (#31533).
  • --worker_sandboxing can now be scoped per worker-key mnemonic with --worker_sandboxing=<mnemonic>=<boolean> (#30125).
  • Sandboxed actions no longer fail with "File exists" when an input is nested under a source directory input (#31206).
  • The macOS sandbox now allows actions to bind sockets when network access is blocked, matching the behavior of the Linux sandbox (#30865).
  • Unused stashed sandbox directories are now cleaned up when shutting down the Bazel server (#27626).
  • Test processes now receive the full --local_termination_grace_seconds period to handle SIGTERM and perform cleanup on timeout (#14298).
  • Fixed a rare crash with NullPointerException in ActionInputMap.getIndex when an action discovers additional inputs while executing (#30693).

Performance

  • Fixed an O(N² log N) analysis-phase performance regression when parsing large numbers of Starlark flags.
  • Fixed a performance regression in Bazel 9 that caused RepoMappingManifest actions to consume excessive CPU time (#29800).
  • Enabled output path mapping (config stripping) support for ArchivedTreeArtifacts to improve action caching under --experimental_output_paths=strip (#29567).
  • Any existing action relying on the legacy hardcoded list of path-mappable mnemonics in Bazel now needs to opt into output path mapping via its execution requirements (#29806).
  • With the new --experimental_keep_change_prunable_nodes_during_gc flag, Skyframe will keep computed nodes that aren't requested by the current evaluation but whose dependencies would be verified clean after change pruning (#29965).
  • Fixed a build failure with --execution_log_compact_file when a C++ action template has no inputs (#30816).
  • Bazel's serialization system now has a new wire encoding that supports preserving how values are serialized across Bazel versions.

Remote Execution

  • [Incompatible] --rewind_lost_inputs is now enabled by default. Builds with Build without the Bytes (BwoB) automatically recover from remote or disk cache eviction within a single build by rewinding actions that generated lost inputs (#25477, #30415).
  • Action rewinding (--rewind_lost_inputs) can now succeed even if the remote cache doesn't verify that action cache entries aren't stale (#30266), and fixed an issue that caused Bazel to fail on a lost input even with build or action rewinding enabled (#29551).
  • Fixed a spurious remote-execution failure with --experimental_output_paths=strip where a lost input in a tree artifact shared between actions could not be recovered by action rewinding (#30085).
  • --disk_cache can now be set without an argument to enable the disk cache using a default location at <outputUserRoot>/cache/disk. Boolean forms (--disk_cache=1 or --disk_cache=true to enable; --disk_cache=0, --disk_cache=false, or --nodisk_cache to disable) are also accepted (#28942).
  • 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 (#30776).
  • Bazel no longer verifies the digests of disk cache entries upon a cache hit, honoring the documented behavior of --remote_verify_downloads (#28369).
  • Disk cache action results are now always trusted with --rewind_lost_inputs, even if Build without the Bytes makes it so that the outputs are not available locally (#30709, #30811).
  • Disk cache entries deleted by a concurrent garbage collection are now treated as cache misses and don't result in failures (#30835).
  • Avoided redundant remote CAS uploads when using combined disk and remote caching with a cold disk cache (#18140).
  • Added --experimental_remote_cache_chunking to read and write large blobs to/from the remote cache in chunks (requires server support) (#28437), with bounded parallel chunk transfers within a large blob (#29341) and --experimental_remote_cache_chunking_function (auto, fast_cdc_2020, rep_max_cdc) to select the content-defined chunking function (#30131).
  • The requires-worker-protocol execution requirement is now forwarded to remote execution services as a platform property (persistentWorkerProtocol) to support intermixing JSON and Proto remote persistent worker protocols across a build (#28489).
  • Enabled TCP keepalive by default for gRPC connections with reasonable defaults (#29879).
  • Bazel no longer limits the size of gRPC messages received from the remote executor or cache (#29823).
  • HTTP remote caching now retries 408 and 429 status codes (#30130).
  • Remote execution, remote caching, and auth flags can now be reset to their default unset state on the command line by passing an empty value (e.g., --remote_cache=, --remote_executor=, --google_credentials=) (#4595).
  • --tls_certificate=, --tls_client_certificate=, and --tls_client_key= can now be used to reset those flags to their unset state (#29312).
  • --experimental_remote_scrubbing_config= now disables remote cache key scrubbing, allowing command-line overrides of scrubbing configs set in .bazelrc (#30219).
  • Cached action execution results are now invalidated when remote cache/executor endpoints or --remote_instance_name change between invocations (#23780).
  • 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 (#30869).
  • Fixed unnecessary remote-cache hits in incremental BwoB builds after a previous invocation used a broader remote output download policy (#30852).
  • Fixed incremental remote builds failing to create output directories beneath stale dangling symlinks (#30845).
  • Fixed excessive native thread accumulation when running commands with remote caching or execution enabled in rapid succession (#31191).

Starlark / Build Language

  • Global functions and built-in data types:
    • [Incompatible] string.splitlines() no longer incorrectly treats U+0085 (NEL) as a newline character (#28909).
    • [Incompatible] In min() and max(), the key callback is now prohibited from mutating the sequence being iterated over (#30201).
    • Added an optional parameter to fail() to allow eliding the stack trace when pretty-printing user errors.
    • Starlark fail() calls now format error messages with Error: instead of Error in fail: (#21523).
    • Added Label.repo_root as a replacement for the deprecated Label.workspace_root (#31173).
    • Labels in the main repo now have a repr form that reliably evaluates back to themselves (i.e., repr(Label("@@//:foo")) == 'Label("@@//:foo")').
  • Rules and actions API:
    • [Incompatible] Custom Starlark rules named test_suite are no longer treated as a native test_suite.
    • [Incompatible] template_ctx.run now rejects a template's own output directories passed through tools, as it already did for inputs. Pass individual files produced by sibling actions instead (#31029).
    • ctx.actions.run now supports redirecting stdout to a file via the new stdout parameter (#30408).
    • The new ctx.package_relative_label function on the rule context can be used to turn a user-provided label string into a Label relative to the target currently being analyzed (whereas Label(...) resolves relative to the .bzl file containing the call) (#28102).
    • DefaultInfo.executable now exposes the executable of configured targets and directly constructed providers, including providers returned by ctx.super() (#30741).
    • Fixed a NullPointerException and improved error messages when Starlark implicit output templates reference unset or unknown attributes (#5581), and skipped implicit output generation when mandatory rule attributes are missing to prevent secondary error messages.
    • The Starlark debug server now binds to the configured address (defaulting to 127.0.0.1) via --experimental_skylark_debug_server_address.
  • Symbolic macros:
    • If --incompatible_symbolic_macro_strict_attrs is enabled, invalid attribute values in symbolic macros fail the build, matching the behavior of rules (#27430).

Windows

  • [Incompatible] The Windows shell launcher now again prepends rather than appends the directory containing the shell binary, restoring the behavior of Bazel 8.x (#29637, #30444).
  • Windows launcher stubs now embed an asInvoker UAC manifest, preventing "The requested operation requires elevation. (error: 740)" for targets whose name matches the Windows installer-detection heuristic (#30043).
  • 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 (#29921), and allowed batch files run via CreateProcessW in tw.exe to work under longPathAware (#30490).
  • Fixed Could not chdir in tw.exe for long runfiles paths on Windows (#30610).
  • Fixed an issue on Windows where empty environment variables (e.g., --action_env=VAR=) caused test execution failures in the test wrapper (#15364).
  • Windows parameter files now preserve empty arguments and correctly escape backslashes before quotes and at the end of quoted arguments (#31204).
  • Fixed sh_binary on Windows to pass user arguments as positional parameters to bash instead of concatenating them.
  • Fixed bazel run --run_under=... --script_path=... on Windows to correctly escape batch script invocations and forward arguments (#22148).
  • Bazel on Windows no longer fails with "Command line too long" when running in batch mode with a large environment (#31380).
  • Bazel now honors XDG_CACHE_HOME on Windows (#27808).
  • Fixed a crash when evaluating target patterns or paths containing invalid characters or wildcards on Windows (#15962).
  • Fixed a possible crash on Windows Arm64 related to JNI strings (#30606).

Appendix

The following flags have been removed:

  • --android_compiler
  • --android_databinding_use_androidx
  • --android_databinding_use_v3_4_args
  • --android_dynamic_mode
  • --android_manifest_merger
  • --android_migration_tag_check
  • --break_build_on_parallel_dex2oat_failure
  • --catalyst_cpus
  • --dexopts_supported_in_dexmerger
  • --dexopts_supported_in_incremental_dexing
  • --experimental_allow_android_library_deps_without_srcs
  • --experimental_always_filter_duplicate_classes_from_android_test
  • --experimental_android_assume_minsdkversion
  • --experimental_android_databinding_v2
  • --experimental_android_rewrite_dexes_with_rex
  • --experimental_android_use_parallel_dex2oat
  • --experimental_check_desugar_deps
  • --experimental_disable_external_package
  • --experimental_disable_instrumentation_manifest_merge
  • --experimental_exec_configuration_distinguisher
  • --experimental_filter_library_jar_with_program_jar
  • --experimental_filter_r_jars_from_android_test
  • --experimental_incremental_dexing_after_proguard_by_default
  • --experimental_objc_fastbuild_options
  • --experimental_omit_resources_info_provider_from_android_binary
  • --experimental_one_version_enforcement_use_transitive_jars_for_binary_under_test
  • --experimental_output_directory_naming_scheme
  • --experimental_persistent_aar_extractor
  • --experimental_remove_r_classes_from_instrumentation_test_jar
  • --experimental_skyframe_error_handling_refactor
  • --experimental_strict_fileset_output
  • --experimental_use_dex_splitter_for_incremental_dexing
  • --experimental_use_rtxt_from_merged_resources
  • --fat_apk_hwasan
  • --incompatible_avoid_hardcoded_objc_compilation_flags
  • --incompatible_check_sharding_support
  • --incompatible_disable_native_android_rules
  • --incompatible_do_not_split_linking_cmdline
  • --incompatible_enable_android_toolchain_resolution
  • --incompatible_remove_ctx_bazel_py_fragment
  • --incompatible_stop_exporting_language_modules
  • --incremental_dexing
  • --ios_memleaks
  • --ios_sdk_version
  • --ios_signing_cert_name
  • --ios_simulator_device
  • --ios_simulator_version
  • --macos_sdk_version
  • --non_incremental_per_target_dexopts
  • --objc_debug_with_GLIBCXX
  • --output_library_merged_assets
  • --persistent_android_dex_desugar
  • --persistent_android_resource_processor
  • --persistent_multiplex_android_dex_desugar
  • --persistent_multiplex_android_resource_processor
  • --persistent_multiplex_android_tools
  • --strict_filesets
  • --test_result_expiration
  • --tvos_sdk_version
  • --watchos_sdk_version

The following flags have been renamed (graduated from experimental):

  • --experimental_action_cache_gc_idle_delay → --action_cache_gc_idle_delay
  • --experimental_action_cache_gc_max_age → --action_cache_gc_max_age
  • --experimental_action_cache_gc_threshold → --action_cache_gc_threshold
  • --experimental_disk_cache_gc_idle_delay → --disk_cache_gc_idle_delay
  • --experimental_disk_cache_gc_max_age → --disk_cache_gc_max_age
  • --experimental_disk_cache_gc_max_size → --disk_cache_gc_max_size
  • --experimental_install_base_gc_max_age → --install_base_gc_max_age
  • --experimental_override_platform_cpu_name → --override_platform_cpu_name
  • --experimental_remote_downloader → --remote_downloader
  • --experimental_remote_downloader_local_fallback → --remote_downloader_local_fallback
  • --experimental_remote_downloader_propagate_credentials → --remote_downloader_propagate_credentials

The following flags are now no-ops:

  • --apple_platforms
  • --build_python_zip
  • --experimental_add_test_support_to_compile_time_deps
  • --experimental_build_event_expand_filesets
  • --experimental_cc_implementation_deps
  • --experimental_enable_scl_dialect
  • --experimental_execution_graph_include_change_pruned_actions
  • --experimental_java_test_auto_create_deploy_jar
  • --experimental_platform_in_output_dir
  • --experimental_py_binaries_include_label
  • --experimental_python_import_all_repositories
  • --experimental_remote_analysis_cache
  • --experimental_remote_analysis_unreachable_cache_retry_interval
  • --experimental_sibling_repository_layout
  • --incompatible_autoload_externally
  • --incompatible_default_to_explicit_init_py
  • --incompatible_disable_autoloads_in_main_repo
  • --incompatible_disable_legacy_flags_cc_toolchain_api
  • --incompatible_disable_nocopts
  • --incompatible_enable_apple_toolchain_resolution
  • --incompatible_lexicographical_output
  • --incompatible_make_thinlto_command_lines_standalone
  • --incompatible_modify_execution_info_additive
  • --incompatible_multi_release_deploy_jars
  • --incompatible_python_disallow_native_rules
  • --incompatible_remove_ctx_py_fragment
  • --incompatible_require_ctx_in_configure_features
  • --incompatible_require_javaplugininfo_in_javacommon
  • --incompatible_use_cc_configure_from_rules_cc
  • --incompatible_use_new_cgroup_implementation
  • --incompatible_use_specific_tool_files
  • --incompatible_validate_top_level_header_inclusions
  • --j2objc_dead_code_report
  • --j2objc_translation_flags
  • --proto_toolchain_for_j2objc
  • --python_native_rules_allowlist
  • --python_path
  • --remote_analysis_json_log
  • --repositories_without_autoloads
  • --use_platforms_in_apple_crosstool_transition
  • --use_target_platform_for_tests

Acknowledgments

This release contains contributions from many people at Google, as well as Aaron Sky, adilburaksen, Adin Cebic, Akshay Ubale, Alan Mond, Albert Lloveras, Alex Eagle, Alex Novak, Alex O'Brien, Alexander Scott, Alexey Tereshenkov, Amit Keren, Andrew Hewitson, Angus Lees, Anthony Pratti, Anton Karpov, Armando Montanez, Ashutosh0x, Benedict Chacko, Benjamin Peterson, Blaine Freestone, Boleyn Su, Brad Smith, Brandon Lico, Bryce Lampe, c2qd, Chedrian07, Chris Heisterkamp, Chris Jakins, Chris McDonald, cjk, colbs255, Dan Halperin, Dan Katz, Daniel Burrell, Daniel Pfeifer, David Jyo, David Ostrovsky, David Zbarsky, Denbeigh Stevens, Desel72, Dmitry Spikhalsky, Douglas Thor, Dylan Bettermann, Dylan Joss, Ed Schouten, Fabian Brandstetter, Fabian Meumertzheim, Fredrik Medley, gampu, Garrett Holmstrom, gaurav0107, George Gensure, giria660, Grzegorz Lukasik, Guillaume Maudoux, gztong666, H5-O5, Han-Wen Nienhuys, Henner Zeller, Herdiyan Adam Putra, honnix, ifutivic, ijuren8, iMostfa, Jacob Nowjack, jade, Jake Newfield, James Judd, Jasmine Tang, Jason Bedard, Javier Maestro, jdymitarai, Jean-Baptiste Bronisz, Jean-Yves LENHOF, Jeff Klukas, Jeremy Volkman, Jesse Schalken, jjj-n, John Cater, John Millikin, Jonathan Perry, Jordan Mele, Joseph Gette, Justin, Justin Kaeser, Justin Won, justinswe, Kapunahele Wong, Kaylie, Keith Smiley, Kip Hamiltons, Kobi Hikri, Ladd Van Tol, lg-stripe, Lucas Pottersky, Malte Poll, Manoj Mahapatra, Markus Hofbauer, Matthew Steffen, Michael Mitchell, Mike Lundy, Ming Zhao, Moran Omer, Morax, Nikki Vijaybhaskar, Paul Tarjan, peakschris, Pieter Agten, PikachuHy, Rahul Butani, Raiyyan Ur Rahman Mohammed, Rajkaran Yadav, Régis Desgroppes, Richard Lavoie, Samuel Bronson, Sarad Pant, Showta Ishizaki, Shrey Shah, Son Luong Ngoc, Stefan Penner, Steffeeen, Steve Barrau, Taeyang Jin (Theo), Tamir Duberstein, teaugene, Ted Kaplan, Timothy Gu, Tyler French, Ulrik Falklöf, vadim, Vladimir Sitnikov, wade-arista, Will Stranton, willxiao-amzn, XananasX, Yagiz Nizipli, Yannic Bonenberger, Yonatan Goldschmidt, Yossi Eliaz, zhaixiaojuan, and zozo123.

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.