Stable Language Evolution

The Rust Release Cycle

Rust uses a predictable 6-week "train model" release cycle inspired by modern browser release engineering. Every six weeks (on a Thursday), a new minor version of Rust (1.84.0, 1.85.0, 1.86.0, ...) is released to the Stable channel, while the current Nightly branch forks to become the next Beta candidate.

The 6-Week Rust Release Train:

  Time (Every 6 Weeks) --->     Cycle N                  Cycle N + 1
  ---------------------------------------------------------------------------
  Nightly (`master`)       [ 1.86.0-nightly ] ----> [ 1.87.0-nightly ]
                                    \ (Branch!)
  Beta (6-week soak)                 +------------> [ 1.86.0-beta ]
                                                           \ (Promote!)
  Stable (Production)                                       +--> [ 1.86.0 ]

Why the Train Model Works

Instead of delaying a release until a specific feature is ready ("feature-based releases", which cause high pressure to rush unfinished features before a deadline), the release train leaves the station every 6 weeks on schedule:

  • If a feature stabilization PR isn't quite ready before the branch date, there is zero pressure to rush it—the very next train leaves in just 6 weeks!
  • During the 6-week Beta window, only bug fixes and regression backports are accepted into the beta branch while CI systems across the ecosystem test against +beta.
  • If a critical compiler regression or security issue is discovered shortly after a .0 stable release, a point release (1.85.1) is published out-of-band containing only targeted fixes.

Managing Channels and Pinned Releases with rustup

rustup is the official Rust toolchain multiplexer. It allows you to install and switch between stable, beta, nightly, and exact historical versions (1.80.0, 1.85.0) side by side:

rustup Command Description
rustup update Updates all installed toolchains (stable, beta, nightly) to their latest releases.
rustup toolchain install 1.85.0 Installs the exact historical compiler version 1.85.0.
rustup toolchain install nightly-2025-02-20 Installs the nightly build from a specific calendar date.
cargo +beta test Runs cargo test using the beta toolchain without changing your default toolchain.
cargo +1.85.0 check Verifies that your crate compiles cleanly on rustc 1.85.0 (MSRV check).
rustup target add wasm32-wasip1 Installs the standard library cross-compilation target for WebAssembly WASI.
#[derive(Debug, PartialEq, Eq)]
pub struct RustVersion {
    pub major: u32,
    pub minor: u32,
    pub patch: u32,
}

impl RustVersion {
    /// Calculates the calendar weeks elapsed between two 1.x.0 minor Rust releases
    /// under the 6-week release train schedule.
    pub const fn weeks_between_minor_releases(from_minor: u32, to_minor: u32) -> u32 {
        to_minor.abs_diff(from_minor) * 6
    }
}

fn main() {
    // 8 minor releases = 8 * 6 = 48 weeks (~1 year of Rust releases):
    let weeks = RustVersion::weeks_between_minor_releases(1_77, 1_85);
    assert_eq!(weeks, 48);
    println!("8 minor Rust releases span {weeks} weeks on the 6-week train schedule");
}
8 minor Rust releases span 48 weeks on the 6-week train schedule