The Rust project is currently working towards a slate of 16 project goals, with 0 of them designated as Roadmap Goals. This post provides selected updates on our progress towards these goals (or, in some cases, lack thereof). The full details for any particular goal are available in its associated tracking issue on the rust-project-goals repository.
Roadmap goals
Goals looking for help
Other goal updates
| Progress | |
| Point of contact | |
| Champions |
No detailed updates available.
| Progress | |
| Point of contact | |
| Champions | |
| Task owners |
No detailed updates available.
| Progress | |
| Point of contact | |
| Champions |
bootstrap (Jakub Beránek), lang (Niko Matsakis), spec (Pete LeVasseur) |
| Task owners |
Pete LeVasseur, Contributors from Ferrous Systems and others TBD, |
No detailed updates available.
| Progress | |
| Point of contact | |
| Champions | |
| Task owners |
1 detailed update available.
Here's our January status update!
-
Yesterday, we posted an MCP for our retag intrinsics. While that's in progress, we'll start adapting our current prototype to remove our dependence on MIR-level retags. Once that's finished, we'll be ready to submit a PR.
-
We published our first monthly blog post about BorrowSanitizer.
-
Our overall goal for 2026 is to transition from a research prototype to a functional tool. Three key features have yet to be implemented: garbage collection, error reporting, and support for atomic memory accesses. Once these are complete, we'll be able to start testing real-world libraries and auditing our results against Miri.
| Progress | |
| Point of contact | |
| Champions | |
| Task owners |
Taylor Cramer, Taylor Cramer & others |
No detailed updates available.
| Progress | |
| Point of contact | |
| Champions | |
| Task owners |
Amanieu d'Antras, Guillaume Gomez, Jack Huey, Josh Triplett, lcnr, Mara Bos, Vadim Petrochenkov, Jane Lusby |
No detailed updates available.
| Progress | |
| Point of contact | |
| Champions |
compiler (Manuel Drehwald), lang (TC) |
| Task owners |
Manuel Drehwald, LLVM offload/GPU contributors |
1 detailed update available.
Key developments:
std::autodiff is moving closer to nightly, and std::offload is gaining various performance, feature, and hardware support improvements.
autodiff
Jakub Beránek, sgasho, and I continued working on enabling autodiff in nightly. We have a PR up that builds autodiff in CI, and verified that the artifacts can be installed and work on Linux. For apple however, we noticed that any autodiff usage hangs. After some investigation, it turns out that we ended up embedding two LLVM copies, one in rustc, and one in Enzyme. It should be comparably easy to get rid of the second one. Once we verified that this fixes the build, we'll merge the PR to enable autodiff on both targets in nightly.
offload
A lot of interesting updates on the performance, feature, and hardware support side.
-
Marcelo Domínguez, @kevinsala, @jdoerfert, and I started implementing the first benchmarks, since that's generally the best way to find missing features or performance issues. We were positively surprised by how good the out-of-the-box performance was. We will implement a few more benchmarks and post the results once we have verified them. We also implemented multiple PRs which implement bugfixes, cleanups, and needed features like support for scalars. We also started working on LLVM optimizations which make sure that we can achieve even better performance.
-
I noticed that our offload intrinsic allowed running Rust code on the GPU, but it wasn't of much help when calling gpu vendor libraries like cuBLAS. In https://github.com/rust-lang/rust/pull/150683 I implemented a new helper intrinsic which allows calling those functions conveniently, without having to manually move data to or from the device. It will benefit from the same LLVM optimizations as our full offload intrinsic. It also a bit simpler to set up on the compiler and linker side, so it already works with
stdand mangled kernel names, something that we still have to improve for our main offload intrinsic. -
A lot of work happened on the LLVM offload side for SPIRV and Intel GPU support. At the moment, our Rust frontend is tested on NVIDIA and AMD server and consumer GPUs, as well as AMD HPC and Lapotop APUs. Karol Zwolak reached out since he wants to help with with also running Rust on Intel GPUs. Offload relies on LLVM which started gaining Intel support, so hopefully we won't need much work beyond a new intel-gpu target and a new stdarch module. There is also work on a new spirv target for rustc, which we could also support if it goes through LLVM. Due to some open questions around typed pointers it does not seem clear yet whether it will, so we will have to wait.
-
Nikita started working on updating our submodule to LLVM 22. This hopefully does not only brings some compile and runtime performance improvements, but also greatly simplifies how we can build and use offload. Once it landed I'll refactor our bootstraping logic, and as part of that start building offload in CI.
| Progress | |
| Point of contact | |
| Champions |
lang (Josh Triplett), lang-docs (TC) |
| Task owners |
1 detailed update available.
Update from the 2026-01-14 meeting.
Deref / Receiver
Ding's arbitrary_self_types: Split the Autoderef chain rust#146095 is waiting on reviews. It updates the method resolution to essentially: deref_chain(T).flat_map(|U| receiver_chain(U)).
The perf run was a wash and a carter has completed yesterday. Analysis pending.
RFC #3851: Supertrait Auto-impl
Ding has submitted a Rust Project goal for Supertrait Auto Impl.
Arbitrary Self Types rust#44874
We've discovered the #[feature(arbitrary_self_types_pointer)] feature gate. As the Lang consensus is to not support the Receiver trait on raw pointer types we're probably going to remove it (but this needs further discussion). This was a remnant from the original proposal, but the Lang has changed direction since.
derive(CoercePointee) rust#123430
Ding is working on a fix to prevent accidental specialization of the trait implementation. rust#149968 is adding an interim fix.
Alice opened a Reference PR for rust#136776. There are questions around the behaviour of the as cast vs. coercions.
Pass pointers to const in assembly rfc#3848
Gary opened implementation for the RFC: rust#138618.
In-place initialization goal#395
Ding is writing a post to describe all the open proposals including Alice's new one that she brouhght up during the LPC 2025. He'll merge it in: https://rust-lang.github.io/beyond-refs.
Field Projections goal#390
Benno updated the Field Representing Types PR to the latest design. This makes the PR much simpler.
Tyler opened a wiki to keep all the proposals, resources in one place: https://rust-lang.github.io/beyond-refs.
Macros, attributes, derives, etc.
Josh brought up his work on adding more capable declarative macros for writing attributes and derives. He's asked the Rust for Linux team for what they need to stop using proc macros.
Miguel noted they've just added dependency on syn, but they would like to remove it some day if their could.
Benno provided a few cases of large macros that he thought were unlikely to be replacable by declarative-style ones. Josh suggested there may be a way and suggested an asynchronous discussion.
| Progress | |
| Point of contact | |
| Champions | |
| Task owners |
bjorn3, Folkert de Vries, [Trifecta Tech Foundation] |
No detailed updates available.
| Progress | |
| Point of contact | |
| Champions | |
| Task owners |
1 detailed update available.
Project Goal Update
The prototype of this project goal is basically complete.
Current state
This project goal introduces build analysis support in Cargo, with the aim of making build behavior understandable across multiple invocations, not just a single run.
At a high level, the prototype:
- Records build metadata over time, including:
- rebuild reasons
- timing information
- relevant invocation context
- Stores this data locally in a structured log format suitable for later analysis
- Exposes the data via unstable
cargo reportsubcommands, such as:cargo report sessions- list session IDscargo report timings- HTML timing reportcargo report rebuilds- Why things rebuilt
See https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#build-analysis for a more thorough usage documentation
Path towards stabilization
Before this feature can be stabilized, the following unresolved questions must be answered.
They might not block stabilization, but need to be evaluated if it is fine to leave for future.
cargo report commands
This is a stabilization blocker.
- [ ] Currently all three report commands (
sessions,rebuilds,timings) implicitly inspect global log files when if not in a workspace.- Should this be explicit with a flag?
- Should this be an error if not in a workspace?
- [ ] Bikeshed on command names
- Currently we have all nouns
- For
sessionsrunssimple but ambiguous- Just
loglikegit log historyuser-friendly (docker history, shellhistory, though not alike)
- For
timings:- Not controversial, as we have
--timingsflag already
- Not controversial, as we have
- For
rebuilds:rebuild-reasonsmore explicit
- For
- Or move to action-oriented verbs:
cargo report list-sessionscargo report analyze-timings(bazel analyze-profilehttps://bazel.build/docs/user-manual#analyze-profile)cargo report explain-rebuilds- Or question-oriented verbs:
cargo report what-ranmore general https://buck2.build/docs/developers/what-ran/cargo report why-rebuilt/why-reran
- Currently we have all nouns
cargo report sessions
- Currently it prints a human-readable output without a format for programmable use cases.
- Should we provide a programmable output (for example behind
--message-format=json)?
- Should we provide a programmable output (for example behind
cargo report rebuilds
- Extend the report from fingerprint to new hash (
-Cmetadata/-Cextra-filename)- We currently can't distinguish whether a fresh build is a real new build or just rustflags changed
- https://github.com/rust-lang/cargo/pull/16456#discussion_r2662364819
- Make each rebuilt reason more actionable and friendly for end-users.
- Should we log the fingerprint values being compared, or just the diff result?
- #t-cargo > logging unit fingerprint @ 💬
Log message schema
This is a stabilization blocker.
- [ ] Providing types for reading log messages
- We should export
LogMessageenum and related types incargo-util-schemas - Users may want to parse logs programmatically
- https://github.com/rust-lang/cargo/pull/16150#discussion_r2462065538
- We should export
- [ ] JSON schema evolution and versioning
- Should we version the schema explicitly in each message?
- Compatibility might be the same as https://doc.rust-lang.org/nightly/cargo/commands/cargo-metadata.html?highlight=compa#compatibility
- [ ] Message structure consistency
- Current log messages deviate from cargo's normal JSON message structure
- Should we align with existing cargo JSON output format, for example the
targetfield? - https://github.com/rust-lang/cargo/pull/16414#discussion_r2632724893
- https://github.com/rust-lang/cargo/pull/16303#discussion_r2565526807
- https://github.com/rust-lang/cargo/pull/16303#discussion_r2561862478
- [ ] Should we expose the entire
DirtyReasonenum as-is?- Currently exposes internal implementation details
- May want to create a separate public-facing enum
- Need to decide which variants are user-facing vs internal
- [ ] Check usefulness of each variant
- Some variants may be obsolete (e.g.,
RustflagsChangedmay be rare after-Cmetadatachanges) - Need audit of which variants actually occur in practice
- Remove or consolidate rarely-used variants
- Some variants may be obsolete (e.g.,
- [ ] Make dirty reasons end-user friendly
- Current reasons are technical (e.g., "local fingerprint type changed")
- Users need actionable messages (e.g., "file modified: src/lib.rs")
- [ ] Expose
targetandmode- Are they universal for all kind of units? We might want to rename mode to action, as an action kind of a unit.
- https://rust-lang.zulipchat.com/#narrow/channel/246057-t-cargo/topic/build.20analysis.20log.20format/near/564781487
Log infrastructure
These are mostly future possibilities, not a stabilization blocker, as it is highly possible to do incremental improvements.
- [ ] log compression https://github.com/rust-lang/cargo/issues/16475
- [ ] log rotation https://github.com/rust-lang/cargo/issues/16471
- [ ] Is losing data on crashes ok? https://github.com/rust-lang/cargo/pull//16150#discussion_r2462056940
See also https://github.com/rust-lang/cargo/issues/16471#issuecomment-3724915770
Nested Cargo calls
See https://github.com/rust-lang/cargo/issues/16477.
Basically, we need to have a way to associate log files of nested Cargo calls.
That helps other tools as well as cargo fix itself.
This is a stabilization blocker.
How contributors can help
Future contributors can help by:
- picking up any linked issues below or in https://github.com/rust-lang/cargo/issues/15844
- building external tools utilizing the log messages, and providing feedback
- providing real-world feedback from large or unusual builds
A series of follow-up tasks has been cut to track remaining work:
- https://github.com/rust-lang/cargo/issues/16470
- https://github.com/rust-lang/cargo/issues/16471
- https://github.com/rust-lang/cargo/issues/16472
- https://github.com/rust-lang/cargo/issues/16473
- https://github.com/rust-lang/cargo/issues/16474
- https://github.com/rust-lang/cargo/issues/16475
- https://github.com/rust-lang/cargo/issues/16477
- https://github.com/rust-lang/cargo/issues/16488
| Progress | |
| Point of contact | |
| Champions | |
| Task owners |
@dropbear32, @osiewicz |
No detailed updates available.
| Progress | |
| Point of contact | |
| Champions | |
| Task owners |
1 detailed update available.
Status update January 15, 2026
Fine grain locking for build-dir was merged in https://github.com/rust-lang/cargo/pull/16155 and now available on nightly via -Zfine-grain-locking unstable flag. 🎉
There are some known issues we'd like to address before doing a formal call for testing. Notably, improving blocking messages, fixing potential thread starvation in Cargo's job queue when locks block, and investigate increasing rlimits to reduce risk of hitting max file descriptors for large projects.
I am hopeful that these issues will be resolved over the coming month and we can do a call for testing to start gathering feedback from the community on whether the new locking strategy improves workflows.
| Progress | |
| Point of contact | |
| Champions | |
| Task owners |
No detailed updates available.
| Progress | |
| Point of contact | |
| Task owners |
vision team |
No detailed updates available.
| Progress | |
| Point of contact | |
| Champions | |
| Task owners |
No detailed updates available.
| Progress | |
| Point of contact | |
| Champions | |
| Task owners |