| Crates.io | cargo-propagate-features |
| lib.rs | cargo-propagate-features |
| version | 0.0.4 |
| created_at | 2026-01-07 22:17:58.225608+00 |
| updated_at | 2026-01-16 01:55:43.885624+00 |
| description | Cargo subcommand to automatically propagate workspace crate features to dependencies |
| homepage | https://github.com/dataroadinc/cargo-propagate-features |
| repository | https://github.com/dataroadinc/cargo-propagate-features |
| max_upload_size | |
| id | 2029125 |
| size | 168,296 |
Cargo subcommand to automatically propagate workspace crate features to their dependencies.
For any crate A with feature X depending on crate B that also has feature X, this tool ensures that crate A's feature X includes "B/X" in its feature dependencies.
This ensures that when you enable a feature on a crate, all its dependencies that have the same feature also get that feature enabled. Without this, enabling a feature might not work correctly because dependencies don't have their corresponding features enabled.
Consider a workspace with three crates:
my-app depends on my-library and my-utilsbackend, cli,
desktop, webWhen you enable the backend feature on my-app, you typically want
the backend features of my-library and my-utils to also be
enabled. This tool automatically adds those feature dependencies.
Before running the tool:
# my-app/Cargo.toml
[dependencies]
my-library = { path = "../my-library" }
my-utils = { path = "../my-utils" }
[features]
backend = [] # ❌ Doesn't enable backend features on dependencies
cli = []
desktop = []
web = []
After running the tool:
# my-app/Cargo.toml
[dependencies]
my-library = { path = "../my-library" }
my-utils = { path = "../my-utils" }
[features]
backend = ["my-library/backend", "my-utils/backend"] # ✅ Now properly propagates
cli = ["my-library/cli", "my-utils/cli"]
desktop = ["my-library/desktop", "my-utils/desktop"]
web = ["my-library/web", "my-utils/web"]
Now when you build with cargo build --features backend, the
backend features on my-library and my-utils will also be
enabled.
First install cargo-binstall if you haven't already:
cargo install cargo-binstall
Then install cargo-propagate-features:
cargo binstall cargo-propagate-features
cargo install cargo-propagate-features
From the workspace root:
cargo propagate-features [OPTIONS]
--dry-run: Show what would be changed without modifying files--features <FEATURES>: Comma-separated list of features to
propagate (default: backend,cli,desktop,web)--workspace-path <PATH>: Path to workspace root or Cargo.toml
(optional, defaults to workspace containing the manifest). When
using cargo run, you can point to a Cargo.toml file directly.--quiet: Suppress output when there are no changesThe command automatically respects Cargo's standard options when
installed and invoked via cargo:
--manifest-path <PATH>: Path to Cargo.toml (automatically handled
via cargo_metadata)--package <SPEC>: Work on a specific package (if supported)Creative Commons Attribution-ShareAlike 4.0 International License - see LICENSE file for details.