Status: Accepting goal proposals We are in the process of assembling the goal slate.

Summary

This is a draft for the eventual RFC proposing the 2025H1 goals.

Motivation

The 2025H1 goal slate consists of 40 project goals, of which we have selected (TBD) 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 owner 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 owner 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. For this first round of goals, we want a small set that can be completed without undue stress. As the Rust open source org continues to grow, the set of goals can grow in size.

Guide-level explanation

Flagship goals

The flagship goals proposed for this roadmap are as follows:

(TBD)

Why these particular flagship goals?

(TBD--typically one paragraph per goal)

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 contactTeam
"Stabilizable" prototype for expanded const genericsBoxylang, types
Bring the Async Rust experience closer to parity with sync RustTyler Mandrycompiler, lang, libs-api, types
Continue resolving cargo-semver-checks blockers for merging into cargoPredrag Gruevskicargo, rustdoc
Declarative (macro_rules!) macro improvementsJosh Triplettlang, wg-macros
Evaluate approaches for seamless interop between C++ and RustTyler Mandrycompiler, lang, libs-api
Experiment with ergonomic ref-countingSantiago Pastorinolang
Expose experimental LLVM features for GPU offloadingManuel Drehwaldcompiler, lang
Extend pubgrub to match cargo's dependency resolutionJacob Finkelmancargo
Externally Implementable ItemsMara Boscompiler, lang
Field ProjectionsBenno Lossincompiler, lang
Finish the libtest json output experimentEd Pagetesting-devex
Implement Open API Namespace SupportHelp Wantedcargo, compiler
Implement restrictions, prepare for stabilizationJacob Prattcompiler, lang
Improve state machine codegenFolkert de Vriescompiler, lang
Instrument the Rust standard library with safety contractsCelina G. Valcompiler, libs
Integration of the FLS into the Rust ProjectJoel Marceyrelease, spec
Making compiletest more maintainable: reworking directive handlingJieyou Xubootstrap, compiler, rustdoc
Metrics InitiativeJane Lusby
Model coherence in a-mir-formalityNiko Matsakistypes
Next-generation trait solverlcnrtypes
Nightly support for ergonomic SIMD multiversioningLuca Versarilang
Null and enum-discriminant runtime checks in debug buildsBastian Kerstingcompiler, lang, opsem
Optimizing Clippy & lintingAlejandra Gonzálezclippy
Promoting Parallel Front EndSparrow Licompiler
Prototype a new set of Cargo "plumbing" commandsHelp Wantedcargo
Publish first version of StableMIR on crates.ioCelina G. Valcompiler, project-stable-mir
Research: How to achieve safety when linking separately compiled codeMara Boscompiler, lang
Run the 2025H1 project goal programNiko Matsakisleadership-council
Rust All-Hands 2025!Mara Bosleadership-council
Rust Specification TestingConnor Hormanbootstrap, compiler, lang, spec
Rust Vision DocumentNiko Matsakisleadership-council
SVE and SME on AArch64David Woodcompiler, lang, types
Scalable Polonius support on nightlyRémy Rakictypes
Secure quorum-based cryptographic verification and mirroring for crates.io@walterhpearcecargo, crates-io, infra, leadership-council
Stabilize public/private dependenciesHelp Wantedcargo, compiler
Stabilize tooling needed by Rust for LinuxNiko Matsakiscargo, clippy, compiler, rustdoc
Unsafe FieldsJack Wrenncompiler, lang
Use annotate-snippets for rustc diagnostic outputScott Schafercompiler
build-stdDavid Woodcargo
rustc-perf improvementsDavid Woodcompiler, infra

Reference-level explanation

The following table highlights the asks from each affected team. The "owner" in the column is the person expecting to do the design/implementation work that the team will be approving.

bootstrap team

GoalPoint of contactNotes
Discussion and moral support
Making compiletest more maintainable: reworking directive handlingJieyou Xuincluding consultations for desired test behaviors and testing infra consumers
RFC decision
Rust Specification TestingConnor Horman
Standard reviews
Making compiletest more maintainable: reworking directive handlingJieyou XuProbably mostly bootstrap or whoever is more interested in reviewing [compiletest] changes

cargo team

clippy team

GoalPoint of contactNotes
Stabilization decision
Clippy configurationNiko Matsakis
Standard reviews
Optimizing Clippy & lintingAlejandra González

compiler team

GoalPoint of contactNotes
Dedicated reviewer
Production use of annotate-snippetsScott SchaferEsteban Kuber will be the reviewer
Design meeting
Experimental Contract attributesCelina G. Val
Evaluate approaches for seamless interop between C++ and RustTyler Mandry2-3 meetings expected; all involve lang
Discussion and moral support
Improve state machine codegenFolkert de Vries
Rust-for-LinuxNiko Matsakis
Stabilize public/private dependenciesEd Page
Making compiletest more maintainable: reworking directive handlingJieyou Xuincluding consultations for desired test behaviors and testing infra consumers
Evaluate approaches for seamless interop between C++ and RustTyler Mandry
Implement Open API Namespace SupportEd Page
Promoting Parallel Front EndSparrow Li
Publish first version of StableMIR on crates.ioCelina G. Val
SVE and SME on AArch64David Wood
Investigate SME supportDavid Wood
Policy decision
rustc-perf improvementsDavid WoodUpdate performance regression policy
RFC decision
ABI-modifying compiler flagsNiko MatsakisRFC #3716, currently in PFCP
Rust Specification TestingConnor Horman
Stabilization decision
ABI-modifying compiler flagsNiko MatsakisFor each of the relevant compiler flags
Extract dependency information, configure no-std externallyNiko Matsakis
Standard reviews
Unsafe FieldsJack Wrenn
Field ProjectionsBenno Lossin
Improve state machine codegenFolkert de Vries
Experimental Contract attributesCelina G. Val
ABI-modifying compiler flagsNiko Matsakis
Extract dependency information, configure no-std externallyNiko Matsakis
Return type notationTyler Mandry
Implementable trait aliasesTyler Mandry
Making compiletest more maintainable: reworking directive handlingJieyou XuProbably mostly bootstrap or whoever is more interested in reviewing [compiletest] changes
Implement restrictions, prepare for stabilizationJacob Pratt
Research: How to achieve safety when linking separately compiled codeMara Bos
Externally Implementable ItemsMara Bos
Null and enum-discriminant runtime checks in debug buildsBastian Kersting
Standard reviewsScott Schafer
Land nightly experiment for SVE typesDavid Wood
Extending type system to support scalable vectorsDavid Wood
Expose experimental LLVM features for GPU offloadingManuel Drehwald

crates-io team

infra team

GoalPoint of contactNotes
Deploy to production
rustc-perf improvementsDavid Woodrustc-perf improvements, testing infrastructure
Quorum-based cryptographic infrastructure (RFC 3724)@walterhpearce
Discussion and moral support
rustc-perf improvementsDavid Wood
RFC decision
Quorum-based cryptographic infrastructure (RFC 3724)@walterhpearce
Standard reviews
rustc-perf improvementsDavid Wood

lang team

GoalPoint of contactNotes
Design meeting
Unsafe FieldsJack Wrenn
Field ProjectionsBenno Lossin
Experiment with ergonomic ref-countingSantiago Pastorino
Safe pin projectionTyler MandryStretch goal
Trait for generators (sync)Tyler Mandry2 meetings expected
Trait for async iterationTyler Mandry
Evaluate approaches for seamless interop between C++ and RustTyler Mandry2-3 meetings expected; all involve lang
Null and enum-discriminant runtime checks in debug buildsBastian Kersting
Design and iteration for macro fragment fieldsJosh Triplett
Nightly support for ergonomic SIMD multiversioningLuca Versari
Discussion and moral support
Unsafe FieldsJack Wrenn[Zulip]
"Stabilizable" prototype for expanded const genericsBoxy
Evaluate approaches for seamless interop between C++ and RustTyler Mandry
Implement restrictions, prepare for stabilizationJacob Pratt
Research: How to achieve safety when linking separately compiled codeMara Bos
Null and enum-discriminant runtime checks in debug buildsBastian Kersting
Design for macro metavariable constructsJosh Triplett
SVE and SME on AArch64David Wood
Investigate SME supportDavid Wood
Lang-team experiment
Improve state machine codegenFolkert de Vries
Safe pin projectionTyler Mandry
Research: How to achieve safety when linking separately compiled codeMara BosNiko Matsakis as liaison
Externally Implementable ItemsMara BosAlready approved
Null and enum-discriminant runtime checks in debug buildsBastian Kersting
Nightly support for ergonomic SIMD multiversioningLuca Versari
Expose experimental LLVM features for GPU offloadingManuel Drehwald(approved)
Policy decision
Declarative (macro_rules!) macro improvementsJosh TriplettDiscussed with Eric Holk and Vincenzo Palazzo; lang would decide whether to delegate specific matters to wg-macros
Prioritized nominations
Implement restrictions, prepare for stabilizationJacob Prattfor unresolved questions, including syntax
macro_rules! attributesJosh Triplett
macro_rules! derivesJosh Triplett
RFC decision
Unsafe FieldsJack Wrenn
Field ProjectionsBenno Lossin
Experiment with ergonomic ref-countingSantiago Pastorino
Return type notationTyler MandryComplete
Unsafe bindersTyler MandryStretch goal
Implementable trait aliasesTyler Mandry
Pin reborrowingTyler Mandry
Trait for generators (sync)Tyler Mandry
Rust Specification TestingConnor Horman
macro_rules! attributesJosh Triplett
macro_rules! derivesJosh Triplett
Design and iteration for macro fragment fieldsJosh Triplett
Nightly support for ergonomic SIMD multiversioningLuca Versari
Land nightly experiment for SVE typesDavid Wood
Extending type system to support scalable vectorsDavid Wood
Stabilization decision
Return type notationTyler Mandry
Implement restrictions, prepare for stabilizationJacob Pratt
macro_rules! attributesJosh Triplett
macro_rules! derivesJosh Triplett
Design and iteration for macro fragment fieldsJosh Triplett

leadership-council team

GoalPoint of contactNotes
Allocate funds
Rust All-Hands 2025!Mara BosComplete for event
Miscellaneous
Rust All-Hands 2025!Mara BosPrepare one or two plenary sessions
Team swagMara BosDecide on team swag; suggestions very welcome!
Rust Vision DocumentNiko MatsakisCreate supporting subteam + Zulip stream
Quorum-based cryptographic infrastructure (RFC 3724)@walterhpearceSelect root quorum
Org decision
Run the 2025H1 project goal programNiko Matsakisapprove creation of new team

libs team

GoalPoint of contactNotes
Discussion and moral support
Instrument the Rust standard library with safety contractsCelina G. Val
Standard reviews
Standard Library ContractsCelina G. Val

libs-api team

opsem team

project-stable-mir team

GoalPoint of contactNotes
Standard reviews
Publish first version of StableMIR on crates.ioCelina G. Val

release team

GoalPoint of contactNotes
Discussion and moral support
Integrate FLS into release processJoel MarceyFebrurary 2025
Standard reviews
Integrate FLS into release processJoel Marcey

rustdoc team

spec team

GoalPoint of contactNotes
Miscellaneous
Integration of the FLS into the Rust ProjectJoel MarceyTake ownership of the FLS (prior to, or shortly into January 2025).
RFC decision
Rust Specification TestingConnor Horman
Integrate FLS into T-spec processesJoel MarceyEnd of March 2025

testing-devex team

GoalPoint of contactNotes
Discussion and moral support
Finish the libtest json output experimentEd Page

types team

wg-macros team

GoalPoint of contactNotes
Discussion and moral support
Design for macro metavariable constructsJosh Triplett
Policy decision
Declarative (macro_rules!) macro improvementsJosh TriplettDiscussed with Eric Holk and Vincenzo Palazzo; lang would decide whether to delegate specific matters to wg-macros

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 not accepted:

GoalPoint of contactProgress