CLI tool
usagi-flow/evil-helix avatar
usagi-flow/evil-helix

evil-helix: Vim Keybindings in a Rust-Based Helix Fork

Bringing the Helix editor to the evil side

1,383 stars40 forksRustMPL-2.0

At a glance

What is it?
evil-helix is a configurable soft fork of Helix that adds selected Vim commands, motions, visual line mode, modeline support, and adjusted defaults. It suits Helix users who want a Vim-like interface without relying on Scheme plugins.
Who is it for?
Adopt evil-helix if you already prefer Helix and want its modal editing model with the documented Vim bindings. Do not choose it as a complete Vim replacement, because its listed compatibility is limited and several requested features remain goals.
Can I use it commercially?
Yes, with conditions. MPL-2.0 is a weak copyleft licence: you can use it inside commercial and closed-source software, but if you distribute changes to its own files, you must publish those changes under the same licence.
Is it still maintained?
Yes. The repository last received commits 49 days ago.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Why evil-helix Differs from Stock Helix

evil-helix addresses a specific gap between Helix's default interface and the habits of users who learned modal editing in Vim. It retains the Helix editor architecture while adding Vim-style commands, motions, and visual line mode. The documented commands include `a`, `c`, `d`, `y`, and `x`. Motions include `w`, `W`, `e`, `E`, `b`, `B`, `0`, and `$`, while `i` supplies an insert modifier and `V` provides visual line mode.

This is not presented as a full Vim emulation layer. The README describes the bindings as a defined set and explicitly invites issues when bindings are missing. That boundary matters for engineers who expect every Vim workflow to behave identically. It is more appropriate for Helix users adding familiar operations than for users requiring comprehensive Vim compatibility.

The fork also changes defaults and presentation. Helix's `SEL` mode is renamed `VIS`, smart tab is disabled by default, indentation guides can use colored output, file types can be colored in the statusline when `color_modes` is enabled, and window separators have a minimal appearance. Basic Vim modeline support is also included.

Inside the Soft-Fork Architecture

Based on the repository layout, evil-helix carries the Rust components associated with Helix rather than presenting a separate extension host around an unchanged editor binary. The workspace includes `helix-core`, `helix-view`, `helix-term`, `helix-tui`, `helix-lsp`, `helix-loader`, `helix-vcs`, `helix-parsec`, and `helix-dap`, plus an `xtask` crate. The default workspace member is `helix-term`.

Its project philosophy places optional behavior in the editor and exposes it through configuration. The most visible switch is `editor.evil`, which defaults to `true`. Setting it to `false` disables evil-helix behavior without requiring a second build. This gives users an explicit escape hatch when a fork-specific feature conflicts with normal Helix expectations.

The upstream relationship is a material maintenance concern. The README calls evil-helix a soft fork that rebases its changes onto upstream Helix's `master` branch and seeks to isolate new work to reduce conflicts. It also states that a hard fork would be considered only as a last resort. The repository's goal of ensuring rebasing remains possible through CI is forward-looking, not proof that every future rebase will be conflict-free.

Installing evil-helix from a Release Package

The README first directs users to download a package from the GitHub releases page. Its archive command uses `<VERSION>`, `<ARCH>`, and `<OS>` placeholders, so these values must match the release asset selected by the user. The documented commands extract the package under `/opt` and create a symbolic link in `/usr/local/bin`.

The `<VERSION>` placeholder in the documented URL represents a tag such as `release-20250915`; the final asset still needs the correct architecture and operating system suffix. The released archives are named with the `evil-helix-` prefix.

After the extraction and link commands, the linked executable can be used as the editor entry point for a first session. The README does not provide an exact launch command beyond the `/usr/local/bin` link, so an application name should not be inferred solely from this installation section. For distribution-managed systems, the project's first recommendation is to use an available system package instead. Its packaging status is linked through Repology.

Installing evil-helix with the Documented Archive Commands

If no package is available for the system, the README provides this release-package procedure. Replace the three placeholders with values from the selected release asset, then run the commands with the required privileges. The archive is downloaded as `helix.tar.gz`, extracted under `/opt`, and linked into `/usr/local/bin`.

sh
cd /opt
sudo curl -Lo helix.tar.gz https://github.com/usagi-flow/evil-helix/releases/download/release-<VERSION>/evil-helix-<ARCH>-<OS>.tar.gz
sudo tar -xf helix.tar.gz
cd /usr/local/bin
sudo ln -sv /opt/helix/hx .

The link target shown by the README is `/opt/helix/hx`. The final command creates or reports a symbolic link named `hx` in `/usr/local/bin`. The exact archive asset must match the user's architecture and operating system because the README does not define a separate installer for those values.

Configuring the Vim Layer for a First Session

A useful first configuration step is to decide whether evil-helix behavior should be active at all. The documented setting is true by default, so users who choose stock-style Helix behavior must disable it explicitly. The value belongs in Helix-style TOML configuration under the `editor` table.

The setting controls the fork's behavior as a group. The README does not document separate keys for turning off modeline handling, visual line mode, or individual commands. It also does not document a configuration file location, so this section does not invent one. Existing Helix users should consult the configuration conventions they already use and add this documented key to that configuration.

The initial workflow is straightforward: install through a package manager when available or extract a release archive, decide whether `editor.evil` should remain true, and use the listed command and motion keys in normal editing sessions. If a binding is absent, the README treats that as an issue-reporting case rather than claiming complete Vim coverage.

Configuring `editor.evil` in TOML

The project provides a direct TOML option for turning off its fork-specific behavior. The following is the exact setting documented by the README. With `evil = true`, the added Vim-oriented behavior remains enabled by default.

toml
[editor]
evil = true # Default; set this to `false` to disable evil-helix behavior

Users who prefer stock Helix behavior can set `evil` to `false` in the same TOML structure. This is a single global behavior switch, as far as the README documents. No separate configuration keys are given for the listed commands, motions, modeline support, or visual line mode. The repository does not specify the configuration path.

Configuration Trade-Offs in evil-helix

The fork's strongest design choice is also its clearest trade-off. It treats Vim-like behavior as compiled editor functionality rather than a Scheme plugin. The stated reasons are lower compatibility risk and better performance than a plugin-based implementation, but the repository lists no benchmark data or comparative timing. No benchmark data or comparative timing appears in the documentation.

That approach makes the behavior central to the editor, yet it also couples users to a separately released build. Users must follow evil-helix releases when they want its version of behavior, and changes may arrive through rebases onto upstream Helix. The documented release names follow date-based tags such as `release-20250915` and `release-20250823`, supporting small and regular releases rather than a single major version.

The `editor.evil` switch limits that commitment for individual behavior. It can return a user to non-evil behavior from the same build, but it is not presented as a selective compatibility layer. Modeline support, defaults, visual naming, and interface changes should therefore be checked before replacing an established Helix installation.

Maintenance Scope and MPL-2.0 Obligations

The repository is not archived, and its last push was on 2026-09-04. Recent release records include `release-20250915`, dated 2025-09-16, `release-20250823`, dated 2025-08-24, and `release-20250601`, dated 2025-06-01. These records show changes around the 2025 release period, but the last push date is the direct fact to use when assessing current maintenance.

Upgrade cost comes mainly from divergence from upstream Helix. Rebases are expected, and the project tries to keep changes isolated, yet compatibility can still require attention when upstream changes the surrounding Rust code. Rebased builds may also carry changes in defaults or bindings that users need to review through the changelog and release material.

The workspace metadata identifies `MPL-2.0` as the license. Software distributed under that license must be handled according to its file-level obligations, and modified MPL-covered files may have distinct notice requirements. The repository also retains upstream author and project metadata, which is consistent with a soft fork. Organizations should review the actual `LICENSE` and their distribution practices rather than treating the license identifier as complete legal guidance.

Choosing Between evil-helix and Other Helix Builds

Stock Helix is the direct alternative. It follows upstream's narrower core and defers additional functionality largely to a future Scheme-based plugin system. evil-helix instead modifies the editor itself, supplies a selected Vim interface, renames select mode, changes smart-tab behavior, and offers an integrated `editor.evil` switch. Users who want upstream's interface without fork behavior should choose stock Helix.

Vim itself is not an equivalent replacement based on the available documentation. evil-helix offers selected commands and motions, but the README does not claim full Vim command coverage, Vimscript support, or identical modes. Users requiring an established Vim configuration and broad compatibility have no basis for treating these bindings as a drop-in replacement.

A Scheme-based extension approach is also different in mechanism. The project philosophy favors built-in configurable features and does not force Scheme or Lisp onto users. An upstream or third-party plugin workflow would extend Helix through its plugin system, while evil-helix places its behavior in the editor build. The documentation presents this as a design choice and compatibility direction, not a formal comparison against a named plugin package.

Editorial conclusion

Adopt evil-helix if you already prefer Helix and want its modal editing model with the documented Vim bindings. Do not choose it as a complete Vim replacement, because its listed compatibility is limited and several requested features remain goals. Verify first that the documented keys match your editing habits, that `editor.evil` provides the behavior you want, and that the upstream rebase policy is acceptable for your configuration.

Frequently asked questions

How do I install evil-helix?

The README recommends a system package when one is available. Otherwise, download a release package, extract it under `/opt`, and add a symbolic link in `/usr/local/bin` using the documented commands.

How do I disable Vim behavior in evil-helix?

Set `editor.evil` to `false` in TOML configuration. The option is enabled by default, and disabling it deactivates evil-helix behavior without requiring a different build.

Does evil-helix support every Vim keybinding?

No complete Vim compatibility is claimed. The README lists selected commands, modifiers, motions, and visual line mode, and invites issues when particular bindings are missing.

How is evil-helix related to upstream Helix?

It is a soft fork that rebases changes onto upstream Helix's `master` branch and tries to isolate fork work to reduce conflicts. A hard fork is described as a last resort.

What license does evil-helix use?

The workspace metadata identifies `MPL-2.0`. The repository includes a `LICENSE` file, which distributors and modifiers should review for applicable obligations.

Official sources

  1. License: MPL-2.0
  2. Project website
  3. README
  4. Releases
  5. usagi-flow/evil-helix on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/usagi-flow-evil-helix.svg)](https://hysenlabs.com/projects/usagi-flow-evil-helix)

Was this useful?