neovim/neovim
By the numbers
A snapshot of the Neovim codebase. Data collected on 2026-04-30 from master at commit 83ee06463b.
Size
| Metric | Value |
|---|---|
Lines of C in src/nvim/ (*.c) |
~337,114 |
Lines of C headers in src/nvim/ (*.h) |
~20,741 |
Lines of Lua in runtime/lua/ |
~94,526 |
C source files in src/nvim/ |
189 |
C header files in src/nvim/ |
265 |
Lua data files in src/nvim/ |
7 |
Lua files in runtime/lua/ |
146 |
Lua test files (test/functional/ + test/unit/) |
579 |
Tagged releases visible in git tag |
60+ (latest stable: v0.12.2) |
xychart-beta horizontal
title "Source size by language (KLOC)"
x-axis ["C (src/nvim)", "Lua (runtime/lua)", "C headers (src/nvim)"]
y-axis "KLOC" 0 --> 350
bar [337, 95, 21]The C tree is dominated by a small set of very large files: regexp.c (16,309 lines), options.lua (10,956 lines), eval.c (6,972 lines), normal.c (6,685 lines). These are not unusual for a Vim derivative — Vim's monoliths were inherited and have been refactored down rather than rewritten wholesale.
Activity
| Metric | Value |
|---|---|
| Total commits since 2014-01-31 | 36,405 |
| Commits in the last 90 days | 1,204 |
| Commits in the last 365 days | ~3,839 |
| Commits since 2024-01-01 | 8,217 |
| Recent monthly commit volume | ~290–420 commits/month |
Commit cadence over the last ten months:
| Month | Commits |
|---|---|
| 2025-07 | 288 |
| 2025-08 | 308 |
| 2025-09 | 313 |
| 2025-10 | 311 |
| 2025-11 | 223 |
| 2025-12 | 302 |
| 2026-01 | 349 |
| 2026-02 | 362 |
| 2026-03 | 398 |
| 2026-04 | 421 |
Activity is steady and slightly trending up. There is no obvious slack period over the past year.
Bot-attributed commits
| Pattern | Commits matched |
|---|---|
Author or message contains factory-droid, dependabot, copilot, or github-actions |
41 |
That is well under 0.2% of the all-time commit total. Most automated activity in this repo is captured as workflow-driven PRs whose final commit is authored by a human reviewer; the figure above is a lower bound on automated involvement.
Releases
Recent tagged releases:
| Tag | Date |
|---|---|
nightly |
2026-04-29 |
v0.12.2 (stable) |
2026-04-22 |
v0.12.1 |
2026-04-06 |
v0.12.0 |
2026-03-29 |
v0.11.7 |
2026-03-28 |
v0.11.6 |
2026-01-26 |
v0.11.5 |
2025-11-02 |
v0.11.4 |
2025-08-31 |
v0.11.3 |
2025-07-12 |
v0.11.2 |
2025-05-30 |
v0.11.1 |
2025-04-26 |
v0.11.0 |
2025-03-26 |
v0.10.0 |
2024-05-16 |
Cadence: a 0.x.0 release roughly once a year, with a steady stream of point releases in between. The nightly tag is moved by the release workflow on every default-branch push.
Complexity hotspots
The biggest C files in src/nvim/:
| File | Lines |
|---|---|
src/nvim/regexp.c |
16,309 |
src/nvim/options.lua (data) |
10,956 |
src/nvim/eval.c |
6,972 |
src/nvim/normal.c |
6,685 |
src/nvim/ex_docmd.c |
~6,500 |
src/nvim/spellfile.c |
~5,800 |
src/nvim/window.c |
~7,500 |
src/nvim/spell.c / spellsuggest.c |
~3,500 each |
These mostly correspond to the Vim-inherited core that has been the slowest to factor out. New feature work tends to land in Lua under runtime/lua/vim/ or in narrowly scoped C files like src/nvim/marktree.c and src/nvim/decoration.c.
API surface
Major API source files in src/nvim/api/:
| File | Lines |
|---|---|
vim.c |
2,577 |
win_config.c |
1,530 |
buffer.c |
1,430 |
extmark.c |
1,374 |
command.c |
1,341 |
ui.c |
1,039 |
autocmd.c |
878 |
Each of those files exposes ~10–60 public nvim_* functions to the RPC channel and to Lua via vim.api.*.
TODOs / FIXMEs
Total TODO, FIXME, HACK, and XXX markers across all *.c files in src/nvim/: ~402.
That works out to roughly one every ~840 lines of C. The bar for a TODO living in the tree is high; most are genuine "this is a Vim quirk" notes or "blocked on upstream" comments rather than aspirational scratch.
Test coverage in numbers
The Lua test suite is the larger of the two:
- 579
*.luafiles undertest/ - ~3,500
it(...)anddescribe(...)cases across the functional suite (rough order of magnitude, not exact).
Functional tests run a real nvim child process. Unit tests in test/unit/ use FFI to call C functions directly and are useful for the bits of the C tree that are hard to reach through the editor UI (the marktree, the typval encoder, the path utilities).
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.