{"id":"f4a22a574dad5e24","repo":"rust-lang/cargo","slug":"parsing-requires-zscript-f4a22a","errorCode":null,"errorMessage":"parsing `{}` requires `-Zscript`","messagePattern":"parsing `(.+?)` requires `-Zscript`","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/workspace/parser/mod.rs","lineNumber":179,"sourceCode":"    mut document: toml::Spanned<toml::de::DeTable<'_>>,\n) -> toml::Spanned<toml::de::DeTable<'static>> {\n    document.get_mut().make_owned();\n    // SAFETY: `DeTable::make_owned` ensures no borrows remain and the lifetime does not affect\n    // layout\n    unsafe {\n        std::mem::transmute::<\n            toml::Spanned<toml::de::DeTable<'_>>,\n            toml::Spanned<toml::de::DeTable<'static>>,\n        >(document)\n    }\n}\n\n#[tracing::instrument(skip_all)]\nfn read_toml_string(path: &Path, is_embedded: bool, gctx: &GlobalContext) -> CargoResult<String> {\n    let mut contents = paths::read(path).map_err(|err| ManifestError::new(err, path.into()))?;\n    if is_embedded {\n        if !gctx.cli_unstable().script {\n            anyhow::bail!(\"parsing `{}` requires `-Zscript`\", path.display());\n        }\n        contents = embedded::expand_manifest(&contents)\n            .map_err(|e| emit_frontmatter_diagnostic(e, &contents, path, gctx))?;\n    }\n    Ok(contents)\n}\n\n#[tracing::instrument(skip_all)]\nfn parse_document(contents: &str) -> Result<toml::Spanned<toml::de::DeTable<'_>>, toml::de::Error> {\n    toml::de::DeTable::parse(&contents)\n}\n\n#[tracing::instrument(skip_all)]\nfn deserialize_toml(\n    document: &toml::Spanned<toml::de::DeTable<'_>>,\n) -> Result<manifest::TomlManifest, toml::de::Error> {\n    let mut unused = BTreeSet::new();\n    let deserializer = toml::de::Deserializer::from(document.clone());","sourceCodeStart":161,"sourceCodeEnd":197,"githubUrl":"https://github.com/rust-lang/cargo/blob/0e07a155371a6ce88ae53a2c00df940280c09a67/src/workspace/parser/mod.rs#L161-L197","documentation":"Thrown by `read_toml_string` at src/workspace/parser/mod.rs:179. When the manifest path is detected as an embedded manifest (a single-file cargo script, typically a `.rs` file with a TOML frontmatter block or a leading shebang), cargo must expand it via `embedded::expand_manifest`, and that code path is gated behind the nightly-only `-Z script` feature. Without it, parsing bails.","triggerScenarios":"Running `cargo run script.rs` (or `cargo build` on a `.rs` with frontmatter) on stable, or nightly without `-Z script` enabled. `is_embedded` is true but `gctx.cli_unstable().script` is false.","commonSituations":"Trying single-file packages (`cargo-eval`-style scripts) before the feature stabilized; CI pinned to stable; documentation examples that assume the feature.","solutions":["Use a nightly toolchain and enable the feature: `cargo +nightly -Z script run script.rs`.","If the feature has stabilized on your toolchain, upgrade cargo.","Otherwise convert the script into a normal crate with a `Cargo.toml`."],"exampleFix":"# before (on stable)\ncargo run script.rs\n# after\ncargo +nightly -Z script run script.rs","handlingStrategy":"validation","validationCode":"let needs_script = path.extension().and_then(|e| e.to_str()) == Some(\"rs\")\n    || contents.starts_with(\"#!/\");\nif needs_script && !unstable.script {\n    return Err(\"enable -Z script (nightly) to parse embedded manifests\".into());\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Gate single-file scripts behind a nightly toolchain with `-Z script`.","Detect `.rs`/shebang manifests before invoking the parser.","Convert scripts to crates for stable builds."],"tags":["unstable","embedded-manifest","script"],"analyzedSha":"0e07a155371a6ce88ae53a2c00df940280c09a67","analyzedAt":"2026-08-06T01:46:58.334Z","schemaVersion":2}