Rust 1.97.0: v0 Symbol Mangling Goes Stable, Cargo Gains Warning Control
Rust 1.97.0 ships with v0 symbol mangling enabled by default, Cargo-level warning denial, and linker output no longer hidden by default.

Rust 1.97.0 landed on July 9, 2026, and it's a release that touches the build pipeline more than the language itself. Three changes stand out: v0 symbol mangling is now the default, Cargo can control warnings without touching the build cache, and linker output is no longer suppressed by default.
v0 Symbol Mangling: The Default
Symbol mangling is how Rust produces unique names for functions and statics in object files. The old scheme was based on the Itanium ABI (used by C++), which had two big flaws: generic parameter instantiations were only tracked behind a hash, losing their values, and the implementation was inconsistent, so custom demangling was still needed.
The v0 scheme, available since Rust 1.59 via -Csymbol-mangling-version=v0, fixes both. It's been default on nightly since November 2025, and now it's stable. The legacy scheme is nightly-only and slated for removal.
For most developers, this is invisible—your code compiles the same. But if you've ever debugged a symbol in objdump or a profiler, you'll appreciate the difference. The new names carry more semantic information, which makes debugging and reverse engineering friendlier.
Cargo Warning Control
Denying warnings in CI has always been a bit of a hack: RUSTFLAGS=-Dwarnings. That works, but it invalidates the build cache every time you flip it. Rust 1.97 introduces CARGO_BUILD_WARNINGS (or build.warnings in config), which lets you set allow, warn (default), or deny without nuking the cache.
This is a quality-of-life win. You can run CARGO_BUILD_WARNINGS=allow cargo check to silence noise during a refactor, or set CARGO_BUILD_WARNINGS=deny in CI and combine it with --keep-going to collect all errors and warnings in one pass.
Linker Output: No More Hiding
rustc used to swallow linker stderr if the link succeeded. That masked real problems. Now, linker messages are emitted as a warning lint called linker_messages, on by default. rustc filters out known false positives, but you can silence it with:
[lints.rust]
linker_messages = "allow"Note that linker_messages is intentionally not part of the warnings lint group, because linker output is platform-dependent and not always under rustc's control.
Stabilized APIs
The usual batch of API stabilizations: Default for RepeatN, Copy for ffi::FromBytesUntilNulError, Send for std::fs::File on UEFI, and a set of bit-manipulation methods on integers and NonZero: isolate_highest_one, isolate_lowest_one, highest_one, lowest_one, and bit_width. Also, char::is_control is now const.
Full details in the release notes.
The new mangling scheme resolves a number of drawbacks from the previous one: generic parameter instantiations preserve their values, rather than being tracked solely behind a hash.