| Project: /_project.yaml |
| Book: /_book.yaml |
| # Bazel roadmap |
| |
| {% include "_buttons.html" %} |
| |
| ## Overview {:#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 {:#bazel-8.0} |
| |
| We plan to bring Bazel 8.0 [long term support |
| (LTS)](https://bazel.build/release/versioning) to you in late 2024. |
| The following features are planned to be implemented. |
| |
| ### Bzlmod: external dependency management system {:#bzlmod:-external} |
| |
| [Bzlmod](https://bazel.build/docs/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](https://github.com/bazelbuild/bazel/pull/21435), shipped in Bazel |
| 7.1). |
| * Improved scheme for generating canonical repository names for better |
| cacheability of actions across dependency version updates. |
| ([#21316](https://github.com/bazelbuild/bazel/pull/21316), shipped in Bazel |
| 7.1) |
| * An improved shared repository cache (see |
| [#12227](https://github.com/bazelbuild/bazel/issues/12227)). |
| * Vendor and offline mode support — allows users to run builds with |
| pre-downloaded dependencies (see |
| [#19563](https://github.com/bazelbuild/bazel/issues/19563)). |
| * Reduced merge conflicts in lock files |
| ([#20396](https://github.com/bazelbuild/bazel/issues/20369)). |
| * Segmented MODULE.bazel |
| ([#17880](https://github.com/bazelbuild/bazel/issues/17880)) |
| * Allow overriding module extension generated repository |
| ([#19301](https://github.com/bazelbuild/bazel/issues/19301)) |
| * Improved documentation (e.g. |
| [#18030](https://github.com/bazelbuild/bazel/issues/18030), |
| [#15821](https://github.com/bazelbuild/bazel/issues/15821)) and migration |
| guide and migration tooling. |
| |
| ### Remote execution improvements {:#remote-execution} |
| |
| * 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](https://github.com/bazelbuild/bazel/issues/18643)). |
| * Implement garbage collection for the disk cache (see |
| [#5139](https://github.com/bazelbuild/bazel/issues/5139)). |
| * Implement remote output service to allow lazy downloading of arbitrary build |
| outputs (see |
| [#20933](https://github.com/bazelbuild/bazel/discussions/20933)). |
| |
| ### Migration of Android, C++, Java, Python, and Proto rules {:#migration-android,} |
| |
| 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 {:#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 {:#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 {:#project-skyfocus} |
| |
| 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 {:#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 {:#bazel-jetbrains*-intellij} |
| |
| 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](https://groups.google.com/g/bazel-discuss) community.* |
| |
| *Copyright © 2022 JetBrains s.r.o. JetBrains and IntelliJ are registered trademarks of JetBrains s.r.o |