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
- Update coc.nvim itself first, then retry the extension update.
- Skip this update and stay on the current extension version until coc.nvim is upgraded.
- Pin/downgrade the extension to a version compatible with your coc.nvim.
- 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
- Update coc.nvim first in your update workflow
- Handle update failures per-extension instead of aborting all updates
- Pin extension versions compatible with your coc.nvim release
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
- ${name} ${info.version} requires coc.nvim >= ${required}, pl
- ${this.def} has no release older than ${releaseAge} days.
- ${this.def} is not older than ${releaseAge} days.
- ${this.def} doesn't exists in ${registry}.
- coc.nvim version not match, required ${engines['coc']}
AI-assisted analysis of neoclide/coc.nvim@50e974d969 (2026-08-31).
Data as JSON: /api/errors/dc2c047d68e2966f.
Report an issue: GitHub.