{"record":{"id":"6fa72d5f2cbc11b4","repo":"zed-industries/zed","slug":"invalid-extension-toml-for-extension-extension-na","errorCode":null,"errorMessage":"Invalid extension.toml for extension {extension_name}:\n{err}","messagePattern":"Invalid extension\\.toml for extension (.+?):\n(.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/extension/src/extension_manifest.rs","lineNumber":402,"sourceCode":"    /// Path to an SVG icon file relative to the extension root (e.g., \"icons/provider.svg\").\n    #[serde(default)]\n    pub icon: Option<String>,\n}\n\nimpl ExtensionManifest {\n    pub async fn load(fs: Arc<dyn Fs>, extension_dir: &Path) -> Result<Self> {\n        let extension_name = extension_dir\n            .file_name()\n            .and_then(OsStr::to_str)\n            .context(\"invalid extension name\")?;\n\n        let extension_manifest_path = extension_dir.join(\"extension.toml\");\n        if fs.is_file(&extension_manifest_path).await {\n            let manifest_content = fs.load(&extension_manifest_path).await.with_context(|| {\n                format!(\"loading {extension_name} extension.toml, {extension_manifest_path:?}\")\n            })?;\n            toml::from_str(&manifest_content).map_err(|err| {\n                anyhow!(\"Invalid extension.toml for extension {extension_name}:\\n{err}\")\n            })\n        } else if let extension_manifest_path = extension_manifest_path.with_extension(\"json\")\n            && fs.is_file(&extension_manifest_path).await\n        {\n            let manifest_content = fs.load(&extension_manifest_path).await.with_context(|| {\n                format!(\"loading {extension_name} extension.json, {extension_manifest_path:?}\")\n            })?;\n\n            serde_json::from_str::<OldExtensionManifest>(&manifest_content)\n                .with_context(|| format!(\"invalid extension.json for extension {extension_name}\"))\n                .map(|manifest_json| manifest_from_old_manifest(manifest_json, extension_name))\n        } else {\n            anyhow::bail!(\"No extension manifest found for extension {extension_name}\")\n        }\n    }\n}\n\nfn manifest_from_old_manifest(","sourceCodeStart":384,"sourceCodeEnd":420,"githubUrl":"https://github.com/zed-industries/zed/blob/f4178619acd0d47ea1f76a2025c42962c6d6638c/crates/extension/src/extension_manifest.rs#L384-L420","documentation":"ExtensionManifest::load failed to deserialize the extension's extension.toml: the TOML parsed but did not match the manifest schema (wrong field types, unknown required fields, invalid values). The error appends the serde/TOML error detail ({err}) and names the offending extension directory.","triggerScenarios":"Thrown at crates/extension/src/extension_manifest.rs:402 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the highlighted field in extension.toml per the error detail — commonly a wrong type or deprecated key","Validate against the current manifest schema/docs for the extension API version being targeted","Run the extension validator (extension_cli) locally to catch schema errors before publishing"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"f4178619acd0d47ea1f76a2025c42962c6d6638c","analyzedAt":"2026-08-20T19:29:52.058Z","contentChangedAt":"2026-08-20T19:29:52.058Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}