Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Status: Accepted RFC #3764 has been accepted, establishing 40 total Rust project goals for 2025H1.

Summary

Propose a slate of 40 project goals for 2025H1, including 3 flagship goals:

Motivation

The 2025H1 goal slate consists of 40 project goals, of which we have selected 3 as flagship goals. Flagship goals represent the goals expected to have the broadest overall impact.

How the goal process works

Project goals are proposed bottom-up by a point of contact, somebody who is willing to commit resources (time, money, leadership) to seeing the work get done. The point of contact identifies the problem they want to address and sketches the solution of how they want to do so. They also identify the support they will need from the Rust teams (typically things like review bandwidth or feedback on RFCs). Teams then read the goals and provide feedback. If the goal is approved, teams are committing to support the point of contact in their work.

Project goals can vary in scope from an internal refactoring that affects only one team to a larger cross-cutting initiative. No matter its scope, accepting a goal should never be interpreted as a promise that the team will make any future decision (e.g., accepting an RFC that has yet to be written). Rather, it is a promise that the team are aligned on the contents of the goal thus far (including the design axioms and other notes) and will prioritize giving feedback and support as needed.

Of the proposed goals, a small subset are selected by the roadmap owner as flagship goals. Flagship goals are chosen for their high impact (many Rust users will be impacted) and their shovel-ready nature (the org is well-aligned around a concrete plan). Flagship goals are the ones that will feature most prominently in our public messaging and which should be prioritized by Rust teams where needed.

Rust’s mission

Our goals are selected to further Rust's mission of empowering everyone to build reliable and efficient software. Rust targets programs that prioritize

  • reliability and robustness;
  • performance, memory usage, and resource consumption; and
  • long-term maintenance and extensibility.

We consider "any two out of the three" as the right heuristic for projects where Rust is a strong contender or possibly the best option.

Axioms for selecting goals

We believe that...

  • Rust must deliver on its promise of peak performance and high reliability. Rust’s maximum advantage is in applications that require peak performance or low-level systems capabilities. We must continue to innovate and support those areas above all.
  • Rust's goals require high productivity and ergonomics. Being attentive to ergonomics broadens Rust impact by making it more appealing for projects that value reliability and maintenance but which don't have strict performance requirements.
  • Slow and steady wins the race. We don't want to create stress via unrealistic, ambitious goals. We want to make steady progress each goal period on important problems.

Guide-level explanation

Flagship goals

The flagship goals proposed for this roadmap are as follows:

Why these particular flagship goals?

Async. This work continues our drive to improve support for async programming in Rust. In 2024H2 we stabilized async closures; explored the generator design space; and began work on the dynosaur crate, an experimental proc-macro to provide dynamic dispatch for async functions in traits. In 2025H1 our plan is to deliver (1) improved support for async-fn-in-traits, completely subsuming the functionality of the async-trait crate; (2) progress towards sync and async generators, simplifying the creation of iterators and async data streams; (3) and improve the ergonomics of Pin, making lower-level async coding more approachable. These items together start to unblock the creation of the next generation of async libraries in the wider ecosystem, as progress there has been blocked on a stable solution for async traits and streams.

Rust for Linux. This goal continues our work from 2024H2 in supporting the experimental support for Rust development in the Linux kernel. Whereas in 2024H2 we were focused on stabilizing required language features, our focus in 2025H1 is stabilizing compiler flags and tooling options. We will (1) implement RFC #3716 which lays out a design for ABI-modifying flags; (2) take the first step towards stabilizing build-std by creating a stable way to rebuild core with specific compiler options; (3) extend rustdoc, clippy, and the compiler with features that extract metadata for integration into other build systems (in this case, the kernel's build system).

Rust All Hands 2025. May 15, 2025 marks the 10-year anniversary of Rust's 1.0 release; it also marks 10 years since the creation of the Rust subteams. At the time there were 6 Rust teams with 24 people in total. There are now 57 teams with 166 people. In-person All Hands meetings are an effective way to help these maintainers get to know one another with high-bandwidth discussions. This year, the Rust project will be coming together for RustWeek 2025, a joint event organized with RustNL. Participating project teams will use the time to share knowledge, make plans, or just get to know one another better. One particular goal for the All Hands is reviewing a draft of the Rust Vision Doc, a document that aims to take stock of where Rust is and lay out high-level goals for the next few years.

Project goals

The full slate of project goals are as follows. These goals all have identified owners who will drive the work forward as well as a viable work plan. The goals include asks from the listed Rust teams, which are cataloged in the reference-level explanation section below.

Invited goals. Some goals of the goals below are "invited goals", meaning that for that goal to happen we need someone to step up and serve as an owner. To find the invited goals, look for the Help wanted badge in the table below. Invited goals have reserved capacity for teams and a mentor, so if you are someone looking to help Rust progress, they are a great way to get involved.

GoalPoint of contactProgress
Expose experimental LLVM features for GPU offloadingManuel Drehwald
Scalable Polonius support on nightlyRémy Rakic
Organize Rust All-Hands 2025Mara Bos
Use annotate-snippets for rustc diagnostic outputScott Schafer
SVE and SME on AArch64David Wood
Bring the Async Rust experience closer to parity with sync RustTyler Mandry
build-stdDavid Wood
Prototype a new set of Cargo "plumbing" commandsHelp Wanted
Stabilize cargo-scriptEd Page
Continue resolving cargo-semver-checks blockers for merging into cargoPredrag Gruevski
Making compiletest more maintainable: reworking directive handlingJieyou Xu
Prepare const traits for stabilizationOliver Scherer
Externally Implementable ItemsMara Bos
Experiment with ergonomic ref-countingSantiago Pastorino
Model coherence in a-mir-formalityNiko Matsakis
Improve state machine codegenFolkert de Vries
Finish the libtest json output experimentEd Page
Declarative (macro_rules!) macro improvementsJosh Triplett
Metrics InitiativeJane Lusby
"Stabilizable" prototype for expanded const genericsBoxy
Next-generation trait solverlcnr
Null and enum-discriminant runtime checks in debug buildsBastian Kersting
Implement Open API Namespace SupportHelp Wanted
Optimizing Clippy & lintingAlejandra González
Promoting Parallel Front EndSparrow Li
rustc-perf improvementsDavid Wood
Stabilize public/private dependenciesHelp Wanted
Extend pubgrub to match cargo's dependency resolutionJacob Finkelman
Implement restrictions, prepare for stabilizationJacob Pratt
Stabilize tooling needed by Rust for LinuxNiko Matsakis
Rust Vision DocumentNiko Matsakis
Research: How to achieve safety when linking separately compiled codeMara Bos
Evaluate approaches for seamless interop between C++ and RustTyler Mandry
Nightly support for ergonomic SIMD multiversioningLuca Versari
Publish first rust-lang-owned release of "FLS"Joel Marcey
Run the 2025H1 project goal programNiko Matsakis
Publish first version of StableMIR on crates.ioCelina G. Val
Instrument the Rust standard library with safety contractsCelina G. Val
Unsafe FieldsJack Wrenn
Secure quorum-based cryptographic verification and mirroring for crates.iowalterhpearce

Reference-level explanation

The following table highlights the asks from each affected team. The rows are goals and columns are asks being made of the team. The contents of each cell may contain extra notes (or sometimes footnotes) with more details. Teams often use these notes to indicate the person on the team signed up to do the work, for example.

bootstrap team

cargo team

*1: 1 hour Overall Design and threat model (from here)

*2: 1 hour General design/implementation for index verification (from here)

*3: 1 hour Design for novel incremental download mechanism for bandwidth conservation (from here)

clippy team

GoalStabilize.
Optimizing Clippy & linting
Rust-for-Linux
↳ Clippy configuration

compiler team

*1: Esteban Kuber will be the reviewer (from here)

*2: 2-3 meetings expected; all involve lang (from here)

*3: Update performance regression policy (from here)

*4: RFC #3716, currently in PFCP (from here)

*5: For each of the relevant compiler flags (from here)

crates-io team

*1: 1 hour Overall Design, threat model, and discussion of key management and quorums (from here)

*2: 1 hour General design/implementation for automated index signing (from here)

infra team

*1: rustc-perf improvements, testing infrastructure (from here)

*2: 3 hours of design and threat model discussion. Specific production infrastructure setup will come at a later time after the initial proof of concept. (from here)

lang team

GoalExperimentDesign mtg.RFCStabilize.Policy
"Stabilizable" prototype for expanded const generics
Async
↳ Implementable trait aliases
↳ Pin ergonomicsComplete
↳ Return type notationComplete
↳ Trait for generators (sync)2 meetings expected
↳ Unsafe bindersStretch goal
Declarative (macro_rules!) macro improvements*2
↳ Design and iteration for macro fragment fields
↳ Design for macro metavariable constructs
macro_rules! attributes
macro_rules! derives
Evaluate approaches for seamless interop between C++ and Rust*1
Experiment with ergonomic ref-counting
Expose experimental LLVM features for GPU offloadingComplete
Externally Implementable ItemsComplete
Implement restrictions, prepare for stabilization
Improve state machine codegen
Nightly support for ergonomic SIMD multiversioning
Null and enum-discriminant runtime checks in debug builds
Prepare const traits for stabilizationComplete*3(stretch goal)
Research: How to achieve safety when linking separately compiled codeNiko Matsakis
SVE and SME on AArch64
↳ Extending type system to support scalable vectors
↳ Investigate SME support
Stabilize cargo-script
↳ Stabilize language feature frontmatter
Unsafe Fields

*1: 2-3 meetings expected; all involve lang (from here)

*2: Discussed with Eric Holk and Vincenzo Palazzo; lang would decide whether to delegate specific matters to wg-macros (from here)

*3: first meeting scheduled for Jan; second meeting may be required (from here)

lang-docs team

leadership-council team

*1: Complete for event (from here)

*2: Prepare one or two plenary sessions (from here)

*3: Decide on team swag; suggestions very welcome! (from here)

*4: 1 hour synchronously discussing the threat models, policy, and quorum mechanism. Note: The ask from the Leadership Council is not a detailed exploration of how we address these threat models; rather, this will be a presentation of the threat models and a policy decision that the project cares about those threat models, along with the specific explanation of why a quorum is desirable to address those threat models. (from here)

*5: Create supporting subteam + Zulip stream (from here)

*6: approve creation of new team (from here)

libs team

libs-api team

*1: 2-3 meetings expected; all involve lang (from here)

opsem team

project-stable-mir team

release team

rustdoc team

spec team

testing-devex team

types team

GoalRFCRFC rev.Stabilize.FCP
"Stabilizable" prototype for expanded const generics
Async
↳ Implementable trait aliases
↳ Return type notation
↳ Unsafe bindersStretch goal
Model coherence in a-mir-formality
Next-generation trait solver*1
Prepare const traits for stabilization*2
↳ Formalize const-traits in a-mir-formality
SVE and SME on AArch64
↳ Extending type system to support scalable vectors
↳ Investigate SME support
↳ Land nightly experiment for SVE types
Scalable Polonius support on nightly

*1: for necessary refactorings (from here)

*2: Types team needs to validate the approach (from here)

wg-macros team

GoalPolicy
Declarative (macro_rules!) macro improvements*1
↳ Design for macro metavariable constructs

*1: Discussed with Eric Holk and Vincenzo Palazzo; lang would decide whether to delegate specific matters to wg-macros (from here)

Definitions

Definitions for terms used above:

  • Author RFC and Implementation means actually writing the code, document, whatever.
  • Design meeting means holding a synchronous meeting to review a proposal and provide feedback (no decision expected).
  • RFC decisions means reviewing an RFC and deciding whether to accept.
  • Org decisions means reaching a decision on an organizational or policy matter.
  • Secondary review of an RFC means that the team is "tangentially" involved in the RFC and should be expected to briefly review.
  • Stabilizations means reviewing a stabilization and report and deciding whether to stabilize.
  • Standard reviews refers to reviews for PRs against the repository; these PRs are not expected to be unduly large or complicated.
  • Other kinds of decisions:
    • Lang team experiments are used to add nightly features that do not yet have an RFC. They are limited to trusted contributors and are used to resolve design details such that an RFC can be written.
    • Compiler Major Change Proposal (MCP) is used to propose a 'larger than average' change and get feedback from the compiler team.
    • Library API Change Proposal (ACP) describes a change to the standard library.

Frequently asked questions

What goals were not accepted?

The following goals were proposed but ultimately not accepted, either for want of resources or consensus. In some cases narrower versions of these goals were prepared.

What do the column names like "Ded. r?" mean?

Those column names refer to specific things that can be asked of teams:

AskakaDescription
"Allocate funds"Alloc fundsallocate funding
"Discussion and moral support"Good vibesapprove of this direction and be prepared for light discussion on Zulip or elsewhere
"Deploy to production"Deploydeploy code to production (e.g., on crates.io
"Standard reviews"r?review PRs (PRs are not expected to be unduly large or complicated)
"Dedicated reviewer"Ded. r?assign a specific person (or people) to review a series of PRs, appropriate for large or complex asks
"Lang-team experiment"Experimentbegin a lang-team experiment authorizing experimental impl of lang changes before an RFC is written; limited to trusted contributors
"Design meeting"Design mtg.hold a synchronous meeting to review a proposal and provide feedback (no decision expected)
"RFC decision"RFCreview an RFC and deciding whether to accept
"RFC secondary review"RFC rev.briefly review an RFC without need of a formal decision
"Org decision"Orgreach a decision on an organizational or policy matter
"MCP decision"MCPaccept a Major Change Proposal
"ACP decision"ACPaccept an API Change Proposal
"Review/revise Reference PR"Reference textassign a lang-docs team liaison to finalize edits to Rust Reference
"Stabilization decision"Stabilize.reach a decision on a stabilization proposal
"Policy decision"Policymake a decision related to team policy
"FCP decision(s)"FCPmake formal decision(s) that require 'checkboxes' and a FCP (Final Comment Period)
"Blog post approval"Blogapprove of posting about this on the main Rust blog
"Miscellaneous"Miscdo some one-off action as described in the notes