neoclide/coc.nvim · error

${this.def} doesn't exists in ${registry}.

Error message

${this.def} doesn't exists in ${registry}.

What it means

thrown when the npm registry response contains no entry for the requested extension version in res['versions'][this.version]. coc.nvim throws it because it cannot read the metadata (engines, dist tarball) it needs to install that specific version. It means the exact version does not exist in the registry being queried.

Source

Thrown at src/extension/installer.ts:234

        let published = Date.parse(res.time?.[this.version])
        if (!Number.isFinite(published) || published > cutoff) {
          let versions = Object.keys(res.versions ?? {}).filter(version => {
            let published = Date.parse(res.time?.[version])
            return Number.isFinite(published) && published <= cutoff
          })
          this.version = semver.maxSatisfying(versions, '*') ?? undefined
          if (!this.version) throw new Error(`${this.def} has no release older than ${releaseAge} days.`)
        }
      }
    } else if (releaseAge > 0) {
      let published = Date.parse(res.time?.[this.version])
      let cutoff = Date.now() - releaseAge * 24 * 60 * 60 * 1000
      if (!Number.isFinite(published) || published > cutoff) {
        throw new Error(`${this.def} is not older than ${releaseAge} days.`)
      }
    }
    let obj = res['versions'][this.version]
    if (!obj) throw new Error(`${this.def} doesn't exists in ${registry}.`)
    let requiredVersion = obj['engines'] && obj['engines']['coc']
    if (!requiredVersion) throw new Error(`${this.def} is not a valid coc extension, "engines" field with coc property required.`)
    extensionPath(this.root, res.name)
    return {
      'dist.tarball': obj['dist']['tarball'],
      'engines.coc': requiredVersion,
      version: obj['version'],
      name: res.name
    } as Info
  }

  public async getInfoFromUri(): Promise<Info> {
    let { url } = this
    let repository: URL
    try {
      repository = new URL(url)
    } catch (_e) {
      throw new Error(`"${url}" is not supported, coc.nvim support github.com only`)

View on GitHub (pinned to 50e974d969)

Solutions

  1. Check the exact version exists: npm view <name>@<version> version against the same registry.
  2. Remove the pinned version from the extension def so the latest version is used.
  3. Verify/fix the registry configured for coc extensions (point to registry.npmjs.org or a complete mirror).
  4. List available versions (npm view <name> versions) and pick a published one.

Example fix

// before
new Installer({ def: 'coc-json@9.9.9', root })  // version never published
// after
new Installer({ def: 'coc-json@1.8.0', root })  // a version published in the registry
Defensive patterns

Strategy: validation

Validate before calling

const versions = await npmViewVersions(name, registry)
if (!versions.includes(pinnedVersion)) throw new Error(`${name}@${pinnedVersion} not in registry`)
await installer.install()

Type guard

function hasVersion(res, v) { return typeof res === 'object' && res !== null && typeof res.versions === 'object' && res.versions !== null && v in res.versions }

Try / catch

try { await installer.install() } catch (e) { if (String(e.message).endsWith(`doesn't exists in ${registry}.`)) { /* fall back to latest version */ } else { throw e } }

Prevention

When it happens

Trigger: Calling the installer's getInfo (via info) with a def/url pinning a version (e.g. name@1.2.3) that the registry has never published, or a registry mirror that lacks the version.

Common situations: Typo in version string; asking for a version that was unpublished (npm unpublish); using a private/custom registry that doesn't mirror all versions; stale registry cache.

Related errors


AI-assisted analysis of neoclide/coc.nvim@50e974d969 (2026-08-31). Data as JSON: /api/errors/30cf42c9ed740989. Report an issue: GitHub.