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

  1. Supply your own index: re-run with `--registry <url>` pointing at a registry you control or trust
  2. If you maintain the registry, publish the index JSON at the default URL
  3. Check the project docs/status for when the public registry goes live; until then install plugins from source or local paths
  4. 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

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


AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23). Data as JSON: /api/errors/2f7ba8b12872fa2c. Report an issue: GitHub.