There are two GN target templates which should be used for Rust projects:

The garnet/examples/rust directory has some examples of Rust packages that use these targets, as do the Rust FIDL examples.

Building with a custom toolchain

If you want to test out Fuchsia with your own custom-built versions of rustc or cargo, you can set the rustc_prefix argument to fx set, like this:

fx set x64 --release --args "rustc_prefix=\"/path/to/bin/dir\""


Fuchsia Rust targets are not built with Cargo during a normal build, and as such, do not require Cargo.toml files. However, having a Cargo.toml file for your target is useful for integration with IDEs such as Intellij and VSCode, and for using the fargo tool to build and test targets without going through a full GN build and run cycle each time.

A Cargo.toml file can be automatically generated for rustc_library and rustc_binary targets based on their .gn file definitions by running:

fx gen-cargo path/from/fuchsia/root/to/target:label

Or, if you're already in a directory with a single Rust target, fx gen-cargo alone should work too.

You must build the target via a regular Fuchsia build before running this command.

Autogenerated docs

You can generate and browse HTML documentation for your target and its dependencies by running:

fx rustdoc path/from/fuchsia/root/to/target:label --open


You can run unit tests on connected devices using fx, with the fx run-test {package name} command, assuming your package in has with_unit_tests = true.

Note that in order to use fx run-test, you can't override package_name="..." in your package or test_package declaration. This issue is tracked by BLD-338.


We don't currently have a style guide for Rust, but you should run fx rustfmt or fx format-code before submitting. We mostly use the rustfmt defaults, but have a couple custom settings.

Communication channels

Public discussion happens on the mailing list. For Googler-only channels, see go/fuchsia-rust-googlers.

Existing Fuchsia Rust libraries

Going further