Model or dataset
coder/claudecode.nvim avatar
coder/claudecode.nvim

claudecode.nvim: the first Neovim IDE integration for Claude Code, in pure Lua

🧩 Claude Code Neovim IDE Extension

3,066 stars216 forksLuaMIT

At a glance

What is it?
claudecode.nvim by Coder brings Claude Code into Neovim with a pure-Lua, zero-dependency implementation of the same WebSocket MCP protocol the official VS Code and JetBrains extensions use. Its author reverse-engineered that extension to give Neovim users live selection sharing, in-editor diffs and terminal control.
Who is it for?
Install claudecode.nvim if you use Neovim and want the same Claude Code experience as the VS Code and JetBrains extensions without leaving your editor. Add it with lazy.nvim and snacks.nvim, keep the cmd list so the :ClaudeCode commands load, and if you moved Claude Code to a local install set terminal_cmd to its path.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 2 days ago.
What is it written in?
Mainly Lua, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What claudecode.nvim is and why it exists

claudecode.nvim calls itself the first Neovim IDE integration for Claude Code, and its origin story explains its design. When Anthropic released Claude Code, it supported only VS Code and JetBrains. The author, a Neovim user, reverse-engineered the official extension and built this plugin to implement the same WebSocket-based MCP protocol, giving Neovim the same AI-powered coding experience. The README notes, with some justice, that this beat Anthropic to releasing Neovim support, and that Claude itself was used to reverse-engineer Claude's own protocol.

The project's principles are stated up front: pure Lua with zero dependencies, built entirely on vim.loop and Neovim built-ins; 100% protocol compatibility with the official extensions; and a fully documented protocol in PROTOCOL.md so others can build their own integrations. The audience is clear: Neovim users who run Claude Code and want it wired into the editor rather than living in a separate terminal, plus anyone curious about how the editor integration protocol works.

How the integration works

Because it implements the same WebSocket MCP protocol as the official extensions, the plugin gives Neovim the same core behaviours. The README's demo shows the shape of it: launch Claude Code in a split with :ClaudeCode, and Claude then sees your current file and selections in real time; send a visual selection as context with :'<,'>ClaudeCodeSend. The integration is two-way, so Claude's proposed edits come back into the editor as diffs you accept or deny.

The command set reflects that workflow. Alongside toggling and focusing the Claude terminal, there are commands to add the current buffer or a file from a tree explorer as context, to send selections, to select the model, and to manage diffs: ClaudeCodeDiffAccept, ClaudeCodeDiffDeny and ClaudeCodeCloseAllDiffs. Being pure Lua on Neovim built-ins means there is no compiled component and no runtime beyond Neovim itself, which is part of why the plugin can claim to be lightweight and easy to trust.

Installing claudecode.nvim

The README's install spec is for lazy.nvim, and it does more than list the plugin. It declares snacks.nvim as a dependency, sets config = true so the plugin auto-configures, and pins down the lazy-loading behaviour carefully:

lua
{
  "coder/claudecode.nvim",
  dependencies = { "folke/snacks.nvim" },
  config = true,
  cmd = {
    "ClaudeCode", "ClaudeCodeFocus", "ClaudeCodeSelectModel",
    "ClaudeCodeAdd", "ClaudeCodeSend", "ClaudeCodeTreeAdd",
    "ClaudeCodeStatus", "ClaudeCodeStart", "ClaudeCodeStop",
    "ClaudeCodeOpen", "ClaudeCodeClose",
    "ClaudeCodeDiffAccept", "ClaudeCodeDiffDeny", "ClaudeCodeCloseAllDiffs",
  },
  keys = {
    { "<leader>ac", "<cmd>ClaudeCode<cr>", desc = "Toggle Claude" },
    { "<leader>af", "<cmd>ClaudeCodeFocus<cr>", desc = "Focus Claude" },
    { "<leader>as", "<cmd>ClaudeCodeSend<cr>", mode = "v", desc = "Send to Claude" },
    { "<leader>aa", "<cmd>ClaudeCodeDiffAccept<cr>", desc = "Accept diff" },
    { "<leader>ad", "<cmd>ClaudeCodeDiffDeny<cr>", desc = "Deny diff" },
  },
}

The README explains why the cmd list matters: it lets lazy.nvim create command stubs that load the plugin on first use, so :ClaudeCode works on a fresh start; without it, a keys-only spec would defer loading until a mapping is pressed and the commands would not yet exist. If you prefer to load the plugin at startup instead, set lazy = false and the cmd and keys triggers become optional.

Requirements and local-install configuration

The requirements are short: Neovim 0.8.0 or newer, the Claude Code CLI installed, and folke/snacks.nvim for enhanced terminal support. If Claude Code was installed globally via npm, the default configuration works with no extra path.

The one configuration wrinkle is a local installation. Claude Code's claude migrate-installer command moves the CLI from a global npm install to ~/.claude/local/ and creates shell aliases that may not be visible to Neovim. In that case the plugin needs the direct path:

lua
opts = {
  terminal_cmd = "~/.claude/local/claude",
},

The README shows how to detect your install type with which claude and claude doctor, and the same terminal_cmd approach covers Claude Code's experimental native-binary install, where you point terminal_cmd at the path that which claude reports. This is the kind of detail that trips people up, so it is worth checking your install type before assuming the default works.

Features beyond the basics

The release notes sketch how the plugin has grown. v0.1.0 was the first Neovim IDE integration for Claude Code; v0.2.0 added tree explorers, diagnostics and smarter terminals; and v0.3.0 brought terminals everywhere, sturdier diffs and a friendlier protocol. The tree-explorer support is why ClaudeCodeTreeAdd is bound for filetypes like NvimTree, neo-tree, oil, minifiles and netrw: you can add a file to Claude's context straight from whichever file explorer you use.

The documented protocol is a genuine extra. PROTOCOL.md, together with an ARCHITECTURE.md and a STORY.md in the repository, means the plugin doubles as a reference for how the editor integration works. For anyone who wants to build a similar integration for another editor, or simply understand what the official extensions do, that documentation is arguably as valuable as the plugin itself.

Maturity, licence and what to expect

The plugin is MIT licensed and its status badge says beta, which is a fair description: it is functional and actively developed but not claiming long-term stability. The last push was on 2026-09-13, and the repository carries a test workflow, a CHANGELOG.md and release-please configuration, so releases are automated and the code is under CI.

What to expect follows from being a reverse-engineered, protocol-compatible plugin. It tracks the official protocol rather than an official API, so a change on Anthropic's side could require an update, and the beta label signals that edge cases may still surface. Against that, the pure-Lua, zero-dependency design keeps it simple to install and inspect, and it comes from Coder, a company in the developer-tooling space rather than an anonymous author. For a Neovim user who already uses Claude Code, it is the most direct way to get the same in-editor experience the VS Code and JetBrains users have.

Editorial conclusion

Install claudecode.nvim if you use Neovim and want the same Claude Code experience as the VS Code and JetBrains extensions without leaving your editor. Add it with lazy.nvim and snacks.nvim, keep the cmd list so the :ClaudeCode commands load, and if you moved Claude Code to a local install set terminal_cmd to its path. You need Neovim 0.8+ and the Claude Code CLI.

Frequently asked questions

Can I use Claude Code in Neovim?

Yes. claudecode.nvim integrates Claude Code into Neovim using the same WebSocket MCP protocol as the official VS Code and JetBrains extensions, so Claude sees your files and selections and returns edits as in-editor diffs. You need Neovim 0.8+ and the Claude Code CLI.

Is Neovim an IDE on its own?

Neovim is a text editor, but plugins like claudecode.nvim add IDE-style features, here a full Claude Code integration with context sharing, diagnostics, tree explorers and diff management, implemented in pure Lua with no external dependencies.

Do I need to configure a path if I used claude migrate-installer?

Yes. A local install moves Claude Code to ~/.claude/local/ with aliases Neovim may not see, so set opts.terminal_cmd to the direct path (for example ~/.claude/local/claude). Use which claude and claude doctor to detect your install type.

Official sources

  1. coder/claudecode.nvim on GitHub
  2. Issues
  3. License: MIT
  4. README
  5. Releases
Community notes

Community notes