Favicon of neovim

neovim

Neovim is an extensible fork of Vim with an embedded API, Lua scripting, async job control, and a built-in terminal emulator.

Neovim is a fork of Vim that rewrites the editor's core to make it easier to maintain, extend, and script. It's built for developers who live in a terminal editor and want modern scripting (Lua), a real RPC API for building tools and GUIs, and compatibility with the Vim plugin ecosystem they already know. If you want a modal editor you can bend to your workflow instead of one that bends you to its defaults, this is the project to look at.

The core is written in C, with Lua as a first-class scripting layer alongside the traditional Vimscript. Neovim ships as a terminal application but exposes a msgpack-RPC API that lets any language talk to a running instance, which is why a large ecosystem of GUIs and plugins has grown around it.

Key features

  • API access: a msgpack-RPC API lets you drive Neovim from C/C++, Go, Python, Rust, JavaScript, Lua, and many other languages, so GUIs and tools can be built without patching the core.
  • Lua scripting: Lua is embedded directly in the editor for configuration and plugin development, in addition to Vimscript.
  • Embedded terminal emulator: a scriptable terminal runs inside buffers, so you can drive shells, REPLs, or build tools without leaving the editor.
  • Asynchronous job control: run and manage background processes without blocking the UI.
  • Shared data (shada): state like registers and marks can be shared across multiple running instances.
  • XDG base directory support: config, data, and cache files follow the XDG spec instead of scattering dotfiles.
  • Vim plugin compatibility: most existing Vim plugins, including Ruby and Python ones, work without modification.
  • Modern GUI ecosystem: the API architecture lets third parties build GUIs (GTK, Qt, terminal-based, and more) on top of the same core.

Ideal use cases

Neovim fits developers who want a fast, keyboard-driven editor they can script deeply, especially for remote work over SSH or inside containers where a heavy GUI IDE isn't practical. It's a good choice if you want to build a custom editing environment from plugins and Lua configuration rather than accept a fixed IDE layout, or if you're building an external tool (a GUI, a linter integration, a pair-programming layer) that needs programmatic control over an editor via a real API.

It's also a solid pick if you're already comfortable with Vim and want the same muscle memory plus a modern plugin ecosystem, async job control, and a built-in terminal.

It is not a good fit if you want a point-and-click IDE experience out of the box: Neovim starts close to bare and expects configuration. Teams that need a shared, zero-config editor for non-technical users, or projects that depend on Vim-only features not yet ported, should look elsewhere. If you don't want to invest time in a config file (Lua or Vimscript), the learning curve may outweigh the benefit.

Installation

From a package. Pre-built packages for Windows, macOS, and Linux are on the project's Releases page. Managed packages are also available through Homebrew, Debian, Ubuntu, Fedora, Arch Linux, Void Linux, and Gentoo, among others.

From source. The build is CMake-based, with a Makefile provided for convenience. After installing the required dependencies (see BUILD.md), run:

make CMAKE_BUILD_TYPE=RelWithDebInfo
sudo make install

To install to a custom location instead of the system default:

make CMAKE_BUILD_TYPE=RelWithDebInfo CMAKE_INSTALL_PREFIX=/full/path/
make install

For inspecting or customizing the build, cmake --build build --target help lists all build targets, build/CMakeCache.txt (or cmake -LAH build/) shows resolved CMake variable values, and build/compile_commands.json gives the full compiler invocation for each source file.

Users coming from Vim can read the in-editor help topic nvim-from-vim for a rundown of behavioral differences and migration tips.

Categories:

Frequently asked questions

Share:

Stars
101K
Forks
7K
Last commit
6 hours ago
Repository age
12 years
Self-hosted
No
Activity score
89/100
View Repository
Built with:

Similar to neovim

Favicon

 

  
  
Favicon

 

  
  
Favicon