Rust versions / 1.92
Rust release · Dec 11, 2025
Rust 1.92: what's new, what was stabilized
Short answerRust 1.92 was released on Dec 11, 2025: 17 newly stable APIs (NonZero<u{N}>::div_ceil, Location::file_as_c_str, RwLockWriteGuard::downgrade, Box::new_zeroed, ...); 5 compatibility notes that can affect existing code.
← Rust 1.91All versionsRust 1.93 →
17 APIs stabilized
NonZero<u{N}>::div_ceil, Location::file_as_c_str, RwLockWriteGuard::downgrade, Box::new_zeroed, Box::new_zeroed_slice, Rc::new_zeroed, Rc::new_zeroed_slice, Arc::new_zeroed, Arc::new_zeroed_slice, btree_map::Entry::insert_entry, btree_map::VacantEntry::insert_entry, impl Extend<proc_macro::Group> for proc_macro::TokenStream, impl Extend<proc_macro::Literal> for proc_macro::TokenStream, impl Extend<proc_macro::Punct> for proc_macro::TokenStream, impl Extend<proc_macro::Ident> for proc_macro::TokenStream, <[_]>::rotate_left, <[_]>::rotate_right
Can it break my build?
The release lists these compatibility notes. Most only affect rare code, but read them before you raise your toolchain in CI:
- Fix backtraces with
-C panic=aborton Linux by generating unwind tables by default. Build with-C force-unwind-tables=noto keep omitting unwind tables. - As part of the larger effort refactoring compiler built-in attributes and their diagnostics, the future-compatibility lint
invalid_macro_export_argumentsis upgraded to deny-by-default and will be reported in dependencies too. - Update the minimum external LLVM to 20
- Prevent downstream
impl DerefMut for Pin<LocalType> - Don't apply temporary lifetime extension rules to the arguments of non-extended
pin!and formatting macros
Use it
rustup update stable # get the newest release
rustup install 1.92 # or exactly this one
rustup override set 1.92 # pin a project to itTo require at least this version from users of your crate, set rust-version = "1.92" under [package] in Cargo.toml. Cargo then refuses to build it on older compilers with a clear message, and with resolver 3 (the default on the 2024 edition, Rust 1.85+) it also prefers dependency versions that support it.
Full release notes
Language
- Document
MaybeUninitrepresentation and validity - [Allow
&raw [mut | const]for union field in safe code](https://github.com/rust-lang/rust/pull/141469) - Prefer item bounds of associated types over where-bounds for auto-traits and
Sized - [Do not materialize
Xin[X; 0]whenXis unsizing a const](https://github.com/rust-lang/rust/pull/145277) - [Support combining
#[track_caller]and#[no_mangle](requires every declaration specifying#[track_caller]as well)](https://github.com/rust-lang/rust/pull/145724) - Make never type lints
never_type_fallback_flowing_into_unsafeanddependency_on_unit_never_type_fallbackdeny-by-default - Allow specifying multiple bounds for same associated item, except in trait objects
- Slightly strengthen higher-ranked region handling in coherence
- The
unused_must_uselint no longer warns onResult<(), Uninhabited>(for instance,Result<(), !>), orControlFlow<Uninhabited, ()>. This avoids having to check for an error that can never happen.
<a id="1.92.0-Compiler"></a>
Compiler
- Make
mips64el-unknown-linux-muslabi64link dynamically - Remove current code for embedding command-line args in PDB Command-line information is typically not needed by debugging tools, and the removed code was causing problems for incremental builds even on targets that don't use PDB debuginfo.
<a id="1.92.0-Libraries"></a>
Libraries
- Specialize
Iterator::eq{_by}forTrustedLeniterators - Simplify
Extendfor tuples - Added details to
DebugforEncodeWide. iter::Repeat::lastandcountwill now panic, rather than looping infinitely.
<a id="1.92.0-Stabilized-APIs"></a>
Stabilized APIs
NonZero<u{N}>::div_ceilLocation::file_as_c_strRwLockWriteGuard::downgradeBox::new_zeroedBox::new_zeroed_sliceRc::new_zeroedRc::new_zeroed_sliceArc::new_zeroedArc::new_zeroed_slicebtree_map::Entry::insert_entrybtree_map::VacantEntry::insert_entryimpl Extend<proc_macro::Group> for proc_macro::TokenStreamimpl Extend<proc_macro::Literal> for proc_macro::TokenStreamimpl Extend<proc_macro::Punct> for proc_macro::TokenStreamimpl Extend<proc_macro::Ident> for proc_macro::TokenStream
These previously stable APIs are now stable in const contexts:
- [
<[_]>::rotate_left](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.rotate_left) - [
<[_]>::rotate_right](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.rotate_right)
<a id="1.92.0-Cargo"></a>
Cargo
- Added a new chapter to the Cargo book, "Optimizing Build Performance".
<a id="1.92.0-Rustdoc"></a>
Rustdoc
- If a trait item appears in rustdoc search, hide the corresponding impl items. Previously a search for "last" would show both
Iterator::lastas well as impl methods likestd::vec::IntoIter::last. Now these impl methods will be hidden, freeing up space for inherent methods likeBTreeSet::last. - Relax rules for identifiers in search. Previously you could only search for identifiers that were valid in rust code, now searches only need to be valid as part of an identifier. For example, you can now perform a search that starts with a digit.
<a id="1.92.0-Compatibility-Notes"></a>
Compatibility Notes
- Fix backtraces with
-C panic=aborton Linux by generating unwind tables by default. Build with-C force-unwind-tables=noto keep omitting unwind tables. - As part of the larger effort refactoring compiler built-in attributes and their diagnostics, the future-compatibility lint
invalid_macro_export_argumentsis upgraded to deny-by-default and will be reported in dependencies too. - Update the minimum external LLVM to 20
- Prevent downstream
impl DerefMut for Pin<LocalType> - Don't apply temporary lifetime extension rules to the arguments of non-extended
pin!and formatting macros
Release notes from the Rust project's RELEASES.md (MIT or Apache-2.0); summaries above are ours.
Up next
Next releaseRust 1.93Released Jan 22, 2026.Read it next →Also worth your time
Did this answer your question?