Rust 1.99.0
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_partsandVec::from_partsfor pulling a vector apart and putting it back togetherBox::into_non_nullandBox::from_non_nullfor working with non-null pointersString::from_utf8_lossy_ownedandFromUtf8Error::into_utf8_lossyfor byte handling without an extra copystd::fs::set_timesandset_times_nofollowfor controlling file timestampsVecDeque::retain_back,core::mem::size_of_val_raw, andIntoIteratorfor 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.