neoclide/coc.nvim · error

${name} ${info.version} requires coc.nvim >= ${required}, pl

Error message

${name} ${info.version} requires coc.nvim >= ${required}, please update coc.nvim.

What it means

thrown in install() when the target extension declares an engines.coc requirement that the running coc.nvim version does not satisfy. coc.nvim checks compatibility before installing so the extension won't break at runtime.

Source

Thrown at src/extension/installer.ts:290

      'dist.tarball': `${url}/archive/${branch}.tar.gz`,
      'engines.coc': obj['engines'] ? obj['engines']['coc'] : null,
      name: obj.name,
      version: obj.version
    }
  }

  private log(msg: string, isProgress = false): void {
    this.emit('message', msg, isProgress)
  }

  public async install(): Promise<InstallResult> {
    this.log(`Using npm from: ${this.npm}`)
    let info = await this.getInfo()
    logger.info(`Fetched info of ${this.def}`, info)
    let { name, version } = info
    let required = toText(info['engines.coc']).replace(/^\^/, '>=')
    if (required && !semver.satisfies(workspace.version, required)) {
      throw new Error(`${name} ${info.version} requires coc.nvim >= ${required}, please update coc.nvim.`)
    }
    let updated = await this.doInstall(info, new Set())
    return { name, updated, version, url: this.url, folder: extensionPath(this.root, info.name) }
  }

  public async update(url?: string): Promise<string | undefined> {
    if (url) this.url = url
    let version: string | undefined
    if (this.name) {
      let folder = extensionPath(this.root, this.name)
      if (isSymbolicLink(folder)) {
        this.log(`Skipped update for symbol link`)
        return
      }
      let obj = loadJson(path.join(folder, 'package.json')) as any
      version = obj.version
    }
    this.log(`Using npm from: ${this.npm}`)

View on GitHub (pinned to 50e974d969)

Solutions

  1. Update coc.nvim to a version satisfying the requirement.
  2. Install an older extension version compatible with your coc.nvim.
  3. Check required range: npm view <name> engines to see the engines.coc value.
  4. If needed temporarily and you know it works, pick a version whose engines.coc matches your coc.nvim.

Example fix

// before (old coc.nvim + new extension)
:CocUpdate  // fails: requires coc.nvim >= 0.0.82
// after
:update the coc.nvim plugin, then :CocInstall coc-json
Defensive patterns

Strategy: try-catch

Validate before calling

const info = await installer.getInfo()
const required = (info['engines.coc'] || '').replace(/^\^/, '>=')
if (required && !semver.satisfies(cocVersion, required)) await upgradeCocNvim()

Try / catch

try { await installer.install() } catch (e) { if (e.message.includes('requires coc.nvim >=')) { await updateCocNvimThenRetry() } else { throw e } }

Prevention

When it happens

Trigger: Installing an extension whose engines.coc is >= a version newer than the installed coc.nvim, while semver.satisfies(workspace.version, required) is false.

Common situations: Very new extension releases requiring a coc.nvim feature branch; users on distro-packaged (old) coc.nvim; pinned old coc.nvim in lockfiles.

Related errors


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