native_toolchain_rust
Rust support for Dart's build hooks. Automatically builds and bundles your Rust code with your Dart code!
Rust support for Dart’s Native Assets
Dependency list 2 items
^8.9.0^11.0.0English project snapshot. Visit GitHub for the latest content.
native_toolchain_rust 🦀Build Status Github Stars MIT License
Rust support for Dart's build hooks.
assetName,
and the rest is auto-magically figured out.
(But you can still tweak the functionality as much as you need to!)flutter pub add native_toolchain_rust hooks for Flutter or dart pub add native_toolchain_rust hooks for Dart-onlynative_toolchain_rust will look (by default) for native/ or rust/ (customizable)
in your Dart package's root.
If you haven't already, create a Cargo.toml and rust-toolchain.toml in your chosen Rust directory;
keep reading for what these two files must contain
(but don't worry if you forget, you'll get a helpful error message).
hook/build.dartimport 'package:hooks/hooks.dart';
import 'package:native_toolchain_rust/native_toolchain_rust.dart';
void main(List<String> args) async {
await build(args, (input, output) async {
await RustBuilder(
assetName: 'src/my_ffi_bindings.g.dart',
// ...maybe enable some Cargo features or something in here too
).run(input: input, output: output);
});
}
Cargo.tomlKeep at least the following in your Cargo.toml.
[package]
name = "my-crate-name" # pick a name, doesn't matter
[lib]
crate-type = ["staticlib", "cdylib"] # THESE ARE IMPORTANT!
rust-toolchain.tomlKeep at least the following in your rust-toolchain.toml.
[toolchain]
# WARNING: *do not* use `stable`, `beta`, or `nightly` (alone) for the channel!
# You must specify a version number/date in order to ensure reproducible builds.
channel = "1.90.0" # or newer. another example: `nightly-2025-01-01`
# The targets you want to support; these are the default:
targets = [
# Android
"armv7-linux-androideabi",
"aarch64-linux-android",
"x86_64-linux-android",
# iOS (device + simulator)
"aarch64-apple-ios",
"aarch64-apple-ios-sim",
"x86_64-apple-ios",
# Windows
"aarch64-pc-windows-msvc",
"x86_64-pc-windows-msvc",
# Linux
"aarch64-unknown-linux-gnu",
"x86_64-unknown-linux-gnu",
# macOS
"aarch64-apple-darwin",
"x86_64-apple-darwin",
]