quasarframework/quasar · warning · Error

Registry responded with ${response.status}

Error message

Registry responded with ${response.status}

What it means

update-checker in utils/update-notifier queries the npm registry (fetch with 30s timeout) and throws this error when the HTTP response status is not ok (e.g. 403, 429, 500, 502). It signals the registry was reachable but rejected or failed the request, so no 'latest' version could be determined.

Source

Thrown at utils/update-notifier/src/internal.js:153

function isDisabled() {
  return (
    'NO_UPDATE_NOTIFIER' in process.env ||
    process.env.NODE_ENV === 'test' ||
    isCI
  )
}

export async function checkForUpdate({ cacheFile, name, version }) {
  const registry = getRegistryUrl()
  const packagePath = encodeURIComponent(name)
  const url = new URL(`-/package/${packagePath}/dist-tags`, registry)
  const response = await fetch(url, {
    headers: { accept: 'application/json' },
    signal: AbortSignal.timeout(30_000)
  })

  if (!response.ok) {
    throw new Error(`Registry responded with ${response.status}`)
  }

  const { latest } = (await response.json()) ?? {}

  writeCache(cacheFile, {
    checkedAt: Date.now(),
    latest: isNewerVersion(latest, version) ? latest : void 0,
    registry: registry.href
  })
}

function startBackgroundCheck(cacheFile, name, version) {
  const child = spawn(
    process.execPath,
    [fileURLToPath(moduleUrl), backgroundCheckFlag, cacheFile, name, version],
    { detached: true, stdio: 'ignore', windowsHide: true }
  )

View on GitHub (pinned to 4841521b5f)

Solutions

  1. Retry later — this is usually transient (registry outage or rate limit); the tool writes a cache so failures back off naturally.
  2. Check the status code in the message: 429 means rate limiting (wait or authenticate), 403 suggests a proxy/firewall block.
  3. Verify registry configuration (npm config get registry) points at a reachable npm-compatible registry.

Example fix

// before: update check crashes the command
await checkForUpdate(pkg)

// after: treat update checks as best-effort
try {
  await checkForUpdate(pkg)
} catch (err) {
  console.debug('Update check skipped:', err.message)
}
Defensive patterns

Strategy: retry

Validate before calling

// Preflight: registry reachability check
const res = await fetch(registryUrl, { method: 'HEAD' }).catch(() => null)
if (res === null || !res.ok) console.warn('Registry unreachable; skipping update check')

Try / catch

try {
  await checkForUpdate(pkg)
} catch (err) {
  if (/Registry responded with \d{3}/.test(err.message)) {
    console.debug('Update check failed with HTTP status; continuing')
  } else throw err
}

Prevention

When it happens

Trigger: fetch to the registry endpoint returning a non-2xx status: rate limiting (429), blocked/proxied corporate networks returning 403, registry outage (500/502/503), or a wrong custom registry URL configured.

Common situations: CI environments rate-limited by npm registry; corporate proxies intercepting registry traffic; setting a mirror/private registry URL that doesn't implement the expected endpoint; transient npm outages.

Related errors


AI-assisted analysis of quasarframework/quasar@4841521b5f (2026-08-30). Data as JSON: /api/errors/45ddf99d80a39d49. Report an issue: GitHub.