Skip to main content
Vim ≥ 9.0.0438Neovim ≥ 0.8.0Node.js ≥ 22.15.0
coc.nvim logo

coc.nvim

Conquer of Completion

Intellisense engine for Vim and Neovim.

Free and open source under the MIT License.

Start with the five-minute path: verify your versions, install coc.nvim, add one language extension, and run :CocInfo to confirm the first working setup.

1 Choose an editor2 Install coc.nvim3 Verify with :CocInfo
curl -fsSL https://cocnvim.com/install-coc.sh | bash -s -- --editor=nvim

The installer checks Node.js and editor versions, shows the files it plans to change, backs up an existing native install, downloads the pre-built release branch, and adds the package-load line only after confirmation. See the Setup guide for editor-specific options.

src/extension.ts
1 import { workspace, commands, ExtensionContext } from 'coc.nvim';
2
3 export async function activate(context: ExtensionContext) {
4 const config = workspace.
ƒgetConfiguration
[TS]
ƒregisterAutocmd
[TS]
ƒapplyEdit
[TS]
rootPath
[TS]
~snippets.coc
5 const enabled = config.get<boolean>('enable', true);
6 }
NORMALsrc/extension.ts[+]utf-8
[coc.nvim]LSP: tsserver✖ 0⚠ 14:18 (72%)
Community funded

Sponsors make coc.nvim sustainable

Thank you to the organizations and community members who fund continued maintenance. Sponsor data is refreshed daily from Open Collective.

Sponsor on Open Collective

Commercial sponsors

Source: cocnvim on Open Collective · Updated 9/1/2026

Core Capabilities

Common editing workflows exposed by coc.nvim and its configured providers.

Workflow Showcase

Asynchronous completion with fuzzy filtering

Use completion sources with type icons, parameter signatures, and adjacent floating documentation.

Background Node.js service for asynchronous work
Shared workflows across Vim 9 and Neovim
Cancellation and progress support for long-running operations
Configuration
~/.vimrc
1" Tab for completion trigger and popup navigation
2inoremap <silent><expr> <TAB>
3 \ coc#pum#visible() ? coc#pum#next(1) :
4 \ CheckBackspace() ? "\<Tab>" :
5 \ coc#refresh()
6inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"
7 
8" Confirm selection on <CR>
9inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
10 \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
Runtime Requirement
Node 22.15.0+

Sourced from the current coc.nvim README and help documentation