Bazel roadmap

Report an issue View source

Overview

As the Bazel project continues to evolve in response to your needs, we want to share our 2024 update.

This roadmap describes current initiatives and predictions for the future of Bazel development, giving you visibility into current priorities and ongoing projects.

Bazel 8.0 Release

We plan to bring Bazel 8.0 long term support (LTS) to you in late 2024. The following features are planned to be implemented.

Bzlmod: external dependency management system

Bzlmod automatically resolves transitive dependencies, allowing projects to scale while staying fast and resource-efficient.

With Bazel 8, we will disable WORKSPACE support by default (it will still be possible to enable it using --enable_workspace); with Bazel 9 WORKSPACE support will be removed. Starting with Bazel 7.1, you can set --noenable_workspace to opt into the new behavior.

Bazel 8.0 will contain a number of enhancements to Bazel's external dependency management functionality, including:

  • The new flag --enable_workspace can be set to false to completely disable WORKSPACE functionality.
  • New directory watching API (see #21435, shipped in Bazel 7.1).
  • Improved scheme for generating canonical repository names for better cacheability of actions across dependency version updates. (#21316, shipped in Bazel 7.1)
  • An improved shared repository cache (see #12227).
  • Vendor and offline mode support — allows users to run builds with pre-downloaded dependencies (see #19563).
  • Reduced merge conflicts in lock files (#20396).
  • Segmented MODULE.bazel (#17880)
  • Allow overriding module extension generated repository (#19301)
  • Improved documentation (e.g. #18030, #15821) and migration guide and migration tooling.

Remote execution improvements

  • Add support for asynchronous execution, speeding up remote execution by increased parallelism with flag --jobs.
  • Make it easier to debug cache misses by a new compact execution log, reducing its size by 100x and its runtime overhead significantly (see #18643).
  • Implement garbage collection for the disk cache (see #5139).
  • Implement remote output service to allow lazy downloading of arbitrary build outputs (see #20933).

Migration of Android, C++, Java, Python, and Proto rules

Complete migration of Android, C++, Java, and Python rulesets to dedicated repositories and decoupling them from the Bazel releases. This effort allows Bazel users and rule authors to

  • Update rules independently of Bazel.
  • Update and customize rules as needed.

The new location of the rulesets is going to be bazelbuild/rules_android, rules_cc, rules_java, rules_python and google/protobuf. rules_proto is going to be deprecated.

Bazel 8 will provide a temporary migration flag that will automatically use the rulesets that were previously part of the binary from their repositories. All the users of those rulesets are expected to eventually depend on their repositories and load them similarly to other rulesets that were never part of Bazel.

Bazel 8 will also improve on the existing extending rules and subrule APIs and mark them as non-experimental.

Starlark improvements

  • Symbolic Macros are a new way of writing macros that is friendlier to BUILD users, macro authors, and tooling. Compared to legacy macros, which Bazel has only limited insight into, symbolic macros help users avoid common pitfalls and enforce best practices.
  • Package finalizers are a proposed feature for adding first-class support for custom package validation logic. They are intended to help us deprecate native.existing_rules().

Configurability

  • Output path mapping continues to stabilize: promising better remote cache performance and build speed for rule designers who use transitions.
  • Automatically set build flags suitable for a given --platforms.
  • Define project-supported flag combinations and automatically build targets with default flags without having to set bazelrcs.
  • Don't redo build analysis every time build flags change.

Project Skyfocus - minimize retained data structures

Bazel holds a lot of state in RAM for fast incremental builds. However, developers often change a small subset of the source files (e.g. almost never one of the external dependencies). With Skyfocus, Bazel will provide an experimental way to drop unnecessary incremental state and reduce Bazel's memory footprint, while still providing the same fast incremental build experience.

The initial scope aims to improve the retained heap metric only. Peak heap reduction is a possibility, but not included in the initial scope.

Misc

  • Mobile install v3, a simpler and better maintained approach to incrementally deploy Android applications.
  • Garbage collection for repository caches and Bazel's install_base.
  • Reduced sandboxing overhead.

Bazel-JetBrains* IntelliJ IDEA support

Incremental IntelliJ plugin updates to support the latest JetBrains plugin release.

This roadmap snapshots targets, and should not be taken as guarantees. Priorities are subject to change in response to developer and customer feedback, or new market opportunities.

To be notified of new features — including updates to this roadmap — join the Google Group community.

*Copyright © 2022 JetBrains s.r.o. JetBrains and IntelliJ are registered trademarks of JetBrains s.r.o