{"record":{"id":"95cb117acb3450f0","repo":"neoclide/coc.nvim","slug":"name-info-version-requires-coc-nvim-req","errorCode":null,"errorMessage":"${name} ${info.version} requires coc.nvim >= ${required}, please update coc.nvim.","messagePattern":"(.+?) (.+?) requires coc\\.nvim >= (.+?), please update coc\\.nvim\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/extension/installer.ts","lineNumber":290,"sourceCode":"      'dist.tarball': `${url}/archive/${branch}.tar.gz`,\n      'engines.coc': obj['engines'] ? obj['engines']['coc'] : null,\n      name: obj.name,\n      version: obj.version\n    }\n  }\n\n  private log(msg: string, isProgress = false): void {\n    this.emit('message', msg, isProgress)\n  }\n\n  public async install(): Promise<InstallResult> {\n    this.log(`Using npm from: ${this.npm}`)\n    let info = await this.getInfo()\n    logger.info(`Fetched info of ${this.def}`, info)\n    let { name, version } = info\n    let required = toText(info['engines.coc']).replace(/^\\^/, '>=')\n    if (required && !semver.satisfies(workspace.version, required)) {\n      throw new Error(`${name} ${info.version} requires coc.nvim >= ${required}, please update coc.nvim.`)\n    }\n    let updated = await this.doInstall(info, new Set())\n    return { name, updated, version, url: this.url, folder: extensionPath(this.root, info.name) }\n  }\n\n  public async update(url?: string): Promise<string | undefined> {\n    if (url) this.url = url\n    let version: string | undefined\n    if (this.name) {\n      let folder = extensionPath(this.root, this.name)\n      if (isSymbolicLink(folder)) {\n        this.log(`Skipped update for symbol link`)\n        return\n      }\n      let obj = loadJson(path.join(folder, 'package.json')) as any\n      version = obj.version\n    }\n    this.log(`Using npm from: ${this.npm}`)","sourceCodeStart":272,"sourceCodeEnd":308,"githubUrl":"https://github.com/neoclide/coc.nvim/blob/50e974d9692461a69147d5cab146a8d3e439abe4/src/extension/installer.ts#L272-L308","documentation":" 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.","triggerScenarios":"Installing an extension whose engines.coc is >= a version newer than the installed coc.nvim, while semver.satisfies(workspace.version, required) is false.","commonSituations":"Very new extension releases requiring a coc.nvim feature branch; users on distro-packaged (old) coc.nvim; pinned old coc.nvim in lockfiles.","solutions":["Update coc.nvim to a version satisfying the requirement.","Install an older extension version compatible with your coc.nvim.","Check required range: npm view <name> engines to see the engines.coc value.","If needed temporarily and you know it works, pick a version whose engines.coc matches your coc.nvim."],"exampleFix":"// before (old coc.nvim + new extension)\n:CocUpdate  // fails: requires coc.nvim >= 0.0.82\n// after\n:update the coc.nvim plugin, then :CocInstall coc-json","handlingStrategy":"try-catch","validationCode":"const info = await installer.getInfo()\nconst required = (info['engines.coc'] || '').replace(/^\\^/, '>=')\nif (required && !semver.satisfies(cocVersion, required)) await upgradeCocNvim()","typeGuard":null,"tryCatchPattern":"try { await installer.install() } catch (e) { if (e.message.includes('requires coc.nvim >=')) { await updateCocNvimThenRetry() } else { throw e } }","preventionTips":["Keep coc.nvim up to date before updating extensions","Check engines.coc of extensions you pin","Avoid distro-packaged coc.nvim if you need latest extensions"],"tags":["versioning","semver","compatibility","extension-install"],"backgroundTag":"engine-version-requirement-not-satisfied","analyzedSha":"50e974d9692461a69147d5cab146a8d3e439abe4","analyzedAt":"2026-08-31T11:17:23.966Z","schemaVersion":2},"datasetVersion":"2026-09-01T08:17:40.651Z"}