neovim/neovim
Dependencies
Third-party libraries bundled into Neovim. The canonical source of truth is cmake.deps/deps.txt. Versions below are accurate as of 2026-04-30.
Bundled libraries
All of these are downloaded by CMake during the deps build (make deps) and statically linked into the nvim binary by default (USE_BUNDLED=1).
| Library | Purpose | Pinned version |
|---|---|---|
| libuv | Cross-platform async I/O. The event-loop substrate. | v1.52.1 |
| LuaJIT | The Lua interpreter shipped in the binary. | commit 18b087cd2c |
| Lua 5.1 | Reference Lua implementation. Used as a fallback (-DPREFER_LUA=ON) and in tests. |
5.1.5 |
| luv | Lua bindings to libuv. Powers vim.uv. |
1.52.1-0 |
| lpeg | Parsing-Expression-Grammar library. Powers vim.lpeg, vim.re, the LuaCATS parser. |
1.1.0 |
| lua-compat-5.3 | Lua 5.1 ↔ 5.3 compatibility shims. | v0.13 |
| unibilium | Terminfo parser (the Neovim fork). Used by the TUI. | v2.1.2 |
| tree-sitter | Incremental parser library. | (pinned in deps.txt) |
tree-sitter-c, -lua, -vim, -vimdoc, -markdown, -bash, -query |
Bundled grammars. | (pinned per parser) |
| gettext, libiconv | Internationalization (downloaded only on platforms that don't ship them). | |
| win32yank | Windows clipboard helper. | v0.1.1 |
In-tree forks
Libraries Neovim has fully forked and no longer tracks upstream. Documented at the top of runtime/doc/dev_arch.txt.
| Library | Location | Notes |
|---|---|---|
libvterm |
src/nvim/vterm/ |
The in-process terminal emulator used by :terminal and vim.system({pty=true}). |
libtermkey |
src/nvim/tui/termkey/ |
The escape-sequence keyboard decoder used by the TUI. |
Vendored sources
Libraries Neovim does not own — they are synced from upstream periodically.
| Library | Location | Purpose |
|---|---|---|
| cjson | src/cjson/ |
JSON codec used by the Vimscript json_* functions. |
| mpack | src/mpack/ |
msgpack codec used by msgpack-rpc and shada. |
| klib | src/nvim/klib/ |
kvec.h, hash maps, intrusive containers. |
| xdiff | src/xdiff/ |
LibXDiff. Powers vim.diff and :diffthis. |
tee, xxd |
src/tee/, src/xxd/ |
Tiny utilities packaged with the Windows artifact. |
Build-time dependencies
Required at build time but not linked into the binary:
| Tool | Purpose |
|---|---|
| CMake (≥ 3.16) | Build system. |
| Ninja (recommended) | Faster parallel builds. |
| GCC/Clang/MSVC | C compiler with C99 support. |
xgettext, msgfmt |
Build translations (optional). |
python3 |
Some build helpers. |
ccache / sccache (optional) |
Speeds up iterative builds. |
gperf |
Hash table generation. |
Runtime dependencies
The nvim binary itself is statically linked against the bundled deps, but the user's system must provide a few things:
- A POSIX or Windows kernel — no other system dep is hard-required.
- Optionally: a C compiler for tree-sitter grammar compilation (when users add new grammars).
- Optionally:
python3+pynvimfor plugins that need the Python provider. - Optionally:
node+neovimnpm package for the Node provider. - Optionally:
gitforvim.pack.
Health checks (:checkhealth) report which optional bits are missing and what they would enable.
Updating a dependency
- Bump the URL and SHA256 in
cmake.deps/deps.txt. - Run
make distclean && make deps. The hash check confirms the download matches. - Run
make. If anything broke, fix the bindings. - Test:
make functionaltest. - Commit with
build(deps):prefix.
To bisect a dependency bug, set LIBUV_URL (or whichever) to a local path and set DEPS_IGNORE_SHA=TRUE in cmake.deps/CMakeLists.txt. Run make distclean between each rebuild.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.