Helix is a modal text editor that runs inside a terminal. The Windows release unpacks to 1236 files and 215803023 bytes, with a 22347776-byte main executable at the root of the tree.

The problem it solves is editing a file on a machine you only reach through SSH. There is no window system there, so a GUI editor is out, and the choice is usually between an old vi clone and something built in this decade.

I unpacked the release, measured the version command and the time to first frame, then opened a 25-line Python file to check what the status line reports about the buffer.

1236 files for one editor

The download is 28550028 bytes and expands to 215803023 bytes, a 7.6x increase. That gap is the runtime: syntax queries, indent rules, themes and language definitions live next to the executable as separate files.

ItemValueNote
Release zip28550028 byteshelix-25.07.1-x86_64-windows.zip
hx.exe22347776 bytesAt the root of the unpacked tree
Extracted size215803023 bytes1236 files
Version command327 msThen 118 and 121 ms

The 7.6x expansion is the trade for no config

A single-file editor carries everything inside the executable; Helix does not. 1236 files means the runtime directory has to travel with the binary, and copying only hx.exe gives an editor that starts and then fails to highlight anything.

Version output

# Three runs: 327 / 118 / 121 ms
hx --version
helix 25.07.1 (a05c151b)

The first run took 327 ms because the whole tree was cold; the next two were 118 and 121 ms. Move the directory to a slow disk and that first number grows with the file count, not with the executable.

911 ms to first frame

Started inside a pseudo-terminal with a 130x34 window, the editor painted a usable screen 911 ms after launch. That figure includes the shell, the terminal setup and the first file load.

StageTimeWhat is included
Process start121 msVersion command, warm cache
First frame911 msConsole, PTY, file load, initial paint
Output before first key28905 bytesEscape sequences for the initial screen
Buffer opened25 linesdemo_show.py

Almost a megabyte of terminal traffic on open

28905 bytes reach the terminal before any keystroke. A full redraw with truecolor styling is verbose; over a slow SSH link that volume is what you feel, not the editor's own CPU time.

What the status line reports

Bottom right showed 1 sel 1:1 with NOR at the left, and a message line said Loaded 1 file. That is the normal mode indicator, the selection count and the cursor position, all in 20 characters.

Helix 25.07.1 with a 25-line Python buffer: line numbers on the left, syntax highlighting, status line showing NOR, 1 sel and 1:1

Modal editing without a plugin system

Keys work like vim in spirit: a normal mode for movement and commands, an insert mode for typing. The difference is that selections come before operators, so you select text and then act on it rather than composing verb-object pairs.

ActionKeysResult
Enter insertiStatus changes from NOR to INS
Select linexStatus shows 1 sel
Save:wWrites the buffer
Command palettespaceFuzzy list of every command

The space menu replaces memorising commands

Pressing space opens a searchable list of commands with their key bindings shown beside them. That is how you discover features without reading a 300-line cheat sheet.

No plugin ecosystem to install

Language support ships in the 1236 files, so a fresh install highlights Python, Rust, Go and the rest without downloading anything. The cost is that adding a language the release does not cover means rebuilding from source, which on Windows means a Rust toolchain. That path was not attempted here.

Before you unpack it

The editor writes nothing outside its own directory, so installation is a copy and removal is a delete. The thing to check is the terminal, because a console that cannot process escape sequences shows the screen as text.

ItemObserved hereNote
SystemWindows 10 22H2 (19045.6466)Official x86_64 build
Consolecmd.exe, 130x34 cellsVT processing enabled
Config writtenNone on first runRuntime dir only
LicenseMPL-2.0File-level copyleft

Keep the whole directory together

hx.exe alone is 22347776 bytes but the other 1235 files are what make it an editor. Copy the directory, not the executable, and put the directory on PATH rather than the file.

Legacy consoles print the raw sequences

Without virtual terminal support the screen fills with cursor movement codes instead of a buffer. The same binary renders correctly once the console host enables VT, so the symptom points at the host, not the editor.

Three things that cost time

Missing runtime looks like a crash

Copy hx.exe somewhere else and it starts, then exits or opens an unstyled buffer. The runtime folder has to sit beside it; there is no error message that says so.

The first frame is not the startup cost

121 ms to print a version number and 911 ms to paint a screen are different measurements. Quoting the first as startup time understates what a user waits for by a factor of seven.

Selections persist between commands

After x the selection stays active, so the next operator applies to it. Coming from vim, where an action ends the visual range, this is the habit that breaks first.

When it earns a place

Editing files on a remote server is the case it was built for. 911 ms to a usable screen over a terminal, with syntax highlighting and no plugin install, beats assembling a vim configuration from scratch.

If you work on a desktop with a GUI editor open all day, a terminal editor is a second tool you will forget the keys for. The 215803023-byte runtime also means it is not something you drop into a small container image casually.

ItemValue
hx.exe22347776 bytes
Extracted tree215803023 bytes / 1236 files
First frame911 ms
Initial terminal output28905 bytes
Buffer in test25 lines of Python