denoland/deno · warning

JSR package info not found: {}

Error message

JSR package info not found: {}

What it means

The LSP's JSR completion provider (cli/lsp/jsr.rs:417) caches package metadata; when resolver.package_info(name) comes back None it wraps the miss in "JSR package info not found: {name}". None can mean the package genuinely doesn't exist on jsr.io, or the metadata fetch failed (offline, proxy, 5xx) and the resolver returned no info. It degrades editor completions (version lists, export completions) rather than program execution.

Source

Thrown at cli/lsp/jsr.rs:417

    let file_fetcher = self.file_fetcher.clone();
    let file = {
      let file = file_fetcher.fetch_bypass_permissions(&search_url).await?;
      TextDecodedFile::decode(file)?
    };
    let names = Arc::new(parse_jsr_search_response(&file.source)?);
    self.search_cache.insert(query.to_string(), names.clone());
    Ok(names)
  }

  async fn versions(&self, name: &str) -> Result<Arc<Vec<Version>>, AnyError> {
    if let Some(versions) = self.versions_cache.get(name) {
      return Ok(versions.clone());
    }
    let info = self
      .resolver
      .package_info(name)
      .await
      .ok_or_else(|| anyhow!("JSR package info not found: {}", name))?;
    let mut versions = info.versions.keys().cloned().collect::<Vec<_>>();
    versions.sort();
    versions.reverse();
    let versions = Arc::new(versions);
    self
      .versions_cache
      .insert(name.to_string(), versions.clone());
    Ok(versions)
  }

  async fn exports(
    &self,
    nv: &PackageNv,
  ) -> Result<Arc<Vec<String>>, AnyError> {
    if let Some(exports) = self.exports_cache.get(nv) {
      return Ok(exports.clone());
    }
    let info = self

View on GitHub (pinned to 89f33cbef2)

Solutions

  1. Verify the package exists: `deno info jsr:@scope/package` or open https://jsr.io/@scope/package
  2. Fix typos in the specifier — scope and package segments must match jsr.io exactly (lowercase, hyphens)
  3. Check connectivity to jsr.io (proxy/VPN) and retry; the completion caches refill on later requests
  4. Clear a poisoned cache if `deno info` also fails offline: remove the stale entry under DENO_DIR/remote or run `deno cache --reload` on the specifier

Example fix

// before
import { chunk } from "jsr:@std/collectionss";

// after
import { chunk } from "jsr:@std/collections";
Defensive patterns

Strategy: retry

Validate before calling

// CLI check before relying on editor completions
deno info jsr:@scope/package 2>/dev/null || echo "package missing or unreachable"

Try / catch

// LSP-internal Result; user-side mitigation is verifying reachability then retrying
for (let i = 0; i < 3; i++) {
  const ok = await probe("https://jsr.io/@scope/package/meta.json");
  if (ok) break;
  await sleep(500 * 2 ** i);
}

Prevention

When it happens

Trigger: Typing an import from a nonexistent/misspelled jsr package ("jsr:@std/collectionss") and requesting completions; requesting jsr completions while offline or behind a proxy that blocks jsr.io; a just-published package whose metadata hasn't propagated yet.

Common situations: Editor autocomplete for jsr: specifiers silently missing; corporate networks filtering jsr.io; typos in scope or package names during exploratory coding; local DENO_DIR caches in a bad state after a network interruption.

Related errors


AI-assisted analysis of denoland/deno@89f33cbef2 (2026-08-16). Data as JSON: /api/errors/321fc2bf27354901. Report an issue: GitHub.