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 = selfView on GitHub (pinned to 89f33cbef2)
Solutions
- Verify the package exists: `deno info jsr:@scope/package` or open https://jsr.io/@scope/package
- Fix typos in the specifier — scope and package segments must match jsr.io exactly (lowercase, hyphens)
- Check connectivity to jsr.io (proxy/VPN) and retry; the completion caches refill on later requests
- 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
- Keep jsr.io reachable from CI and dev machines (check proxy rules for *.jsr.io)
- Verify specifier spelling against jsr.io before assuming an LSP bug
- Remember these errors only affect autocomplete — the CLI resolves jsr packages independently
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
- JSR package version info not found: {}
- BenchContext::start() has already been invoked
- fetch failed
- Invalid port: '${maybePort}'
- Invalid port: ${maybePort}
AI-assisted analysis of denoland/deno@89f33cbef2 (2026-08-16).
Data as JSON: /api/errors/321fc2bf27354901.
Report an issue: GitHub.