NOTE: Use the 馃摑 links to edit those that have a relnotes-tracking-issue,
and they will be updated when we regenerate the notes periodically (manually).
Version 1.98.0 (2026-08-20)
Language
Compiler
Platform Support
Refer to Rust's platform support page
for more information on Rust's tiered platform support.
Libraries
Stabilized APIs
These previously stable APIs are now stable in const contexts:
Cargo
Rustdoc
Compatibility Notes
- If fully elided, lifetime bounds of trait object types may now resolve differently or even get rejected in very specific niche scenarios
馃摑
- Error in more cases of ambiguous imports
馃摑
- Switch the destructors implementation for thread locals on Windows to use FLS
馃摑
- Convert some cases of the
ambiguous_glob_imports lint into a hard error
馃摑
- Where-bounds of the form
Type = Type and Type == Type are no longer syntactically allowed
馃摑
- Ensure Send/Sync is not implemented for std::env::Vars{,Os}
馃摑
- Fix that in some attributes, arguments were not properly rejected
馃摑
repr(transparent) is now more strict about which fields have "trivial" layout and hence can be ignored: repr(C) types, types with private fields, and #[non_exhaustive] types are no longer considered "trivial"
馃摑
- Correctly check whether types have equal size in
transmute() when some repr attributes are involved.
馃摑
- Add deny-by-default
invalid_runtime_symbol_definitions lint and warn-by-default suspicious_runtime_symbol_definitions lint
- The lints currently specifically targets
core runtime symbols like memcmp, memset, strlen, ... and is planned be embellished in the next few releases.
馃摑
- More characters are escaped when printing strings an chars
馃摑
- Implement fast path for
derive(PartialOrd) when deriving Ord
This can break crates in practice where a type's PartialOrd and Ord impls were inconsistent with each other.
馃摑
- Add temporary scope to
assert_eq and assert_ne
馃摑
- lint on
core::ffi::c_void as a return type
馃摑
- Closed a hole in the pattern matching structural equality check, preventing cases where a match of a constant would be allowed, despite disagreeing with a manually written
PartialEq implementation, when a derive(PartialEq) implementation for that type also exists.
馃摑
- On Emscripten the WASM exception handling ABI is now unconditionally used The
-Zemscripten-wasm-eh=false flag to switch back to JS exceptions has been removed.
馃摑
- The UNSAFE_CODE lint is now consistently emitted for all unsafe attributes
馃摑
- Solaris: remove
File::lock implementation, it has the wrong semantics (return "unsupported" instead)
馃摑
- Windows-gnu targets now specify baseline tools versions
馃摑
Internal Changes
These changes do not affect any public interfaces of Rust, but they represent
significant improvements to the performance or internals of rustc and related
tools.
Other
NOTE: Use the 馃摑 links to edit those that have a
relnotes-tracking-issue,and they will be updated when we regenerate the notes periodically (manually).
Version 1.98.0 (2026-08-20)
Language
&mutwhen unsize-coercing, even in an invariant position. For example, you can now coerce aCell<&'long mut i32>to aCell<&'short mut dyn Send>. Such shortenings were already previously allowed when coercing a&mutto a&, or coercing a&to a&.馃摑
d,e, andftarget_features are now stable incfg(target_feature = "?")馃摑
Compiler
Platform Support
powerpc64-unknown-linux-gnuelfv2as Tier 3馃摑
aarch64-unknown-linux-pauthtestas Tier 3 target馃摑
thumbv7a-none-eabiTier 2thumbv7a-none-eabihfTier 2thumbv7r-none-eabiTier 2thumbv7r-none-eabihfTier 2thumbv8r-none-eabihfTier 2馃摑
Refer to Rust's platform support page
for more information on Rust's tiered platform support.
Libraries
Location<'_>lifetime to'staticinPanic[Hook]Info馃摑
RangeInclusive::from(legacy::RangeInclusive)馃摑
ManuallyDrop'sBoxinteraction has been fixed馃摑
core::range::{legacy, RangeFull, RangeTo}Stabilized APIs
core::fmt::NumBuffer<{integer}>::format_into馃摑
Send/Sync for std::process::CommandArgs馃摑
{fN}::algebraic_add{fN}::algebraic_sub{fN}::algebraic_mul{fN}::algebraic_div{fN}::algebraic_rem馃摑
NonZero<{integer}>::from_str_radix馃摑
String::from_utf16leString::from_utf16le_lossyString::from_utf16beString:;from_utf16be_lossy馃摑
[T]::strip_circumfixstr::strip_circumfix馃摑
Atomic<T>::from_mutAtomic<T>::get_mut_sliceAtomic<T>::from_mut_slice馃摑
These previously stable APIs are now stable in const contexts:
Cargo
Rustdoc
Compatibility Notes
馃摑
馃摑
馃摑
ambiguous_glob_importslint into a hard error馃摑
Type = TypeandType == Typeare no longer syntactically allowed馃摑
馃摑
馃摑
repr(transparent)is now more strict about which fields have "trivial" layout and hence can be ignored:repr(C)types, types with private fields, and#[non_exhaustive]types are no longer considered "trivial"馃摑
transmute()when somereprattributes are involved.馃摑
invalid_runtime_symbol_definitionslint and warn-by-defaultsuspicious_runtime_symbol_definitionslintcoreruntime symbols likememcmp,memset,strlen, ... and is planned be embellished in the next few releases.馃摑
馃摑
derive(PartialOrd)when derivingOrdThis can break crates in practice where a type's PartialOrd and Ord impls were inconsistent with each other.
馃摑
assert_eqandassert_ne馃摑
core::ffi::c_voidas a return type馃摑
PartialEqimplementation, when aderive(PartialEq)implementation for that type also exists.馃摑
-Zemscripten-wasm-eh=falseflag to switch back to JS exceptions has been removed.馃摑
馃摑
File::lockimplementation, it has the wrong semantics (return "unsupported" instead)馃摑
馃摑
Internal Changes
These changes do not affect any public interfaces of Rust, but they represent
significant improvements to the performance or internals of rustc and related
tools.
Other