Performance

The benchmark opens generated documents at 500, 5,000, and 50,000 lines. Each size is written twice with byte-identical content: the .txt file carries no language for any editor, while the .lua file gives all three the same single Tree-sitter Lua grammar.

Startup, quit, and idle cost are measured separately, because they answer different questions and no editor leads all three. Startup and quit are medians of 10 runs in a 120×40 pseudo-terminal with isolated configuration, cache, and state directories. Idle is the median and range of five independent ten-second windows, each using a fresh process. See the full benchmark methodology for details.

Measured on 31 August 2026 with Neovim 0.12.4, Helix 25.07.1, and Runyte 0.1.6 on an AMD Ryzen AI 9 365 running Linux 7.1.9. Absolute values are machine-specific and are not comparable against results taken on other hardware. In each row the fastest value is highlighted in green, the intermediate value in yellow, and the slowest in red. Ties are highlighted equally.

Startup

Startup is the time in milliseconds from immediately before the process launches until a token from the first document line appears in the raw terminal stream. It is one shared output event, not proof that the whole screen has been presented, that input is accepted, or that highlighting and background work have finished. An editor may emit that token before or after it parses the document, so an earlier value means the document text reached the terminal sooner — not that the editor completed more work.

FixtureLOCSizeNeovimHelixRunyte
short.txt0.5k17 kB19176
medium.txt5k171 kB21218
long.txt50k1.7 MB232115
short.lua0.5k17 kB332714
medium.lua5k171 kB274828
long.lua50k1.7 MB28215176

Runyte emits document content first on every fixture without a language and on the smallest Lua file. On medium.lua the millisecond separating Neovim and Runyte is within ordinary run variation. On long.lua Neovim emits document text at 28 ms against Runyte’s 176 ms: Runyte draws a stable Opening workspace… presentation and then replaces it with a single complete highlighted frame, so no document text is exposed in an unhighlighted or reflowing intermediate state. That is a difference in output order, not evidence that Neovim finished parsing 1.7 MB of Lua at 28 ms.

Quit

Quit is the time in milliseconds from the final force-quit keystroke until the process exits. Every editor receives the same Esc : q ! Enter sequence against the same unchanged document, so no editor-specific save or persistence workflow is included.

FixtureLOCSizeNeovimHelixRunyte
short.txt0.5k17 kB244
medium.txt5k171 kB344
long.txt50k1.7 MB345
short.lua0.5k17 kB245
medium.lua5k171 kB278
long.lua50k1.7 MB62228

Neovim exits first in every row. The category is reported as measured rather than dropped where Runyte does not lead.

Idle

With medium.lua open in a Git repository and no input, CPU is sampled over ten seconds across the editor and every process it spawned, alongside the number of times it writes to the screen. Each cell is the median across the five windows, with the observed range in parentheses.

EditorIdle CPUScreen writes
Neovim0.00 % (0.00–0.00)0 (0–0)
Helix0.00 % (0.00–0.00)0 (0–0)
Runyte0.00 % (0.00–0.10)0 (0–0)

All three editors are event-driven at rest. One of Runyte’s five windows rounded to 0.10 %; the work that remains scheduled is bounded and named — a one-second maintenance wake and a two-second metadata reconciliation covering filesystem events the operating system fails to deliver.