Rust versions / 1.93
Rust release · Jan 22, 2026
Rust 1.93: what's new, what was stabilized
Short answerRust 1.93 was released on Jan 22, 2026: 3 language stabilizations (Stabilize several s390x vector-related target features and the is_s390x_feature_detected! ...); 23 newly stable APIs (<[MaybeUninit<T>]>::assume_init_drop, <[MaybeUninit<T>]>::assume_init_ref, <[MaybeUninit<T>]>::assume_init_mut, <[MaybeUninit<T>]>::write_copy_of_slice, ...); 11 compatibility notes that can affect existing code. Point release: 1.93.1 (Feb 12, 2026).
← Rust 1.92All versionsRust 1.94 →
Language features stabilized
- Stabilize several s390x vector-related target features and the is_s390x_feature_detected! macro
- Stabilize declaration of C-style variadic functions for the system ABI
- Stabilize asm_cfg
23 APIs stabilized
<[MaybeUninit<T>]>::assume_init_drop, <[MaybeUninit<T>]>::assume_init_ref, <[MaybeUninit<T>]>::assume_init_mut, <[MaybeUninit<T>]>::write_copy_of_slice, <[MaybeUninit<T>]>::write_clone_of_slice, String::into_raw_parts, Vec::into_raw_parts, <iN>::unchecked_neg, <iN>::unchecked_shl, <iN>::unchecked_shr, <uN>::unchecked_shl, <uN>::unchecked_shr, <[T]>::as_array, <[T]>::as_mut_array, <*const [T]>::as_array, <*mut [T]>::as_mut_array, VecDeque::pop_front_if, VecDeque::pop_back_if, Duration::from_nanos_u128, char::MAX_LEN_UTF8, char::MAX_LEN_UTF16, std::fmt::from_fn, std::fmt::FromFn
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:
- Introduce
pin_v2into the builtin attributes namespace - Update bundled musl to 1.2.5
- On Emscripten, the unwinding ABI used when compiling with
panic=unwindwas changed from the JS exception handling ABI to the wasm exception handling ABI. If linking C/C++ object files with Rust objects,-fwasm-exceptionsmust be passed to the linker now. On nightly Rust, it is possible to get the old behavior with-Zwasm-emscripten-eh=false -Zbuild-std, but it will be removed in a future release. - The
#[test]attribute, used to define tests, was previously ignored in various places where it had no meaning (e.g on trait methods or types). Putting the#[test]attribute in these places is no longer ignored, and will now result in an error; this may also result in errors when generating rustdoc. Error whentestattribute is applied to structs - Cargo now sets the
CARGO_CFG_DEBUG_ASSERTIONSenvironment variable in more situations. This will cause crates depending onstatic-initversions 1.0.1 to 1.0.3 to fail compilation with "failed to resolve: use of unresolved module or unlinked crateparking_lot". See the linked issue for details. - User written types in the
offset_of!macro are now checked to be well formed. cargo publishno longer emits.cratefiles as a final artifact for user access when thebuild.build-dirconfig is unset- Upgrade the
deref_nullptrlint from warn-by-default to deny-by-default - Add future-incompatibility warning for
...function parameters without a pattern outside ofexternblocks - Introduce future-compatibility warning for
repr(C)enums whose discriminant values do not fit into ac_intorc_uint - Introduce future-compatibility warning against ignoring
repr(C)types as part ofrepr(transparent)
Use it
rustup update stable # get the newest release
rustup install 1.93 # or exactly this one
rustup override set 1.93 # pin a project to itTo require at least this version from users of your crate, set rust-version = "1.93" 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
- Stabilize several s390x
vector-related target features and theis_s390x_feature_detected!macro - Stabilize declaration of C-style variadic functions for the
systemABI - Emit error when using some keyword as a
cfgpredicate - Stabilize
asm_cfg - During const-evaluation, support copying pointers byte-by-byte
- LUB coercions now correctly handle function item types, and functions with differing safeties
- Allow
constitems that contain mutable references tostatic(which is *very* unsafe, but not *always* UB) - Add warn-by-default
const_item_interior_mutationslint to warn against calls which mutate interior mutableconstitems - Add warn-by-default
function_casts_as_integerlint
<a id="1.93.0-Compiler"></a>
Compiler
- Stabilize
-Cjump-tables=bool. The flag was previously called-Zno-jump-tables.
<a id="1.93.0-Platform-Support"></a>
Platform Support
Refer to Rust's platform support page for more information on Rust's tiered platform support.
<a id="1.93.0-Libraries"></a>
Libraries
- Stop internally using
specializationon theCopytrait as it is unsound in the presence of lifetime dependentCopyimplementations. This may result in some performance regressions as some standard library APIs may now callClone::cloneinstead of performing bitwise copies - Allow the global allocator to use thread-local storage and
std::thread::current() - Make
BTree::appendnot update existing keys when appending an entry which already exists - Don't require
T: RefUnwindSafeforvec::IntoIter<T>: UnwindSafe
<a id="1.93.0-Stabilized-APIs"></a>
Stabilized APIs
- [
<[MaybeUninit<T>]>::assume_init_drop](https://doc.rust-lang.org/stable/core/primitive.slice.html#method.assume_init_drop) - [
<[MaybeUninit<T>]>::assume_init_ref](https://doc.rust-lang.org/stable/core/primitive.slice.html#method.assume_init_ref) - [
<[MaybeUninit<T>]>::assume_init_mut](https://doc.rust-lang.org/stable/core/primitive.slice.html#method.assume_init_mut) - [
<[MaybeUninit<T>]>::write_copy_of_slice](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.write_copy_of_slice) - [
<[MaybeUninit<T>]>::write_clone_of_slice](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.write_clone_of_slice) String::into_raw_partsVec::into_raw_parts<iN>::unchecked_neg<iN>::unchecked_shl<iN>::unchecked_shr<uN>::unchecked_shl<uN>::unchecked_shr- [
<[T]>::as_array](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_array) - [
<[T]>::as_mut_array](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_mut_array) - [
<*const [T]>::as_array](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.as_array) - [
<*mut [T]>::as_mut_array](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.as_mut_array) VecDeque::pop_front_ifVecDeque::pop_back_ifDuration::from_nanos_u128char::MAX_LEN_UTF8char::MAX_LEN_UTF16std::fmt::from_fnstd::fmt::FromFn
<a id="1.93.0-Cargo"></a>
Cargo
- Enable CARGO_CFG_DEBUG_ASSERTIONS in build scripts based on profile
- In
cargo tree, support long forms for--formatvariables - Add
--workspacetocargo clean
<a id="1.93.0-Rustdoc"></a>
Rustdoc
- [Remove
#![doc(document_private_items)]](https://github.com/rust-lang/rust/pull/146495) - Include attribute and derive macros in search filters for "macros"
- Include extern crates in search filters for
import - Validate usage of crate-level doc attributes. This means if any of
html_favicon_url,html_logo_url,html_playground_url,issue_tracker_base_url, orhtml_no_sourceeither has a missing value, an unexpected value, or a value of the wrong type, rustdoc will emit the deny-by-default lintrustdoc::invalid_doc_attributes.
<a id="1.93.0-Compatibility-Notes"></a>
Compatibility Notes
- Introduce
pin_v2into the builtin attributes namespace - Update bundled musl to 1.2.5
- On Emscripten, the unwinding ABI used when compiling with
panic=unwindwas changed from the JS exception handling ABI to the wasm exception handling ABI. If linking C/C++ object files with Rust objects,-fwasm-exceptionsmust be passed to the linker now. On nightly Rust, it is possible to get the old behavior with-Zwasm-emscripten-eh=false -Zbuild-std, but it will be removed in a future release. - The
#[test]attribute, used to define tests, was previously ignored in various places where it had no meaning (e.g on trait methods or types). Putting the#[test]attribute in these places is no longer ignored, and will now result in an error; this may also result in errors when generating rustdoc. Error whentestattribute is applied to structs - Cargo now sets the
CARGO_CFG_DEBUG_ASSERTIONSenvironment variable in more situations. This will cause crates depending onstatic-initversions 1.0.1 to 1.0.3 to fail compilation with "failed to resolve: use of unresolved module or unlinked crateparking_lot". See the linked issue for details. - User written types in the
offset_of!macro are now checked to be well formed. cargo publishno longer emits.cratefiles as a final artifact for user access when thebuild.build-dirconfig is unset- Upgrade the
deref_nullptrlint from warn-by-default to deny-by-default - Add future-incompatibility warning for
...function parameters without a pattern outside ofexternblocks - Introduce future-compatibility warning for
repr(C)enums whose discriminant values do not fit into ac_intorc_uint - Introduce future-compatibility warning against ignoring
repr(C)types as part ofrepr(transparent)
1.93.1 (Feb 12, 2026)
<a id="1.93.1"></a>
- Don't try to recover keyword as non-keyword identifier, fixing an ICE that especially affected rustfmt.
- Fix
clippy::panicking_unwrapfalse-positive on field access with implicit deref. - Revert "Update wasm-related dependencies in CI", fixing file descriptor leaks on the
wasm32-wasip2target.
Release notes from the Rust project's RELEASES.md (MIT or Apache-2.0); summaries above are ours.
Up next
Next releaseRust 1.94Released Mar 5, 2026.Read it next →Also worth your time
Did this answer your question?