Neovim was forked from Vim in 2014 by Thiago de Arruda after his patches for async job control were ignored. The project modernized Vim's aging codebase with Lua scripting, LSP support, and a thriving plugin ecosystem, becoming the dominant modern terminal editor.
Neovim replaced Vim's custom build system with CMake, swapped VimL dominance for LuaJIT-based scripting, added MessagePack-RPC for external process communication, embedded a terminal emulator, and integrated Tree-sitter for incremental syntax parsing and LSP for language intelligence. It maintains backward compatibility with most Vim plugins and configurations.
In February 2014, Brazilian developer Thiago de Arruda submitted a patch to Vim adding multi-threading and asynchronous job control. It received no response — no acceptance, no rejection, no feedback. For de Arruda, this was symptomatic of a deeper problem: Vim's development was tightly controlled by its creator Bram Moolenaar, and the codebase had accumulated decades of technical debt that made it resistant to fundamental improvements.
De Arruda announced on the vim_use mailing list that he was forking Vim to "refactor code and implement new features, such as the job control patch." He launched a Bountysource campaign in March 2014 that blew past its $10,000 goal within days, ultimately raising over $33,000. The money was real, but the message was bigger: thousands of developers were hungry for a modernized Vim.
The Neovim project didn't just add features — it gutted decades of platform-specific code, ripped out the custom build system in favor of CMake, replaced the hand-rolled IPC with MessagePack-RPC, and embedded a Lua interpreter (LuaJIT) as a first-class scripting alternative to VimL. These weren't cosmetic changes; they were the architectural decisions Vim couldn't make without breaking backward compatibility.
Thiago led development for about 18 months before stepping down in late 2015. Justin M. Keyes took over as lead maintainer and has since shaped Neovim into a genuine platform — with built-in LSP support, Tree-sitter syntax parsing, and a Lua-first configuration model that spawned an explosion of community plugins. Keyes brought a product-management sensibility to the project, focusing on API stability and developer experience.
Bram Moolenaar's passing in August 2023 marked a poignant moment for both projects. Vim itself entered maintenance mode, and many of its remaining active developers acknowledged that Neovim had become the center of gravity for terminal-based editing innovation. The fork that started with an ignored patch had become the future its parent couldn't build.
Thiago de Arruda's multi-threading patch for Vim receives no response
Neovim announced as a Vim fork on the vim_use mailing list
Bountysource campaign raises over $33,000, far exceeding its $10,000 goal
Thiago de Arruda steps down; Justin M. Keyes becomes lead maintainer
Neovim 0.1.0 released with async job control, terminal emulator, and RPC API
Neovim 0.5 released with built-in LSP client and Tree-sitter integration
Bram Moolenaar passes away; Vim enters maintenance mode
“I decided to fork vim to refactor code and implement new features, such as the job control patch.”
“We can have nice things.”
Neovim single-handedly revitalized terminal-based text editing. Its Lua API and async architecture spawned an ecosystem of hundreds of high-quality plugins — from LSP configurations to AI integrations — that made terminal editors competitive with full IDEs. The MessagePack-RPC protocol enabled GUI frontends like Neovide and embedded Neovim instances in VS Code and other editors.
Perhaps more significantly, Neovim's success pressured Vim itself to modernize: Vim 8 added async job support and terminal emulation, features clearly inspired by Neovim. After Moolenaar's death, Neovim became the de facto standard for developers who prefer modal editing, with GitHub stars exceeding 80,000.