Rust 1.100 stable: never type (!), Allocator API and Cargo min-publish-age
Rust 1.100.0 stabilises the never type and core allocators and adds dependency cooldowns; older editions get a never-type fallback change.
· 5 min read
Written by AI from the sources linked below. How we use AI
On this page
Rust 1.100.0 was released on 12 November 2026 and finally stabilises the never type (!), the core of the Allocator API, and Cargo "dependency cooldowns" that let you ignore freshly published crate versions. Run rustup update stable to get it. Most projects will upgrade without changes, but two items can bite: a never-type fallback change in older editions and a new Cargo build directory layout.
Key points
- Rust 1.100.0 stable was released on 12 November 2026; upgrade with
rustup update stable. - The never type
!is stable and can be named anywhere, such asResult<T, !>;Infalliblebecomes an alias for!. - The core
Allocatortrait and the allocator-awareBox,Vec,RcandArcconstructors are stable. - Cargo gains minimum publish age (dependency cooldowns), its own
[lints.cargo]system with an unused-dependency warning, and a new build directory layout. - Compatibility notes: in editions 2015, 2018 and 2021, never type fallback changes from
()to!; closures capture variables inif letmore precisely, which may cause new errors.
What to do
- Update:
rustup update stable, then rebuild and run your tests in CI. - If you use editions 2015, 2018 or 2021, watch for compile errors or new unreachable-code warnings around code that ignores a result of a function returning a generic parameter. The Rust team says the never-type fallback change may rarely affect code.
- If a tool of yours reads Cargo's
targetdirectory by path, switch to Cargo's JSON messages to locate artifacts: the layout is not a stable interface. Build directories are now organised by build step, which the release post says may break build processes or tests that relied on workarounds. - Expect a new warning: Cargo's
unused_dependencieslint defaults towarn. It does not checkdev-dependencies, and partial builds such ascargo check --bin foodo not report unused[dependencies]. - Consider a cooldown (below) as a supply-chain defence for your own projects.
What happened
The Rust Release Team published 1.100.0 on 12 November. The release notes in the main repository list seven language changes, two compiler changes, three platform-support changes, library and Cargo changes, and a set of compatibility notes. The headline language item is "Stabilize never type", which the release post says followed five failed stabilisation attempts over ten years. Another language change stabilises extern "custom".
Two Cargo features reach stable at the same time. The first, minimum publish age, is tracked as RFC 3923. When it is configured, the resolver ignores versions published more recently than the limit, unless they are already in Cargo.lock. The second, a lint system for Cargo warnings, is controlled through the [lints.cargo] table in Cargo.toml and includes a built-in unused-dependency check.
Background
The never type is the type of expressions that never return, such as panic!(), loop {} or return. It has long existed in the compiler, but until now stable Rust let you write it only in function return position, as in fn fail() -> !. That left awkward workarounds: the standard library's Infallible enum stood in for "an error that cannot happen", for example Result<T, Infallible>. In 1.100, ! can be named anywhere, so Result<T, !> works, and Infallible is now a type alias for !, so existing code that names Infallible keeps working.
The Allocator API has an equally long history. Rust has let you replace the global allocator for years, but not choose an allocator per collection on stable. The release post calls the stabilised piece "core parts" of the API and part of the Allocators 1.0 project goal, with more expected later. Dependency cooldowns follow a pattern from the wider ecosystem: a waiting period before adopting a newly published version gives maintainers and security researchers time to catch a malicious release.
How it works
Never type. Code like this now compiles on stable:
fn parse(s: &str) -> Result<u32, !> { /* cannot fail */ }
The behavioural change is the fallback. When the compiler cannot infer a type for an expression that diverges, older editions fell back to (). In 1.100 editions 2015, 2018 and 2021 fall back to !, matching edition 2024, which already did so. The release post says this may rarely affect code and may make the compiler detect more unreachable code.
Allocators. The stable surface includes std::alloc::Allocator, Global and System, implementations of Allocator for &A, &mut A, Box<T, A>, Arc<T, A> and Rc<T, A>, and allocator-aware methods on Box (new_in, from_raw_in, allocator and others) and Vec (new_in, with_capacity_in, from_raw_parts_in, allocator and others). That lets arena and region allocators, and allocators with custom limits, plug into the standard collections on stable.
Cooldowns. Per the release post, set global-min-publish-age under [registry] in .cargo/config.toml, for example "3 days". You can override it for one update with CARGO_RESOLVER_INCOMPATIBLE_PUBLISH_AGE=allow. Caveats: cargo install ignores the minimum age (pin with cargo install foo@1.2.3 if needed), and versions without a pubtime field in the registry index are never held back.
Other library additions. New stable APIs include core::mem::DropGuard (runs a closure on drop, with a dismiss method that returns the value without running it), bool::toggle, str::trim_prefix and trim_suffix, Vec::from_fn, Box::take and Box::map, Rc::map and Arc::map, and the unsafe core::mem::conjure_zst. Windows gains Child::main_thread_handle and CommandExt::show_window.
| items | |
|---|---|
| Language | 7 |
| Compiler | 2 |
| Platform support | 3 |
| Libraries | 3 |
| Stabilized APIs | 47 |
| Cargo | 4 |
Source: Rust RELEASES.md, Version 1.100.0
What it means
For application developers, the practical wins are modest and immediate: unused-dependency warnings, trimming helpers and cooldowns for supply-chain hygiene. For library authors, stable allocators remove a major reason to stay on nightly, and Result<T, !> lets generic code express "this cannot fail" without a stand-in type.
Teams that build with unusual tooling should test first. Cargo's new intermediate-artifact layout is documented as unstable and the project points tools to JSON messages. The cargo install change in the release notes is also worth knowing about: it now uses the lockfile in the .crate tarball by default, so --locked becomes a no-op.
Platform support moved too: i686-pc-windows-gnu becomes a tier 2 target without host tools, wasm32-wasip3 is promoted to tier 2, and powerpc64-sony-ps3 is added as a new tier 3 target.
What we don't know yet
- How widely the never-type fallback change will show up in real code: the Rust team calls it rare, and we have not seen crater or ecosystem reports.
- When the remaining Allocator API pieces will stabilise: the release post says only that more is expected later.
- Whether cooldowns will become a default or a recommended setting in Rust's own guidance.
What to watch next
The first ecosystem reports of build breakage from the Cargo directory layout; crates that adopt Result<T, !> in public APIs; guidance from registries and security teams on recommended cooldown periods; and the Rust 1.101 release notes, which the Rust changelog site already lists as the next version.
Sources
- Rust Release Team: Announcing Rust 1.100.0 (primary)
- Rust repository: RELEASES.md, Version 1.100.0
- Rust Changelogs: 1.100.0 on releases.rs
- Cargo: RFC 3923, minimum publish age
Written by
The official account of the people who run audiotale.net: announcements, conversation starters and the newsroom's drafts. Posts written with AI say so. Every other account here is a real person.
Read next
C++26 fails its ISO DIS ballot: committee members say contracts caused it, next step in November
The C++26 draft was disapproved when the ISO ballot closed on 23 October 2026; committee members point to contracts and the WG21 meets 16 to 21 November.
audiotale.net team6 min read
Cloudflare and VoidZero release tsrs, a Rust port of TypeScript 7 that they say type-checks up to 8x faster
The experimental compiler, built with the TypeScript team's cooperation, claims up to 8x faster checks and about 70% less memory than TypeScript 7.0 at equal workers; the figures are the project's own.
audiotale.net team8 min read
Gemini 4 Hydrogen: $1.50/$7.50 per 1M tokens, 1M context, replaces Gemini 3.8 Flash
Google's new everyday model scores 57% on Terminal-Bench 4.1 (Google's figure) and changes defaults, so a model-ID swap can break calls.
audiotale.net team6 min read