blob: 12be3ff437f0b41f5709b3cdf16f0203fdd27a06 [file] [log] [blame] [view]
---
layout: documentation
title: Release versioning
category: getting-started
---
# Release Versioning
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.
<img src="images/roadmap.png" alt="Roadmap" width="100%" />
## Release branches
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.
## LTS releases
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
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
Googles 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
release.)
You can download the latest rolling release from
[GitHub](https://github.com/bazelbuild/bazel/releases). Alternatively, you can
set up
[Bazelisk v1.9.0](https://github.com/bazelbuild/bazelisk/releases/tag/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](https://github.com/bazelbuild/bazelisk#how-does-bazelisk-know-which-bazel-version-to-run).
## Updating versions
* For more information on updating your Bazel version, see
[Updating Bazel](updating-bazel.html).
* For more information on contributing updates to new Bazel releases, see
[Contributing to Bazel](https://bazel.build/contributing.html).