Skip to main content

Rust 1.99.0

Release Date: October 1, 2026

Remember when Rust releases were mostly about dragging the borrow checker into the dark corners of unsafe code? Rust 1.99.0, published on October 1, 2026, is less a single headline and more a stack of long-promised stabilizations finally crossing the line.

The Long Road to C Variadics

Defining C-variadic functions has been a nightly-only ritual for years. With 1.99.0 that chapter closes: C-variadic function definitions are now stable, and the same treatment extends to #[unsafe(naked)] functions. Wrapping libc-style APIs in Rust no longer requires a feature gate.

Macros That Can Finally Outline Modules

A quieter stabilization may matter just as much. A custom attribute or derive macro can now expand to an outlined module, written as #[my_macro] mod foo;. It is a small syntax change with outsized consequences for procedural macros that need to stand up whole modules of generated code.

New Faces in the Standard Library

The standard library gains a batch of newcomers, several of them aimed at making ownership juggling less painful:

  • Vec::into_parts and Vec::from_parts for pulling a vector apart and putting it back together
  • Box::into_non_null and Box::from_non_null for working with non-null pointers
  • String::from_utf8_lossy_owned and FromUtf8Error::into_utf8_lossy for byte handling without an extra copy
  • std::fs::set_times and set_times_nofollow for controlling file timestamps
  • VecDeque::retain_back, core::mem::size_of_val_raw, and IntoIterator for boxed arrays

Cargo Adds a Debug Profile

Cargo now ships a built-in debug profile as groundwork for moving dev away from its debugging defaults. For the moment the two profiles behave identically, but the split signals where tooling is headed. Workspace members on edition 2024 can also override default-features on an inherited dependency, so serde = { workspace = true, default-features = false } finally does what you would expect.

A Heavier Hand on Compatibility

The upgrade has teeth. The legacy integral modules are now fully deprecated, so reach for i32::MAX instead of std::i32::MAX. The no_mangle_generic_items lint is a hard error, and Cargo disables incremental compilation by default whenever it detects the CI environment variable. The Rust Reference also stopped recommending a single pattern to match a union alongside another value, after it was found to potentially read union contents before the rest of the scrutinee matched.

Under the Hood

Rustdoc became noticeably faster at filtering trait implementations, with average gains around 20 percent and up to 40 percent on some real-world crates. The compiler now builds on LLVM 23, and riscv64-unknown-linux-musl was promoted to Tier 2 with host tools.

Rust 1.99.0 is available now through rustup. Run rustup update stable to move across, and review the compatibility notes before you do.

Other Versions

By continuing to use the site, you agree to the use of cookies.