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.
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]
(https://docs.google.com/document/d/1moQfNcEIttsk6vYanNKIy3ZuK53hQUFq1b1r0rmsYVg/edit#heading=h.lgyp7ubwxmjc)
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)
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.
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().
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.