neoclide/coc.nvim · error

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

Error message

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

What it means

thrown in update() when the available extension update requires a coc.nvim version (engines.coc) that the running coc.nvim doesn't satisfy. Same compatibility gate as install, applied when upgrading an existing extension.

Source

Thrown at src/extension/installer.ts:316

    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}`)
    let info = await this.getInfo()
    if (version && info.version && semver.gte(version, info.version)) {
      this.log(`Current version ${version} is up to date.`)
      return
    }
    let required = info['engines.coc'] ? info['engines.coc'].replace(/^\^/, '>=') : ''
    if (required && !semver.satisfies(workspace.version, required)) {
      throw new Error(`${info.version} requires coc.nvim ${required}, please update coc.nvim.`)
    }
    let succeed = await this.doInstall(info, new Set())
    if (!succeed) return
    let jsonFile = path.join(this.root, info.name, 'package.json')
    this.log(`Updated to v${info.version}`)
    return path.dirname(jsonFile)
  }

  public getInstallArguments(exePath: string, url: string | undefined): { env: string, args: string[] } {
    let env = 'production'
    let args = ['install', '--ignore-scripts']
    if (url && url.startsWith('https://github.com')) {
      args = ['install']
      env = 'development'
    } else {
      if (isNpmCommand(exePath)) {
        args.push('--no-package-lock')
        args.push('--omit=dev')

View on GitHub (pinned to 50e974d969)

Solutions

  1. Update coc.nvim itself first, then retry the extension update.
  2. Skip this update and stay on the current extension version until coc.nvim is upgraded.
  3. Pin/downgrade the extension to a version compatible with your coc.nvim.
  4. Inspect the requirement: npm view <name>@latest engines.

Example fix

// before
:CocUpdate  // 'coc-tsserver 1.9.0 requires coc.nvim >=0.0.90'
// after
first :PlugUpdate coc.nvim (or your plugin manager), restart, then :CocUpdate
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)) return /* skip update */

Try / catch

try { await installer.update() } catch (e) { if (e.message.includes('requires coc.nvim')) { /* keep current version, prompt coc.nvim upgrade */ } else { throw e } }

Prevention

When it happens

Trigger: Running extension update when the newest published version's engines.coc range (after ^→>= normalization) fails semver.satisfies against workspace.version.

Common situations: Extension released a breaking update requiring newer coc.nvim API; user on an old coc.nvim that had previously installed the extension fine.

Related errors


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