Announcing Rust 1.97.0

Lobsters Hottest Tools

Summary

Rust 1.97.0 is released with symbol mangling v0 enabled by default, Cargo support for denying warnings, and linker output no longer hidden.

<p><a href="https://lobste.rs/s/o9edbl/announcing_rust_1_97_0">Comments</a></p>
Original Article
View Cached Full Text

Cached at: 07/09/26, 03:40 PM

# Announcing Rust 1.97.0 | Rust Blog Source: [https://blog.rust-lang.org/2026/07/09/Rust-1.97.0/](https://blog.rust-lang.org/2026/07/09/Rust-1.97.0/) The Rust team is happy to announce a new version of Rust, 1\.97\.0\. Rust is a programming language empowering everyone to build reliable and efficient software\. If you have a previous version of Rust installed via`rustup`, you can get 1\.97\.0 with: ``` $ rustup update stable ``` If you don't have it already, you can[get`rustup`](https://www.rust-lang.org/install.html)from the appropriate page on our website, and check out the[detailed release notes for 1\.97\.0](https://doc.rust-lang.org/stable/releases.html#version-1970-2026-07-09)\. If you'd like to help us out by testing future releases, you might consider updating locally to use the beta channel \(`rustup default beta`\) or the nightly channel \(`rustup default nightly`\)\. Please[report](https://github.com/rust-lang/rust/issues/new/choose)any bugs you might come across\! ## What's in 1\.97\.0 stable ### Symbol mangling v0 enabled by default When Rust is compiled into object files and binaries, each item \(functions, statics, etc\) must have a globally unique "symbol" identifying it\. To avoid conflicts when linking together different Rust programs, Rust mangles the original name of items to include additional context such as the module path, defining crate, generics, and more\. Historically, this mangling was based on the[Itanium ABI](https://refspecs.linuxbase.org/cxxabi-1.86.html#mangling), also \(sometimes\) used by C\+\+\. 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 - Inconsistencies: not all parts used the Itanium ABI, meaning that custom demangling was still necessary Since Rust 1\.59, the compiler has supported opting into a Rust\-specific mangling scheme via`\-Csymbol\-mangling\-version=v0`\. Since November 2025, this scheme has been enabled by default on nightly, and 1\.97 is now enabling it on stable Rust\. The legacy mangling scheme can only be enabled on nightly, and the current plan is to fully remove it\. See the previous[blog post](https://blog.rust-lang.org/2025/11/20/switching-to-v0-mangling-on-nightly/)for more details\. ### Cargo support for denying warnings It's common practice to deny warnings in CI\. Historically, doing so is typically done through`RUSTFLAGS=\-Dwarnings`\. With Rust 1\.97, Cargo controls how warnings interact with build success: either silencing them \(via`allow`level\), rendering without failing \(default,`warn`\), or denying them \(via`deny`\)\. As a result of Cargo configuration determining the behavior, using this feature doesn't invalidate the underlying build cache, meaning that it's easy to temporarily opt\-in\. For example, if warnings are adding unwanted noise while working through fixing errors after a refactor, you can run`CARGO\_BUILD\_WARNINGS=allow cargo check`, temporarily silencing them\. In CI, jobs can instead set`CARGO\_BUILD\_WARNINGS=deny`to deny warnings\. This can be combined with`\-\-keep\-going`to collect all errors and warnings rather than stopping on the first failing package\. See the[documentation](https://doc.rust-lang.org/cargo/reference/config.html#buildwarnings)for more details\. ### Linker output no longer hidden by default rustc invokes a linker on behalf of users\. Historically, rustc has silenced linker output by default if the link completes successfully\. This can mask real problems, though, so in Rust 1\.97 we are enabling linker messages by default\. These are emitted as a warning lint, for example: ``` warning: linker stderr: ignoring deprecated linker optimization setting '1' | = note: `#[warn(linker_messages)]` on by default ``` Common linker messages that have been diagnosed as false positives or intentional behavior are filtered out by rustc\. Several defects have already been fixed as a result of no longer hiding this output on nightly\. Note that currently,`linker\_messages`is a special lint that is*not*affected by the`warnings`lint group\. This is intentional as rustc generally doesn't control linker output as precisely, and it's not uncommon for output to only appear on some platforms\. If you are seeing what you think is a false positive output from the linker, please[file an issue](https://github.com/rust-lang/rust/issues/new/choose)\. To silence the warning in the mean time, you can configure the lint level to allow\. This can be done through`Cargo\.toml`by adding a[lints section](https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-lints-section)like this: ``` [lints.rust] linker_messages = "allow" ``` ### Stabilized APIs - [`Default for RepeatN`](https://doc.rust-lang.org/stable/std/iter/struct.RepeatN.html#impl-Default-for-RepeatN%3CA%3E) - [`Copy for ffi::FromBytesUntilNulError`](https://doc.rust-lang.org/stable/std/ffi/struct.FromBytesUntilNulError.html#impl-Copy-for-FromBytesUntilNulError) - [`Send for std::fs::File`on UEFI](https://github.com/rust-lang/rust/pull/154003) - [`<\{integer\}\>::isolate\_highest\_one`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.isolate_highest_one) - [`<\{integer\}\>::isolate\_lowest\_one`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.isolate_lowest_one) - [`<\{integer\}\>::highest\_one`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.highest_one) - [`<\{integer\}\>::lowest\_one`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.lowest_one) - [`<\{uN\}\>::bit\_width`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.bit_width) - [`NonZero<\{integer\}\>::isolate\_highest\_one`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.isolate_highest_one) - [`NonZero<\{integer\}\>::isolate\_lowest\_one`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.isolate_lowest_one) - [`NonZero<\{integer\}\>::highest\_one`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.highest_one) - [`NonZero<\{integer\}\>::lowest\_one`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.lowest_one) - [`NonZero<\{uN\}\>::bit\_width`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.bit_width) These previously stable APIs are now stable in const contexts: - [`char::is\_control`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_control) ### Other changes Check out everything that changed in[Rust](https://github.com/rust-lang/rust/releases/tag/1.97.0),[Cargo](https://doc.rust-lang.org/nightly/cargo/CHANGELOG.html#cargo-197-2026-07-09), and[Clippy](https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md#rust-197)\. ## Contributors to 1\.97\.0 Many people came together to create Rust 1\.97\.0\. We couldn't have done it without all of you\.[Thanks\!](https://thanks.rust-lang.org/rust/1.97.0/)

Similar Articles

Announcing Zstandard in Rust

Lobsters Hottest

Trifecta Tech Foundation announces the first release of libzstd-rs-sys, a pure Rust implementation of the Zstandard compression format, offering a drop-in replacement for the C reference implementation with improved portability and memory safety at a slight performance cost.

Symbolica 2.0: programmable symbols for Python and Rust

Lobsters Hottest

Symbolica 2.0 is a major release of the symbolic computation framework for Python and Rust, introducing programmable symbols, improved Rust API, richer output formats (HTML, Typst, colored), JIT compilation for evaluation, and better ergonomics.

Port React Compiler to Rust

Hacker News Top

An initiative to port the React Compiler to Rust, aiming to improve performance and integration with the Rust ecosystem.

Bun's Rust rewrite has been merged

Lobsters Hottest

Bun, the JavaScript runtime and package manager, has merged a rewrite of its core from Zig to Rust, potentially improving performance and maintainability.

Work In Progress Rust

Lobsters Hottest

This article presents techniques and a library for deferring error handling in Rust during development, allowing developers to temporarily downgrade errors to warnings to maintain productivity without sacrificing correctness.