Bazel 4.0 and higher provides support for two release tracks: long term support (LTS) releases and rolling releases. This page covers versioning in Bazel, the types of releases, and the benefits of those releases for Bazel users and contributors.
Understanding versioning on Bazel
Bazel uses a major.minor.patch semantic versioning scheme.
- A major release contains features that are not backward compatible with the previous release.
- A minor release contains new backward-compatible features.
- A patch release contains minor changes and bug fixes.
Using version 3.5.1 as an example, a new release of each type would result in these version numbers:
- Major: 4.0
- Minor: 3.6
- Patch: 3.5.2
Bazel’s release cycle
Bazel continually publishes rolling releases. Every major version is an LTS release. You can choose to follow either release cadence - updating from one LTS release to the next, or updating with each minor version release.
The image shows both rolling and LTS releases, and the expected support for each.
Each major version becomes a separate development branch on release. You can receive fixes to critical bugs on that branch without having to update to the Bazel release at head. Additional features on your major version branch become minor releases and the highest version on the branch is the supported version.
Each Bazel release is paired with a list of recommended rule versions that work together and there is strict backwards compatibility within each branch.
An LTS release is a major version (such as, 4.0) that is supported for 3 years after its release. A major version is released approximately every nine months.
Ongoing development on a release branch results in minor versions.
You can choose to pin your project to a major release and update to a newer version in your own time. This gives you time to preview upcoming changes and adapt to them in advance.
Rolling releases are periodically cut from Bazel’s main branch. This release cadence involves a continuous delivery of preview releases of the next major Bazel version, which are in sync with Google’s internal Bazel releases.
Note that a new rolling release can contain breaking changes that are incompatible with previous releases.
Rolling releases are tested on Bazel’s test suite on Bazel CI and
Google’s internal test suite. Incompatible flags may be
used to ease the burden of migrating to new functionality, but default behaviors
may change with any rolling release. (You can also use rolling releases to
preview the next LTS version. For example,
5.0.0-pre.20210604.6 is based on a
candidate cut on 2021-06-04 and represents a milestone towards the 5.0 LTS
You can download the latest rolling release from GitHub. Alternatively, you can set up Bazelisk v1.9.0 (or later) to use a specific version name or the “rolling” identifier, which uses the most recent rolling release. For more details, see the Bazelisk documentation.