This page was written by @iluxav from public sources, last updated for 25.07.1 (2025-07-18), and may lag behind new releases.
Edit code in the terminal with Kakoune-style modal commands and multiple selections, with completion, diagnostics and syntax-aware motions working without plugins.
What you can do with Helix
Get completion, diagnostics, go to definition, hover and rename from language servers without installing plugins.
2 other tools for code completionGood to know
Each language server must be installed separately.
Highlight code and select or move by syntax nodes using tree-sitter grammars.
1 other tool for syntax highlightingGood to know
Indentation rules exist only for some languages.
Open files, buffers and symbols, and search the workspace, from fuzzy pickers.
1 other tool for project searchConfigure the editor, keys, themes and languages in config.toml and languages.toml.
1 other tool for keybindingsWrap long lines on screen without inserting line breaks in the file.
1 other tool for long linesStart in a chosen working directory or open a file at a given line from the command line.
Jump to any visible word by typing the label shown on it.
Show all 11
Save all open buffers automatically after a delay.
Show language server diagnostics inline next to the code.
Explore directories and open files from a picker.
Before you upgrade Helix
Newest firstQuoting and spaces in commands are parsed differently: recheck keymaps with typable commands, and replace :rsort with :sort --reverse.
Building now needs Rust 1.82 or newer.
The GitHub release binaries need an older glibc than in 25.07, so they run on more distributions.
Read the evidence
Show 5 older
The built-in typst-lsp server entry is gone; install tinymist, which is the default Typst server, or define typst-lsp yourself in languages.toml.
External formatters run from the document's directory instead of the editor's working directory.
display-messages now controls window/showMessage messages; set editor.lsp.display-progress-messages = true to keep progress messages.
* now runs search_selection_detect_word_boundaries; the old search_selection moved to A-*.
Building now needs Rust 1.74 or newer.
Helix release history 9
Browse and open project directories from a file explorer picker.
Details
The command line was rewritten with flags and expansions, so quoting changed and :rsort became :sort --reverse; a directory-exploring picker, EditorConfig support, LSP document colors and a new tree-sitter highlighter. 25.07.1 lowers the glibc needed by the GitHub release binaries. Groups 25.07 and 25.07.1.
Also: Cycle multiple LSP hover responses with A-n/A-p, --no-format for :write, goto_column.
25.07.1; building from source needs Rust 1.82.
Seeded by @iluxav with Claude Code (canido)
Read the evidence
External formatters now run from the edited file's directory, so they find that project's formatter config.
Details
External formatters run with the document's directory as working directory; fixes for regressions from 25.01.
25.01.1.
Seeded by @iluxav with Claude Code (canido)
See diagnostics inline at the end of the line or under it.
Details
Pickers use a table layout filterable by column and global search can change its query live; inline diagnostics; keybindings as macros; path completion; switchable clipboard providers; Super key bindings.
Also: Line comments continue on o/O and Enter; snippet tabstops; camelCase and snake_case word motions.
25.01.
Seeded by @iluxav with Claude Code (canido)
Save all open files automatically after a set delay.
Details
Auto-save after a delay, a picker of files changed in version control, writes through a temporary file, and A-n/A-p to cycle LSP signatures.
Also: select_all_siblings (A-a), select_all_children (A-I), :read, tree-sitter based bracket matching.
24.07; building from source needs Rust 1.74.
Seeded by @iluxav with Claude Code (canido)
Jump to any visible word by typing a two-letter label.
Details
file-types in languages.toml accepts globs ({ glob = "Makefile" }); suffix entries are gone and plain filenames no longer match. New jump command, block comment toggle, popup borders, URLs opened with goto_file.
Also: LSP window/showDocument, diagnostic tags, required roots for language servers, a file-absolute-path statusline element.
24.03.
Seeded by @iluxav with Claude Code (canido)
Run several language servers for one language, for example a linter next to the main server.
Details
Language servers are now defined in [language-server.<name>] tables and attached with language-servers = [...] in [[language]]. Fuzzy matching moved to Nucleo; new -w/--working-dir and +N flags; .helix/ignore files.
Also: Special registers (%, #, ., *, +), smart tab, a trailing newline on write.
23.10.
Seeded by @iluxav with Claude Code (canido)
Get highlighting inside embedded code identified by its file extension or shebang.
Details
Languages can be injected by file extension and shebang; a config option excludes the declaration from LSP references; the buffer picker sorts by most recent use.
23.05.
Seeded by @iluxav with Claude Code (canido)
Wrap long lines on screen without changing the file.
Details
Soft-wrap, LSP type hints, per-workspace .helix/config.toml and a workspace-lsp-roots option; goto_*_diag and goto_*_change now select the diagnostic or change range.
Also: Initial LSP snippet completions, a version-control HEAD statusline element, Kitty keyboard protocol on supported terminals.
23.03; building from source needs Rust 1.65.
Seeded by @iluxav with Claude Code (canido)
Starting point
Edit code in the terminal with modal commands, multiple selections and language server features built in.
Details
What Helix offered up to 22.12: Kakoune-style modal editing with multiple selections, built-in language server client, tree-sitter highlighting and motions, fuzzy pickers, and TOML configuration.
Packaged by most Linux distributions; prebuilt binaries on GitHub releases; builds with Rust.
Seeded by @iluxav with Claude Code (canido)