Nightly cargo features on stable should be no-ops, not errors

Unknown properties in Cargo.toml are ignored with a warning, except when they're nightly features. This creates an unfortunate "discontinuity" in crate compatibility for crates that adopt new Cargo features:

  • Very old cargo: ignores the new feature, and likely works fine without it.
  • Slightly old cargo: complains that it's a nightly-only feature, refuses to work.
  • Latest cargo: works fine.

For example default-run is harmless for most Cargo versions, except the couple recent ones where it totally breaks everything. I've also found there's a number of crates with edition = "2018" that are compatible with Rust 1.24, because the old Rust was too old to know it was not supposed to work :slight_smile:

Effectively, Cargo has a policy of gracefully ignoring far-future nightly features, and hard-rejecting only near-future nightly features.

To make the behavior consistent, I suggest ignoring nightly features in stable Cargo, the same as if they were any unknown property. Instead of showing an error, show a warning, and act as if the nightly property didn't exist.


Yes please!


Yes, and make the error message specific enough so the user directly understands that the feature is now in stable, compared to the feature not existing.