zeroclaw-labs/zeroclaw · error · anyhow::Error
the public plugin registry is not populated yet; use --regis
Error message
the public plugin registry is not populated yet; use --registry <url> to point at a custom registry
What it means
The default public plugin registry URL returned HTTP 404, which the code special-cases: it means the official registry index has not been published/populated yet. fetch_registry_index tells you to supply a custom registry URL instead of implying a client bug.
Source
Thrown at src/plugin_registry.rs:65
path.exists()
|| source.starts_with('.')
|| source.starts_with('~')
|| source.contains('/')
|| source.contains('\\')
}
pub(crate) fn looks_like_url(source: &str) -> bool {
source.contains("://")
}
pub(crate) async fn fetch_registry_index(registry_url: &str) -> Result<PluginRegistryIndex> {
let response = reqwest::get(registry_url)
.await
.with_context(|| format!("fetching plugin registry {registry_url}"))?;
let status = response.status();
if !status.is_success() {
if status == reqwest::StatusCode::NOT_FOUND && registry_url == DEFAULT_REGISTRY_URL {
bail!(
"the public plugin registry is not populated yet; use --registry <url> to point at a custom registry"
);
}
bail!("plugin registry returned HTTP {status} for {registry_url}");
}
response
.json::<PluginRegistryIndex>()
.await
.context("parsing plugin registry JSON")
}
pub(crate) async fn download_registry_plugin(
registry_url: &str,
source: &str,
cache_data_dir: Option<&Path>,
) -> Result<DownloadedPlugin> {
let index = fetch_registry_index(registry_url).await?;
if let Some(data_dir) = cache_data_dir {View on GitHub (pinned to 88bb9c8533)
Solutions
- Supply your own index: re-run with `--registry <url>` pointing at a registry you control or trust
- If you maintain the registry, publish the index JSON at the default URL
- Check the project docs/status for when the public registry goes live; until then install plugins from source or local paths
- Verify you are not behind a proxy rewriting the URL to a 404 page
Example fix
# before zeroclaw plugin install some-plugin # default registry 404s # after zeroclaw plugin install some-plugin --registry https://my-host/zeroclaw-registry/index.json
Defensive patterns
Strategy: fallback
Validate before calling
// Pre-flight the default registry before install:
let resp = reqwest::head(DEFAULT_REGISTRY_URL).await?;
if resp.status() == reqwest::StatusCode::NOT_FOUND {
// fall back to your mirror/custom registry instead of invoking the install Try / catch
// Match the 'public plugin registry is not populated' message and retry the // install with --registry <custom-url>; any other message should propagate.
Prevention
- Pin a custom --registry in environments you control
- Track the project's registry status before relying on the default URL
- Keep local/plugin-path installs as an offline fallback
When it happens
Trigger: Calling plugin install from the registry (download_registry_plugin -> fetch_registry_index) with the built-in DEFAULT_REGISTRY_URL while that URL serves 404. A 404 from a custom --registry URL does NOT hit this branch — it falls through to the generic HTTP status error (error 1407).
Common situations: Using registry plugin installs before the project has published its public index; pointing at the default URL in an offline/forked environment where the index was never uploaded; CDN/mirror misconfigured to 404 the index path.
Related errors
- plugin registry returned HTTP {status} for {registry_url}
- Git clone failed: {stderr}
- plugin archive returned HTTP {status} for {url}
- plugin archive does not contain manifest.toml
- channel does not support room creation
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/2f7ba8b12872fa2c.
Report an issue: GitHub.