{"id":"e9e79ced831fc5ba","repo":"rust-lang/cargo","slug":"invalid-feature-in-required-features-of-targe","errorCode":null,"errorMessage":"invalid feature `{}` in required-features of target `{}`: `dep:` prefixed feature values are not allowed in required-features","messagePattern":"invalid feature `(.+?)` in required-features of target `(.+?)`: `dep:` prefixed feature values are not allowed in required-features","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/ops/cargo_compile/unit_generator.rs","lineNumber":653,"sourceCode":"            None => return Ok(()),\n            Some(resolve) => resolve,\n        };\n\n        let mut shell = self.ws.gctx().shell();\n        for feature in required_features {\n            let fv = FeatureValue::new(feature.into());\n            match &fv {\n                FeatureValue::Feature(f) => {\n                    if !summary.features().contains_key(f) {\n                        shell.warn(format!(\n                            \"invalid feature `{}` in required-features of target `{}`: \\\n                      `{}` is not present in [features] section\",\n                            fv, target_name, fv\n                        ))?;\n                    }\n                }\n                FeatureValue::Dep { .. } => {\n                    anyhow::bail!(\n                        \"invalid feature `{}` in required-features of target `{}`: \\\n                  `dep:` prefixed feature values are not allowed in required-features\",\n                        fv,\n                        target_name\n                    );\n                }\n                FeatureValue::DepFeature { weak: true, .. } => {\n                    anyhow::bail!(\n                        \"invalid feature `{}` in required-features of target `{}`: \\\n                  optional dependency with `?` is not allowed in required-features\",\n                        fv,\n                        target_name\n                    );\n                }\n                // Handling of dependent_crate/dependent_crate_feature syntax\n                FeatureValue::DepFeature {\n                    dep_name,\n                    dep_feature,","sourceCodeStart":635,"sourceCodeEnd":671,"githubUrl":"https://github.com/rust-lang/cargo/blob/0e07a155371a6ce88ae53a2c00df940280c09a67/src/ops/cargo_compile/unit_generator.rs#L635-L671","documentation":"Thrown by check_required_features (src/ops/cargo_compile/unit_generator.rs:652-659) when a target's `required-features` list contains a value with the `dep:` prefix. The `dep:` syntax is an explicit weak/strong dependency activation syntax valid only in [features], not in target required-features. Cargo rejects it because required-features must reference features or dependency names, not dep: activations.","triggerScenarios":"Writing `[[bin]] required-features = [\"dep:serde\"]` in Cargo.toml. The FeatureValue parses as FeatureValue::Dep{..} and the bail fires.","commonSituations":"Copying `dep:` syntax from a [features] table into a target's required-features. Migrating to the new weak-deps syntax without knowing required-features has its own rules. Cargo edition/feature-guide confusion.","solutions":["Replace `dep:name` in required-features with the bare dependency name `name` (or `name/feature`) — required-features already activates the optional dep when the name is listed.","Remove the entry if it is not actually needed.","Run `cargo check` to confirm the manifest parses."],"exampleFix":"# before\n[[bin]]\nname = \"mybin\"\nrequired-features = [\"dep:serde\"]\n\n# after\n[[bin]]\nname = \"mybin\"\nrequired-features = [\"serde\"]","handlingStrategy":"validation","validationCode":"// Reject `dep:` values inside any target's required-features.\nfn required_features_clean(pkg: &cargo::core::Package) -> Result<(), String> {\n    for t in pkg.targets() {\n        if let Some(rf) = t.required_features() {\n            for f in rf {\n                if f.starts_with(\"dep:\") {\n                    return Err(format!(\"target {} uses forbidden `dep:` in required-features\", t.name()));\n                }\n            }\n        }\n    }\n    Ok(())\n}","typeGuard":"fn has_no_dep_prefix(values: &[String]) -> bool {\n    values.iter().all(|v| !v.starts_with(\"dep:\"))\n}","tryCatchPattern":"// check_required_features is called inside unit generation; catch at compile.\nif let Err(e) = ops::compile(ws, &opts) {\n    if e.to_string().contains(\"dep:` prefixed feature values\") {\n        eprintln!(\"replace `dep:x` with `x` in required-features\");\n    }\n    return Err(e);\n}","preventionTips":["Remember required-features accepts feature names or `dep/feat`, never `dep:...`.","Lint manifests in CI for `dep:` inside required-features."],"tags":["cargo","manifest","features","required-features","dependencies"],"analyzedSha":"0e07a155371a6ce88ae53a2c00df940280c09a67","analyzedAt":"2026-08-06T01:46:58.334Z","schemaVersion":2}