Rust 1.100 Stabilizes the Never Type and Allocator Trait, and Changes Fallback in Old Editions
Software / explainer
Rust 1.100 Stabilizes the Never Type and Allocator Trait, and Changes Fallback in Old Editions
The release ends a ten-year effort on `!`, ships the Allocator trait, and adds a Cargo cooldown setting that skips freshly published crate versions.

Rust 1.100.0 was released on November 12, 2026, and the two changes that matter most are in the language and the standard library: the never type, written !, is now stable, and so is the Allocator trait. Upgrade with rustup update stable.

The release announcement, signed by the Rust Release Team, says the never type took "10 years and 5 failed stabilization attempts". The project's release notes list it under Language as pull request 155499, and the Allocator work as pull request 156882.
What the never type changes in 1.100
! is the type of expressions that never produce a value, such as return, break and std::process::exit. Before 1.100 the compiler used it internally but you could not name it in most places.
Now you can write Result<T, !> or use it as any generic argument. std::convert::Infallible becomes an alias for !, so older APIs that return Infallible keep working with the new spelling.
The cost is a fallback change. When the compiler cannot infer a type, it used to default to () in the 2015, 2018 and 2021 editions. From 1.100 it defaults to ! in all of them, as edition 2024 already did.
LWN's Daroc Alden reported that a crater run, which rebuilds public crates against a compiler change, found about 3,300 crates negatively impacted and only seven fully broken. Backported fixes to dependencies resolved 1,553 of the failing crates. The stabilization landed on August 24, 2026, and the release post says future-compatibility warnings went out in advance.
The symptom the post describes is code that ignores the result of a function returning a generic parameter, where the compiler may now flag later code as unreachable.
What the Allocator trait lets you do
std::alloc::Allocator is stable, with Global and System and implementations for &A, &mut A, Box, Rc and Arc. Vec and Box gain constructors that take one, including Vec::with_capacity_in and Box::new_in.
The release post calls this the foundation of the Allocators 1.0 project goal and says more collections are expected to follow. Only Vec and Box are named in the post as getting the new constructors.
Also stabilized: core::mem::DropGuard, which runs a closure whenever the guard is dropped, and conjure_zst, an unsafe way to build zero-sized types. The post's DropGuard example truncates a Vec back to its original length if parsing fails partway through. DropGuard::dismiss skips the closure.
Cargo cooldowns: what they skip
Cargo 1.100 adds a dependency cooldown. Set global-min-publish-age in .cargo/config.toml and the resolver passes over versions published inside the configured window. For a single update, CARGO_RESOLVER_INCOMPATIBLE_PUBLISH_AGE=allow overrides it.
The post lists the limits itself. Versions without a pubtime field in the registry index are never held back, and cargo install ignores the minimum age. It says cooldowns are not a complete defense against supply chain attacks, so reviewing updates still matters. Reading the changelog before taking an update is still the manual step the setting does not replace.
Cargo also now warns about unused dependencies under [lints.cargo]. The warning only appears when every target that could use a dependency is built, so cargo check --bin foo will not flag unused entries, and dev-dependencies are never flagged.
Compatibility notes to read before upgrading
| Change in 1.100 | Who is affected |
|---|---|
Never type fallback is ! in all editions | Code on 2015, 2018 and 2021 editions |
box patterns no longer parse | Anyone still using them |
aligned_fields_in_packed is deny-by-default | repr(packed) types with repr(align) fields |
ARM ABI-altering -Ctarget-feature values are hard errors | Embedded ARM builds |
| Unicode 18.0.0 and WASI SDK 34 | Standard library and WASI builds |
The notes also say some ARMv7-A hardfloat targets from 1.94 through 1.100 wrongly required VFPv3-D32, and that affected code can pass -Ctarget-feature=+d32. Closures now capture variables used in if let more precisely, which can produce new errors.
Standards committees run on a different clock from Rust's release train; the Terminal's report on the C++26 ballot that failed covers that side. Also on the software desk is a measured comparison of Postgres json and jsonb.
What to do this week
Run cargo check on a 2021-edition crate before bumping the toolchain in CI. If a crate that built on 1.99.0 fails on 1.100.0, the fallback change is the first suspect, and the release post says fixes were released for affected public crates.
Sources
More in Software
- 01Outlook.com Bounced Authenticated Mail for Days Before Microsoft Rolled Back a Spam RuleSenders with passing SPF, DKIM and DMARC headers still got 550 rejections. Incident EX1545193 blames an update to spam enforcement rules.
- 02Apple Closes Its Support Community on November 20, Ten Days After Making It Read-OnlyThe 28-year-old user forum went read-only on November 10 with a notice pointing people to Apple Support. Apple has not said what happens to the archive.
- 03Rivet, a YC W23 Company, Runs Agent Actors on S3 and Claims 72 KB EachThe Apache 2.0 orchestrator says an actor cold-starts in 4.99 ms at p99. Every figure is Rivet's own, and the Launch HN thread questioned both the premise and the AWS bill.
- 04GitHub Actions Lockfiles: What gh actions-lock Pins and What It Leaves LooseWorkflow lockfiles went generally available on October 28. The extension's own README lists four gaps, including Docker images and reusable workflows in other repositories.