Home

Awesome

Embedded devices Working Group

<img src="assets/logo/ewg-logo-blue-white-on-transparent-256x256.png" align="right" width="256">

Coordination repository of the embedded devices Working Group (WG)

This repository issue tracker is used by the embedded WG to coordinate efforts towards making Rust a great choice for embedded development.

Want to get started with embedded development with Rust? Check out our embedded Rust book and the rest of our bookshelf.

Want to stay up-to-date with community progress? Check out our newsletter.

Join the discussion on Matrix! #rust-embedded:matrix.org

Vision

What is it that we really want? At a broad level:

What we do

At a high level we have two main tasks:

We work with the community to improve the embedded ecosystem.

And, we serve as a bridge between the Rust teams and the embedded community.

How you can help

Everyone can contribute to the embedded WG efforts! There are several ways to help out:

Organization

The WG is composed of several teams whose functions are defined in RFC #136. The embedded WG develops and maintains a large set of projects under the rust-embedded organization. This section lists all the teams and all the projects owned by the WG.

The core team

The functions of the core team are:

Members

The Cortex-A team

The Cortex-A team develops and maintains the core of the Cortex-A crate ecosystem.

Members

Projects

Projects maintained by this team.

The Cortex-M team

The Cortex-M team develops and maintains the core of the Cortex-M crate ecosystem.

Members

Projects

Projects maintained by this team.

The Cortex-R team

The Cortex-R team develops and maintains the core of the Cortex-R crate ecosystem.

Members

This team is currently empty! Please get in touch via an issue or the Matrix chat if you are interested in helping to maintain the Cortex-R crates.

Projects

The embedded Linux team

The embedded Linux team develops and maintains the core of the embedded Linux crate ecosystem.

Members

Projects

Projects maintained by the embedded Linux team

The HAL team

The HAL team develops and maintains crates containing shared traits and related code that enables the development of hardware abstraction layers and drivers which can interoperate across all embedded Rust devices on all architectures.

Members

Projects

Projects maintained by the HAL team.

The infrastructure team

The infrastructure team manages our domains, DNS records, e-mail aliases, etc.

Members

Projects

Projects maintained by this team

The libs team

The libs team manages library code that is not architecture-specific.

Members

Projects

Projects maintained by this team

The MSP430 team

The MS430 team develops and maintains the core of the MSP430 crate ecosystem.

Members

Projects

Projects maintained by this team

The RISC-V team

The RISC-V team develops and maintains the core of the RISC-V crate ecosystem.

Members

Projects

Projects maintained by this team

The resources team

The resources team develops, maintains and curates documentation, books, our social media accounts and websites, and similar resources on embedded Rust.

Members

Projects

Projects maintained by the resources team

The tools team

The tools team maintains and develops software for embedded development which typically runs on your development machine rather than the embedded targets themselves.

Members

Projects

Projects maintained by the tools team

The triage team

The triage team is charge of keeping PR queues moving; they ensure no PR is left unattended.

Members

Hibernating and Alumni

The following alumni have put themselves into the hibernation state, due to being absent or busy for an extended amount of time. See ops/hibernating.md.

Contact

Each team can be privately contacted via the following e-mail addresses:

<!-- - msp430@teams.rust-embedded.org -->

You can usually find the members of the embedded WG on the Rust Embedded Matrix room (#rust-embedded:matrix.org).

Our Matrix room is logged by on the bridged IRC channel, and you can find the logs at: https://libera.irclog.whitequark.org/rust-embedded/

Other projects

These are other projects you may be interested in but that (currently) are not owned by the WG.

Ongoing community efforts

Device specific communities

Several device specific communities exist that are not part of the working group. These communities maintain crates for peripheral access, hardware abstraction, examples, and more that are specific to a particular family of devices. The list below is not exhaustive and will be updated as device support increases.

embedded-hal

embedded-hal is a project that aims to build a standard set of traits (interfaces) for I/O functionality common in embedded devices: Serial, I2C, etc. with the goal of serving as a base for building reusable driver crates, crates to interface with external components like sensors.

There are plenty of traits that still need to be designed, in particular ones that involve async I/O. Join the discussion and help us design the missing traits so that they'll fulfill your needs.

The weekly driver initiative

To put the embedded-hal to test and to expand the embedded crates.io ecosystem we are running the weekly driver initiative. The goal is to release a new no_std, generic, embedded-hal driver crate every one or two weeks.

There's lots of cool devices that would be great to have drivers for. Join the initiative and help us grow the embedded crates.io ecosystem!

Awesome embedded Rust

The community is building a curated list of crates useful for embedded development. In this list you'll find driver crates, board support crates and general purpose no-std crates. Help us improve this list by adding your crate via PR or by tackling any of our help wanted issues.

Embedded category in the user forum

As an experiment the Rust lang user forum has gained a new embedded category.

This is meant as a friendly exchange for anyone interested in embedded topics with Rust.

So if you want to discuss ideas, problems or solutions please feel free to chime in on existing topics or create a new one!

RFCs

When the team deems it necessary the RFC process may be used to make decisions or to design processes, user interfaces, APIs, etc.

Learn more about the Rust's RFC process (which is the same as our own) here.

To create an RFC, simply: