Bazel Blog

Bazel 3.6

Bazel 3.6 is a minor release. It is an incremental update to Bazel 3.5.

Incompatible changes

  • The prelude file (//tools/build_rules:prelude_bazel) is now processed as a Starlark module, rather than being sourced into the BUILD file textually. This may cause slight breakages depending on the content of the prelude file. For more details, see the discussion in issue #11940.
  • The flag --experimental_ui_limit_console_output is removed. If you use --experimental_ui_limit_console_output=1 to silence terminal output, you should use --ui_event_filters= instead.
  • The flag --proto:instantiation_stack must be enabled with --record_rule_instantiation_callstack to see call stack in proto output from Bazel query.
  • A few other flags are removed: --experimental_ignore_deprecated_instrumentation_spec, --experimental_transparent_compression, --experimental_action_args, and --incompatible_no_support_tools_in_action_inputs.


  • NDK 21 is now supported.
  • Building Android apps for legacy multidex (pre-L) now requires a main-dex list if the application does not fit into a single DEX file.


External repositories

  • Stop needlessly parsing WORKSPACE files from external repositories.
  • Dot (.) is now allowed in workspace names. See issue #11837.


  • In Starlark, the Args object supports a new parameter file format flag_per_line, compatible with the Abseil flags library.
  • The Starlark interpreter now correctly emits an error if the operand of the first loop in a list comprehension refers to a variable bound by a later loop, such as y in this example: python [e1 for x in f(**y**) in e2 for y in e3] # error: undefined y` This may cause latent dynamic errors to become static errors.


  • Added the --experimental_worker_max_multiplex_instances flag to configure the number of WorkRequests that are sent concurrently to one multiplex worker process. This flag has the same syntax as the --worker-max-instances flag. The --worker_max_instances flag are no longer used to determine max instances for multiplex workers, because the two have different resource requirements. Multiplex workers have an 8-instance maximum, by default.
  • Added the --experimental_worker_multiplex flag, which is enabled by default. When enabled, multiplex workers are used for all mnemonics that support them.
  • Added support for a supports-graceful-termination execution requirement and tag, which causes Bazel to send a SIGTERM to any tagged actions before sending a delayed SIGKILL. This is to give actions, and more specifically tests, a chance to clean up after themselves.

Other changes

  • Bazel now skips printing action stdout/stderr contents if they exceed --experimental_ui_max_stdouterr_memory_bytes.
  • A description of the Bazel codebase is now available in, in the root of the Bazel repository. This can be useful to people willing to contribute to Bazel.


This release contains contributions from many people at Google, as well as Benjamin Peterson, Daniel Wagner-Hall, David Ostrovsky, Emil Kattainen, George Gensure, Keith Smiley, Michael Eisel, Per Halvor Tryggeseth, Ruixin Bao, Samuel Giddins, Steeve Morin, Thi Doan, Tom de Goede, Ulf Adams, Zhongpeng Lin, and mai12.