Skip to main content
Docs / GETTING STARTED

Installation Guide

Manually install coc.nvim, verify Node.js and editor requirements, choose a runtimepath strategy, and troubleshoot advanced installation scenarios.

Quick Script InstallRecommended

Uses the selected editor's native pack mechanism. Run again anytime to update.

Review what it runs before executing: view installer source.

curl -fsSL https://cocnvim.com/install-coc.sh | bash -s -- --editor=nvim
Zero plugin manager required
One command to install & update
Pre-compiled release branch

The script checks Node.js and Neovim, detects another coc.nvim installation, then shows every planned path before confirmation. It installs to ${XDG_DATA_HOME:-~/.local/share}/nvim/site/pack/coc/opt/coc.nvim and the Neovim init file and preserves an existing native-pack copy as .backup-*. It adds one idempotent packadd coc.nvim entry when the config does not already load coc.nvim. Use --no-config / -NoConfig to leave config unchanged.

coc.nvim is mostly written in TypeScript and runs on Node.js.

Requirements

  • neovim >= 0.8.0 or vim >= 9.0.0438 (run :version or vim --version to find your Vim version)
  • node >= 22.15.0

Install Node.js.

Note: coc.nvim finds node by calling executable('node') from within vim. Check out :h g:coc_node_path to customize the node path.

Note: NixOS users must follow these steps:

  1. Install Node.js via nix-env or put it in /etc/nixos/configuration.nix
  2. sudo nixos-rebuild switch

Add coc.nvim to vim's runtimepath

Using vim-plug

Use coc's release branch (recommended):

vim snippet
1Plug 'neoclide/coc.nvim', {'branch': 'release'}

Build from source:

vim snippet
1Plug 'neoclide/coc.nvim', { 'branch': 'master', 'do': 'npm ci' }

Run the :PlugInstall command in your (neo)vim.

Using lazy.nvim

Use the default release branch (recommended):

lua snippet
1{ 'neoclide/coc.nvim', branch = 'release', }

Using packer.nvim

Use the default release branch (recommended):

lua snippet
1use {'neoclide/coc.nvim', branch = 'release'}

Build from source:

lua snippet
1use {'neoclide/coc.nvim', branch = 'master', run = 'npm ci'}

Run the :PackerInstall command in your (neo)vim.

Using dein.vim

Use release branch (recommended):

vim snippet
1call dein#add('neoclide/coc.nvim', { 'merged': 0, 'rev': 'release' })

Build from source:

vim snippet
1call dein#add('neoclide/coc.nvim', { 'merged': 0, 'rev': 'master', 'build': 'npm ci' })

Note: Without 'merged': 0, coc.nvim will not start.

Note: Depending on your network and CPU, the first build might take a while.

If you have trouble compiling from source when using dein, try these shell commands:

bash snippet
1cd ~/.cache/dein/repos/github.com/neoclide/coc.nvim
2git clean -xfd
3npm ci

Using NeoBundle

Use release branch:

vim snippet
1NeoBundle 'neoclide/coc.nvim', {'branch': 'release'}

Using Paq

Use the release branch.

jsonc snippet
1{"neoclide/coc.nvim", branch="release"};

Using pathogen.vim

sh snippet
1cd ~/.vim/bundle
2git clone -b release https://github.com/neoclide/coc.nvim

Using vim8's native package manager

Get the source code from the release branch:

vim8:

sh snippet
1mkdir -p ~/.vim/pack/coc/start
2cd ~/.vim/pack/coc/start
3git clone --branch release https://github.com/neoclide/coc.nvim.git --depth=1
4vim -c "helptags coc.nvim/doc/ | q"

neovim:

sh snippet
1mkdir -p ~/.local/share/nvim/site/pack/coc/start
2cd ~/.local/share/nvim/site/pack/coc/start
3git clone --branch release https://github.com/neoclide/coc.nvim.git --depth=1
4nvim -c "helptags coc.nvim/doc/ | q"

Check service state

To check whether the coc.nvim service is running, use the :checkhealth command in neovim (not supported by vim). The output looks like:

image

Set the g:coc_node_path variable to specify the node executable used to start the coc.nvim service.

Another useful command is :CocInfo — use it after the service has started to get useful information about it.

Install extensions for programming languages you use daily

For example, for generic web development, consider :CocInstall coc-tsserver coc-json coc-html coc-css.

For Python 3: :CocInstall coc-pyright

For PHP: :CocInstall coc-phpls

and so on.

For more information, check out Using coc extensions.

Add some configuration

Run :CocConfig, which opens the main config file ~/.config/nvim/coc-settings.json (empty for a new installation). Add an empty JSON object ({}) and then add configurations for language servers not already covered by existing extensions (e.g. if you already installed coc-pyright, you don't need to configure the pyls server).

For more information, check out Using the configuration file.

Install watchman for file watching

For features like workspace_didChangeWatchedFiles to work, you will need to install watchman by following the instructions at Watchman installation guide.

Watchman also works well when you have multiple (neo)vim instances started in the same directory. You can configure watchman to ignore some directories using a .watchmanconfig configuration file in your project root:

json snippet
1{
2 "ignore_dirs": [
3 "dist",
4 "node_modules"
5 ]
6}

Warning: Don't create a .watchmanconfig file in your home directory.

Note: An undocumented global configuration: put .watchman.json in your $HOME root. See Watchman configuration source

Note: watchman can use a lot of memory. Run watchman watch-del-all in your shell to free up some memory.