Neovim: Vim refactored for API access and asynchronous jobs
An extensible Vim-based editor focused on usability and modern integrations.
At a glance
- What is it?
- Neovim keeps Vim's modal editing and rebuilds the internals around an API, an event loop and Lua. This review covers what that buys you, what it costs, and how to tell whether it fits your workflow.
- Who is it for?
- Adopt Neovim if you already think in Vim motions and want a scriptable editor that other programs can drive, or if you maintain a plugin that needs a stable API surface. Do not adopt it if you want an editor that ships with batteries included or if you are unwilling to maintain configuration as a codebase; Neovim's own README points at external GUI and API client projects rather than bundling them.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Vim Script, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The problem Neovim was created to solve
Vim's codebase accumulated decades of contributions from a small number of maintainers, and the README is unusually blunt about the reason Neovim exists: it seeks to "aggressively refactor Vim" to simplify maintenance, split the work between multiple developers, enable advanced UIs without touching the core, and maximize extensibility. Those four goals are the whole pitch. This is not a fork that adds a feature Vim lacks. It is a fork that changes who can work on the editor and how other programs talk to it.
The audience follows from that. If you write plugins, or you build a GUI, or you want your editor to be a component inside a larger tool, Neovim's design is aimed at you. If you want to open a file, edit it and close it, the refactor is mostly invisible. The README's feature list reads like an integration checklist rather than an editing checklist: API access from any language, an embedded scriptable terminal emulator, asynchronous job control, shared shada data among multiple editor instances, XDG base directories. Each of those is about Neovim as a platform, not Neovim as a text editor.
That framing matters when you evaluate it. A user who never writes a line of Lua and never connects an external client gets the Vim editing model with a different plugin ecosystem. A user who does write Lua gets an editor whose internals are documented as an API.
Inside the tree: msgpack RPC, an event loop and a Lua subsystem
The repository layout published in the README is the clearest description of the architecture available without reading source. Under src/nvim/ the subsystems are separated by directory: api/ for the API subsystem, eval/ for the Vimscript subsystem, event/ for the event loop, lua/ for the Lua subsystem, msgpack_rpc/ for the RPC subsystem, os/ for low-level platform code, tui/ for the built-in UI, and lib/ for generic data structures. Generators for pre-compilation live in generators/.
The presence of msgpack_rpc/ next to tui/ is the design decision worth understanding. The built-in terminal UI is one consumer of the same RPC channel that external GUIs use. That is what the README means by enabling advanced UIs without modifications to the core: a GUI does not patch the editor, it speaks the protocol. The API clients list spans C/C++, C#, Clojure, D, Elixir, Go, Haskell, Java/Kotlin, JavaScript/Node.js, Julia, Lisp, Lua, Perl, Python, Racket, Ruby and Rust, which is only possible because the interface is a protocol rather than a C header.
The event/ directory explains the asynchronous job control claim. Job control in Vim historically blocked; the README lists asynchronous job control as a headline feature, and an event loop is what makes that possible without freezing the UI.
Lua sits alongside Vimscript rather than replacing it. The README describes the eval/ directory as the Vimscript subsystem and lua/ as the Lua subsystem, and separately notes compatibility with most Vim plugins including Ruby and Python plugins. So the honest reading is that Neovim carries two first-class scripting paths and a compatibility layer for a third set of legacy integrations. That is more surface area to learn, not less.
Installing Neovim and running a first scripted command
The README gives two routes. Pre-built packages for Windows, macOS and Linux are on the Releases page, and managed packages exist in Homebrew, Debian, Ubuntu, Fedora, Arch Linux, Void Linux and Gentoo. The README defers to INSTALL.md for the package details and does not list the exact package names for each distribution in the README itself, so check INSTALL.md rather than guessing a package name.
On macOS with Homebrew, the README names Homebrew as a managed package source:
brew install neovimBuilding from source is the documented path when you need a specific build type or an install prefix. The README states the build is CMake-based with a Makefile provided as a convenience, and gives this command after dependencies are installed:
make CMAKE_BUILD_TYPE=RelWithDebInfo
sudo make installTo install somewhere other than the default prefix, the README shows the prefix passed alongside the build type:
make CMAKE_BUILD_TYPE=RelWithDebInfo CMAKE_INSTALL_PREFIX=/full/path/
make installNote the asymmetry: the build line carries the prefix and the install line does not. The Makefile comments confirm this is deliberate, since CMAKE_INSTALL_PREFIX is remembered from the configure step and a checkprefix target verifies it still matches the cached value.
The README also documents three CMake hints for inspecting a build: cmake --build build --target help lists build targets, build/CMakeCache.txt (or cmake -LAH build/) holds the resolved CMake variables, and build/compile_commands.json shows full compiler invocations per translation unit. That last file is what you feed a language server if you intend to work on the C source.
For a first real use, the README points at documentation rather than a tutorial. It links https://neovim.io/doc/ and states that the full feature list is under :help nvim-features and noteworthy changes under :help news. If you are moving from Vim, the README directs you to :help nvim-from-vim. Those three help tags are the actual starting point, and the README does not provide a guided walkthrough beyond them.
Where the refactor leaves you on your own
The README's feature list is a list of capabilities, not a list of defaults. Advanced UIs are possible, but the README links out to a wiki page of related projects rather than shipping one. API access exists, but the client libraries live in separate repositories. The terminal emulator is embedded and scriptable, but nothing in the README describes a default configuration that wires these things together.
This is the real cost. A Vim user migrating to Neovim inherits a different configuration directory convention (the README cites XDG base directories support as a feature) and a different scripting language for anything new they write. The README says Neovim is compatible with "most Vim plugins," which is a hedged claim, and the hedge is load-bearing. Plugins that depend on Vim internals rather than documented interfaces are the ones that break, and the README does not enumerate which ones.
The licence situation is also split rather than uniform. The README states that Neovim contributions since commit b17d96 are licensed under Apache 2.0, except for contributions copied from Vim, which are identified by the vim-patch token, with LICENSE.txt holding the details. So the repository is not simply "Apache 2.0." If you are vendoring Neovim into a product, the vim-patch-identified portions are the ones to look at, and the README does not tell you what their terms are. That is a question for LICENSE.txt and, if the answer matters commercially, for someone qualified to read it.
One more boundary: the README does not document rollback, downgrade or migration procedures between releases. It points to :help news for changes in the latest version, which is a changelog, not an upgrade guide.
Neovim against Vim and against VS Code
The comparison people actually search for is Neovim versus Vim, and the README answers it directly by describing the fork's purpose. Vim is the upstream project Neovim refactors. The difference is not editing behaviour, which is largely shared, but governance and interface: Neovim splits work between multiple developers and exposes an API that any language can drive, whereas Vim's extension surface is Vimscript plus whatever plugin protocols its ecosystem settled on. If your reason to switch is a plugin that requires Neovim's API, switch. If your reason is that Vim feels stale, the README offers no claim that editing is meaningfully different.
The comparison with VS Code is a different axis entirely, and the README does not address it. VS Code is a GUI application with an extension marketplace and a mouse-first interaction model; Neovim is a terminal editor whose built-in UI lives in src/nvim/tui/ and whose GUI story is "connect an external client over RPC." They are not substitutes so much as different bets about where configuration lives. Neovim's answer is that your configuration is code you own and version. VS Code's answer is that configuration is extensions you install. The README's emphasis on API clients and XDG directories is a clear statement of which bet Neovim is making, and it is a bet that costs you maintenance time in exchange for control.
Release cadence, maintenance and what upgrading costs
The repository is not archived, and the last push was on 2026-08-29. Releases listed at the time of writing are v0.12.5 and a stable build on 2026-08-23, plus a nightly prerelease build that shares the 2026-08-29 timestamp. So there is a stable channel and a development channel, and the nightly is explicitly labelled a prerelease build.
The practical upgrade cost is the gap between those channels. Running nightly means tracking changes as they land, and the README's pointer to :help news is the only changelog mechanism it documents. There is no documented support window for older releases and no documented rollback path, so pinning a version is a decision you make with your package manager rather than one the project documents.
For contributors the cost is different and better documented. The repository carries .clang-format, .clang-tidy, .clangd and .editorconfig for C work, .luacheckrc, .luacov, .luarc.json, .stylua.toml, .stylua2.toml and .styluaignore for Lua, plus CMakePresets.json and a build.zig alongside the CMake and Makefile paths. That is a project that has invested in making contributions mechanically consistent, which is consistent with the README's stated goal of encouraging contributions. CONTRIBUTING.md, MAINTAIN.md and AGENTS.md at the top level suggest the process is written down rather than tribal.
On licensing, the split described above means an upgrade can, in principle, change the licence mix of the code you are running if new contributions arrive under different terms. The README's mechanism for tracking this is the vim-patch token, which is a convention, not an automated guarantee.
Editorial conclusion
Adopt Neovim if you already think in Vim motions and want a scriptable editor that other programs can drive, or if you maintain a plugin that needs a stable API surface. Do not adopt it if you want an editor that ships with batteries included or if you are unwilling to maintain configuration as a codebase; Neovim's own README points at external GUI and API client projects rather than bundling them. Before committing, verify two things: that your platform's managed package tracks a release you are happy with, since the README lists Homebrew, Debian, Ubuntu, Fedora, Arch, Void and Gentoo but does not promise version parity, and that the plugins you depend on are compatible, because the README only claims compatibility with "most Vim plugins."
Frequently asked questions
Which is better for VS Code, Vim or Neovim?
The README does not compare Neovim to VS Code at all, so it offers no basis for that choice. What it does say is that Neovim is a Vim refactor with API access from many languages and that GUIs connect as external clients rather than being bundled.
Is Neovim an IDE?
The README never calls Neovim an IDE. It describes an editor with API access, an embedded scriptable terminal emulator, asynchronous job control and compatibility with most Vim plugins, and it links to external GUI and API client projects rather than shipping an integrated environment.
Which one is better, Vim or Neovim?
The README frames Neovim as a refactor of Vim rather than a replacement, listing four goals: simplifying maintenance, splitting work between developers, enabling advanced UIs without core modifications, and maximizing extensibility. It makes no claim that editing itself is better.
How to install Neovim?
The README says pre-built packages for Windows, macOS and Linux are on the Releases page, with managed packages in Homebrew, Debian, Ubuntu, Fedora, Arch Linux, Void Linux and Gentoo. Source builds use make CMAKE_BUILD_TYPE=RelWithDebInfo followed by sudo make install.
How to use Neovim terminal?
The README lists an "embedded, scriptable terminal emulator" as a feature and links to :help terminal for it. It does not document the keybindings or commands in the README itself, so the help page is the reference.
How to run Neovim?
The README does not give a run command. It points to https://neovim.io/doc/ for documentation, :help nvim-features for the full feature list, :help news for recent changes, and :help nvim-from-vim if you are transitioning from Vim.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/neovim-neovim)
Community notes