Release Channels
Rust maintains three release channels that represent different stages of development:Nightly
Nightly
Daily builds with cutting-edge featuresNightly builds are created automatically every day from the master branch. They include:
- Unstable features (requires
#![feature(...)]gates) - Latest bug fixes and improvements
- Experimental language features and APIs
- May contain breaking changes
Beta
Beta
Pre-release testing channelEvery six weeks, the current nightly becomes the new beta. Beta receives:
- Bug fixes only (no new features)
- Stabilization of previously unstable features
- Final testing before stable release
- Community feedback on upcoming stable release
Stable
Stable
Production-ready releasesEvery six weeks, the current beta becomes the new stable release. Stable provides:
- Thoroughly tested features
- Guaranteed stability and backward compatibility
- Official support and documentation
- Recommended for production use
Release Cycle
Rust follows a train-based release model:Week 0: New Nightly
Development begins on features for a future release. Unstable features are developed and tested on nightly.
Week 6: Beta Branch
Current nightly is branched to beta. No new features are added to beta, only bug fixes.
This train model means features can take 6-12 weeks from stabilization to appearing in a stable release.
Versioning Scheme
Rust uses semantic versioning with the formatMAJOR.MINOR.PATCH:
- MAJOR (1.x.x): Currently at version 1, rarely changes
- MINOR (1.x.x): Incremented every six weeks with new features
- PATCH (1.x.x): Bug fixes and critical updates between releases
Recent Releases
Version 1.94.0 (2026-03-05)
Version 1.94.0 (2026-03-05)
Language Improvements:
- Stabilized additional 29 RISC-V target features (RVA22U64/RVA23U64 profiles)
- Updated to Unicode 17
- Added warn-by-default
unused_visibilitieslint - Improved lifetime error handling for closures
- Added
riscv64im-unknown-none-elfas tier 3 target
<[T]>::array_windows<[T]>::element_offsetLazyCell::get,LazyCell::get_mut,LazyCell::force_mutLazyLock::get,LazyLock::get_mut,LazyLock::force_mutf32::consts::EULER_GAMMA,f64::consts::EULER_GAMMAf32::consts::GOLDEN_RATIO,f64::consts::GOLDEN_RATIO
Version 1.93.0 (2026-01-22)
Version 1.93.0 (2026-01-22)
Language Improvements:
- Stabilized several s390x
vector-related target features - Stabilized
asm_cfgfor conditional assembly code - Stabilized C-style variadic functions for
systemABI - Added warn-by-default
const_item_interior_mutationslint - Added warn-by-default
function_casts_as_integerlint
- Stabilized
-Cjump-tables=boolflag
- Promoted
riscv64a23-unknown-linux-gnuto Tier 2
- Allowed global allocator to use thread-local storage
- Improved
BTree::appendbehavior
Version 1.92.0 (2025-12-11)
Version 1.92.0 (2025-12-11)
Language Improvements:
- Documented
MaybeUninitrepresentation and validity - Allowed
&raw [mut | const]for union fields in safe code - Made never type lints deny-by-default
- Allowed specifying multiple bounds for same associated item
- Specialized
Iterator::eq{_by}forTrustedLeniterators - Added details to
DebugforEncodeWide - Made
iter::Repeat::lastandcountpanic instead of looping infinitely
NonZero<u{N}>::div_ceilRwLockWriteGuard::downgradeBox::new_zeroed,Box::new_zeroed_sliceArc::new_zeroed,Arc::new_zeroed_sliceRc::new_zeroed,Rc::new_zeroed_slice
Version 1.91.0 (2025-10-30)
Version 1.91.0 (2025-10-30)
Language Improvements:
- Stabilized LoongArch32 inline assembly
- Added warn-by-default
dangling_pointers_from_localslint - Added warn-by-default
integer_to_ptr_transmuteslint - Upgraded
semicolon_in_expressions_from_macrosto deny-by-default - Stabilized
sse4aandtbmtarget features
- Promoted
aarch64-pc-windows-gnullvmandx86_64-pc-windows-gnullvmto Tier 2 with host tools - Promoted
aarch64-pc-windows-msvcto Tier 1
Path::file_prefixAtomicPtr::fetch_ptr_add,fetch_ptr_sub,fetch_byte_add,fetch_byte_sub{integer}::strict_add,strict_sub,strict_mul, etc.PathBuf::add_extension,PathBuf::with_added_extensionDuration::from_mins,Duration::from_hoursBTreeMap::extract_if,BTreeSet::extract_if
Stability Guarantees
Rust provides strong backward compatibility guarantees:Semantic Versioning Commitment
Semantic Versioning Commitment
Stable Rust guarantees:
- Code that compiles on Rust 1.x will compile on Rust 1.y where y > x
- Minor version increments (1.93 → 1.94) are always backward compatible
- Deprecations are announced with ample warning time
- Breaking changes require edition boundaries (see Editions)
- Your production code won’t break with stable updates
- You can safely upgrade to newer minor versions
- Security patches are backported when needed
Edition System
Edition System
Rust uses editions to make breaking changes while maintaining compatibility:Specify edition in
- Rust 2015 - Original edition
- Rust 2018 - Improved module system, NLL, async/await foundation
- Rust 2021 - IntoIterator for arrays, disjoint capture in closures, panic macros
- Rust 2024 - (Future edition, in development)
You can mix crates using different editions in the same project. The compiler handles compatibility automatically.
Cargo.toml:Release Cadence Benefits
Predictable Schedule
Teams can plan upgrades around the 6-week cycle without surprises.
Rapid Iteration
New features reach users quickly after stabilization.
Reduced Risk
Smaller, frequent releases are easier to test and rollback if needed.
Community Testing
Beta channel allows community testing before stable release.
Tracking Releases
Stay informed about Rust releases:- Blog: blog.rust-lang.org - Official announcements
- RELEASES.md: Detailed changelog in the Rust repository
- This Week in Rust: this-week-in-rust.org - Weekly newsletter
- Forge: forge.rust-lang.org - Release calendar and process
Compatibility Notes
Each release includes compatibility notes for potential breaking changes: Always review compatibility notes when upgrading, especially:- Changes to macro behavior
- Lint level upgrades (warn → deny)
- Platform-specific changes
- MSRV (Minimum Supported Rust Version) impacts on dependencies
Contributing to Releases
The Rust release process is community-driven:Anyone can contribute by testing beta releases and reporting bugs before stable release.
Update Best Practices
For Library Authors
For Library Authors
For Application Developers
For Application Developers
- Stay on stable channel for production
- Update dependencies regularly
- Test on beta to catch issues early
- Review release notes before upgrading
- Use
cargo updateto get compatible updates
For Embedded/System Developers
For Embedded/System Developers
- Verify platform support tier changes
- Test toolchain updates thoroughly
- Pin Rust version for critical systems
- Monitor target-specific compatibility notes
- Participate in beta testing for your platform