zeroclaw-labs/zeroclaw · error · anyhow::Error
plugin archive manifest name '{}' does not match registry na
Error message
plugin archive manifest name '{}' does not match registry name '{}' What it means
After extraction, verify_manifest_matches_registry compares the plugin's manifest.toml name against the name in the registry index entry; a mismatch bails. This prevents an archive from being installed under a different identity than the one the user requested (a supply-chain guard).
Source
Thrown at src/plugin_registry.rs:295
}
writer.write_all(&buffer[..read])?;
*extracted_bytes += read as u64;
}
}
fn load_plugin_manifest(plugin_dir: &Path) -> Result<PluginManifest> {
let manifest_path = plugin_dir.join("manifest.toml");
let manifest_toml = std::fs::read_to_string(&manifest_path)
.with_context(|| format!("reading {}", manifest_path.display()))?;
toml::from_str(&manifest_toml).with_context(|| format!("parsing {}", manifest_path.display()))
}
fn verify_manifest_matches_registry(
entry: &PluginRegistryEntry,
manifest: &PluginManifest,
) -> Result<()> {
if manifest.name != entry.name {
bail!(
"plugin archive manifest name '{}' does not match registry name '{}'",
manifest.name,
entry.name
);
}
if manifest.version != entry.version {
bail!(
"plugin archive manifest version '{}' does not match registry version '{}'",
manifest.version,
entry.version
);
}
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;View on GitHub (pinned to 88bb9c8533)
Solutions
- If you publish the plugin, make manifest.toml `name` identical to the registry entry's `name` field and republish both together
- If installing, report the mismatch to the registry maintainer — the entry and artifact disagree
- Re-check the registry index for an entry whose name matches the artifact you actually want, and install that one
- After fixing, refresh the index so the corrected entry is fetched
Example fix
# before
# registry entry: { "name": "webhooks", ... } ; manifest.toml: name = "http-hooks"
# after (manifest)
name = "webhooks"
version = "0.3.0"
# republish archive + update entry url/sha256 Defensive patterns
Strategy: retry
Validate before calling
// If you orchestrate installs, compare names before invoking the tool:
let manifest_name = toml::from_str::<PluginManifest>(&manifest_src)?.name;
if manifest_name != registry_entry.name {
anyhow::bail!("entry/artifact name mismatch: skip install");
} Try / catch
// On the name-mismatch bail: refresh the registry index and retry once (stale // entry). A repeat mismatch is a publisher bug — report instead of installing.
Prevention
- Publish manifest and registry entry together in one change
- Add a registry lint that opens each artifact and asserts name/version match the entry
- Prefer installing by exact name+version+sha256 pins
When it happens
Trigger: Installing plugin `zeroclaw plugin install foo` where the registry entry is named "foo" but the archive's manifest.toml declares name = "bar". Reached at the end of download_registry_plugin, before the plugin is installed.
Common situations: Forked/renamed plugin republished under a new registry name without updating the manifest; copy-pasted registry JSON entries pointing at another plugin's artifact; publisher renamed the crate but shipped the old archive URL.
Related errors
- plugin archive manifest version '{}' does not match registry
- plugin archive does not contain manifest.toml
- plugin archive contains multiple manifest.toml files
- matrix: configured channels.matrix.user-id ({configured}) do
- Cannot persist empty Telegram identity
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/d2cf61ed46dcbd99.
Report an issue: GitHub.