|Feb 6, 2024
|Jan 2, 2024
|Dec 8, 2023
|Dec 6, 2023
#108 in Cargo plugins
170 downloads per month
cargo-ft (cargo filter target) is a cargo extension for specifying supported targets for a crate.
When your workspace grows, you can have crates targeting different platforms. For example, you can have a crate
for desktop platforms (Linux, Windows and MacOS), a crate for Android and a crate for WASM. When you run
cargo check/clippy in your CI, you must manually include/exclude some crates when checking for Linux, for Android
and for WASM. You also need to update the inclusion/exclusion list of crates when adding or removing crates in
This cargo extension allows you to declare the supported targets directly in the
Cargo.toml so they can be
skipped during build, or error early when asking to build the crate explicitly. Using the previously mentioned
workspace with 3 crates, executing
cargo ft check --target x86_64-unknown-linux-gnu will only check the
crate while executing
cargo ft check --target wasm32-unknown-unknown will only check the
Use cargo to install cargo-ft.
cargo install --locked cargo-ft
By default, if the metadata is missing or empty, the tool assumes the crate supports all targets.
If you want to control the supported targets, start by declaring the supported targets of your crates in
Cargo.toml like this :
targets = ["wasm32-unknown-unknown"]
Then, prefix your build, check, clippy or run command, or any command where you can specify a
to filter unsupported targets.
Some examples :
# Run cargo build on crates supporting the host target
cargo ft build # Instead of cargo build
# Run cargo clippy on crates supporting wasm32
cargo ft clippy --workspace --all-targets --all-features --target wasm32-unknown-unknown -- -D warnings # Instead of cargo clippy ...
This tool was created in response to a need we encountered with multi-targets workspace with lots of binaries. The following issues shows us we are not alone, even if the needs are probably not exactly the same :
- Allow specifying a set of supported target platforms in Cargo.toml
- Be able to specify which targets are valid in a workspace
- Allow workspaces/crates to limit support to an explicit set of targets
All those issues mention the need to slim down the
Cargo.lock with only target relevant dependencies. It is not done
in this extension because either you only use
cargo-ft for everything, or
cargo-ft will fight every time
Cargo.lock. This feature is probably only doable directly in
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
Please make sure to use conventional commits
This project is licensed under the Apache-2.0 license.