zed-industries/zed · error
Invalid extension.toml for extension {extension_name}: {err}
Error message
Invalid extension.toml for extension {extension_name}:
{err} What it means
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.
Source
Thrown at crates/extension/src/extension_manifest.rs:402
/// Path to an SVG icon file relative to the extension root (e.g., "icons/provider.svg").
#[serde(default)]
pub icon: Option<String>,
}
impl ExtensionManifest {
pub async fn load(fs: Arc<dyn Fs>, extension_dir: &Path) -> Result<Self> {
let extension_name = extension_dir
.file_name()
.and_then(OsStr::to_str)
.context("invalid extension name")?;
let extension_manifest_path = extension_dir.join("extension.toml");
if fs.is_file(&extension_manifest_path).await {
let manifest_content = fs.load(&extension_manifest_path).await.with_context(|| {
format!("loading {extension_name} extension.toml, {extension_manifest_path:?}")
})?;
toml::from_str(&manifest_content).map_err(|err| {
anyhow!("Invalid extension.toml for extension {extension_name}:\n{err}")
})
} else if let extension_manifest_path = extension_manifest_path.with_extension("json")
&& fs.is_file(&extension_manifest_path).await
{
let manifest_content = fs.load(&extension_manifest_path).await.with_context(|| {
format!("loading {extension_name} extension.json, {extension_manifest_path:?}")
})?;
serde_json::from_str::<OldExtensionManifest>(&manifest_content)
.with_context(|| format!("invalid extension.json for extension {extension_name}"))
.map(|manifest_json| manifest_from_old_manifest(manifest_json, extension_name))
} else {
anyhow::bail!("No extension manifest found for extension {extension_name}")
}
}
}
fn manifest_from_old_manifest(View on GitHub (pinned to f4178619ac)
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
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at crates/extension/src/extension_manifest.rs:402 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of zed-industries/zed@f4178619ac (2026-08-20).
Data as JSON: /api/errors/6fa72d5f2cbc11b4.
Report an issue: GitHub.