Helix: A post-modern text editor

2026-03-0623:53342186helix-editor.com

Multiple cursors as a core editing primitive, inspired by Kakoune. Commands manipulate selections which allows concurrent code editing. Tree-sitter integration Tree-sitter produces error tolerant and…

Multiple cursors as a core editing primitive, inspired by Kakoune. Commands manipulate selections which allows concurrent code editing.

Tree-sitter integration

Tree-sitter produces error tolerant and robust syntax trees, which enables better syntax highlighting, indent calculation and code navigation.
Navigate and select functions, classes, comments, etc and select syntax tree nodes instead of plain text.

Language server support

Language specific auto completion, goto definition, documentation, diagnostics and other IDE features with no additional configuration.

Built in Rust, for the terminal

No Electron. No VimScript. No JavaScript. Use it over ssh, tmux, or a plain terminal. Your laptop battery life will thank you.
Fuzzy finder to jump to files and symbols, project wide search, beautiful themes, auto closing bracket pairs, surround integration and more.

It's a joke. If Neovim is the modern Vim, then Helix is post-modern.

Is it any good?

Yes.

Are there plans for a GUI frontend?

Eventually, yes! We'd like to prototype a WebGPU-based alternative frontend. See the discussion on GitHub.

What about plugins?

While there is currently no plugin system available, we do intend to eventually have one. But this will take some time (more discussion here).

How does it differ from Kakoune?

Mainly by having more things built-in. Kakoune is composable by design, relying on external tooling to manage splits and provide language server support. Helix instead chooses to integrate more. We also use tree-sitter for highlighting and code analysis.

How does it differ from Vim?

By starting from scratch we were able to learn from our experience with Vim and make some breaking changes. The result is a much smaller codebase and a modern set of defaults. It's easier to get started if you've never used a modal editor before, and there's much less fiddling with config files.

Contribute code on GitHub.

Discuss the project on Matrix.

Sponsor development on OpenCollective.


Read the original article

Comments

  • By lofatdairy 2026-03-0718:124 reply

    This is only tangentially related, but regarding:

    >>Post-modern?!

    >It's a joke. If Neovim is the modern Vim, then Helix is post-modern.

    It's interesting that postmodern is so often used by people, perhaps less familiar with the arts and the humanities, to mean "an update to modern" or a progression thereof. They use it in a strictly literal sense, eschewing the precise meaning of the term they're referencing by mere addition of discontinuity as incremental difference.

    Obviously, there's little impact to this. The term is hardly degraded by engineers advertising to other engineers. It looks a touch unread, but then again we have people like Thiel and Luckey misinterpreting Tolkien, so again it's hardly the most egregious example. I guess it just jumped out to me because I was hoping to see something creative truly postmodern.

    • By ctmnt 2026-03-0718:421 reply

      That jumped out at me too the first time I ran into Helix making this joke, and I was also disappointed to find that they meant modern++.

      That said, I’m not sure I agree with your assessment that it’s wrong, exactly. Postmodernism did indeed follow modernism and come into being as a reaction to modernism. So I think “postmodernism” has a naive and original sense of being “what follows modernism”. Decades (so many at this point!) of discourse have added layers to that and undermined it and generally made it more complex. But the underlying meaning of the term remains.

      (If your instinct is to respond with arguments about how works not limited to late 20th century western culture can be nonetheless classified as postmodern, I hear you, but the fact that the term itself was only coined post modernism remains, and is all I’m pointing to.)

      Personally, I get more hung up on people using “modern” to mean “new”. Then to use “postmodern” to mean “more new” while to my ears (eyes) it means “dated af” is even funnier and more jarring.

      Helix, the first editor to not believe in grand narratives. Helix, the relativist editor. Helix, now updated with the latest from Foucault and Derrida!

      • By lofatdairy 2026-03-080:051 reply

        >Postmodernism did indeed follow modernism and come into being as a reaction to modernism.

        I definitely agree that, strictly speaking, postmodernism is a somewhat loose label for an eclectic set of ideas and expressions following modernism. My issue was not with the label being denotatively incorrect – that postmodernism implies a deliberate and retrospective relation to what is labeled "modern" – but rather that the term invokes a spirit that is utterly missing from the project.

        There is no rejection of teleological narratives, and in fact by misapplying this term acts to reinforcing them. It doesn't meaningful critique the projects its in conversation with except in terms that reinforce the underlying assumptions that motivated their production. It critiques Vim in terms of codebase complexity and multiplexity, and these concepts are nothing if not deeply familiar. Even with regards to the concept of coding as the composition and production of language, Helix only looks to make that process more efficient, rather than examine how this process reproduces itself, or how intent is masked and produced through abstraction and reference to the work of other programmers/authors.

        I am not saying that it should have done that. It is by all means a perfectly good editor. But a perfectly good editor does not a postmodern editor make.

        If anything, one could argue that the process of vibecoding is more recognizably postmodern, especially as a strict rejection of the modernist belief system that produces that process of coding. Its nondeterminism rejects efficient, coherent processes. It requires one to reimagine production as its ends, rather than by beginning with conventional initialization rituals. Its discursive rather than dictatorial.

        Not to say vibecoding is the end of coding or even the way "forward", just as to say postmodernism is not the teleological end to thought.

        • By ctmnt 2026-03-083:41

          Lol. You win.

          Good point on vibing though.

    • By the_hoser 2026-03-0718:261 reply

      Blame Perl. As far as I can tell, they started it.

    • By humanizersequel 2026-03-0719:202 reply

      >we have people like Thiel and Luckey misinterpreting Tolkien

      Could you provide an example / be more specific about this?

      • By NERD_ALERT 2026-03-0720:051 reply

        Peter Thiel owns a company called Palantir that designs its offices to look like Hobbiton.

        It might be less of a misinterpretation and more of an on the nose joke about being overtly evil.

        • By lofatdairy 2026-03-080:46

          I mean its fair to say that its deliberately on the nose. However, I would argue that despite being definitionally correct, Palantir still represents a misinterpretation by discarding the works in their whole. I brought it up because postmodern does correctly imply a reaction to what is "modern", but its also a body of work in its own right.

          This is not to say that Tolkien's authorial intent is final, nor necessarily discernible, but we are obligated to examine the palantirs' presentation as not just a passive object with certain, defined qualities, but as devices that have their own consequential histories within the narrative. Thiel naming his company after a tool presented textually as fallible, misleading, and myopic (in addition to its obvious power) with ostensibly no desire to attach such connotations to the company requires, in my mind, at least a superficial reading. We can even disregard the fact that these were mostly tools for an evil opposed by Tolkien, and not make the (valid) argument that their presentation within the text is could be considered direct argument in opposition to their creation. I personally think that to build a company and name it after a work that argues against that company's mission/purpose requires misinterpretation of the reference material, both in terms of poor comprehension of metaphor and as a poor response to the text and the body of discourse that surrounds and infuses it.

      • By ryanlbrown 2026-03-0721:57

        They are Tolkien fans and yet they are building the devices (Palantir, Anduril) which evil will eventually use to dominate. Palantir is well-named but tragic that a fan would build it. Anduril is poorly-named as it is the sword used to combat industrial power rather than represent it.

  • By Curiositry 2026-03-075:573 reply

    This has been my main editor for prose and code for a few years now (Sublime Text -> Atom -> Vim -> Helix). Overall, it has been great. Many LSPs work almost out-of-the-box, and my config is a fraction the size of my old .vimrc.

    Surprisingly, it didn’t take that long to update my Vim muscle memory. Days or weeks, maybe? However, I still have mixed feelings about modal editors in general, and most of my gripes with Helix are actually about modal editors and/or console editors in general.

    Code folding is a feature I’m still waiting for.

    • By wilkystyle 2026-03-0711:422 reply

      Curious to hear your gripes about modal editors! I'm a long time Emacs user (traditional keybindings, not evil-mode), but I also started using Vim in parallel a little over a decade ago. I feel very proficient/productive in both, regularly using many of Vim's more advanced motions and functionality. I generally love the power and composability of Vim text objects, and definitely experience the benefit of using them. But there are some times where I am doing things like many small edits within a line where rapidly changing modes for all of the edits starts to feel cumbersome.

      For Emacs, I use multiple cursors and a treesitter-based plug-in for incrementally expanding or reducing the selection by text objects. I also have a collection of my own helper functions for working with text that make my non-modal Emacs approach still feel very comparable to the power of manipulating text in Vim.

      Curious to hear if your issues with modal editing are similar.

      • By Curiositry 2026-03-0723:05

        - It feels like I know all the efficient keybindings, but when someone looks over my shoulder, I become conscious of how much time I spend mashing Esc/CapsLock and i/I/a/A/o/O, compared to how much editing actually happens.

        - I have nomouse mode on, to try to learn modal editors properly. But the mouse is actually fairly fast for getting to a specific cursor position. In theory, using Helix motions could be faster (and there's gw if I don't know what motion to use). In practice, the mental process of turning a point on the coordinate plane into the correct series of motions (including i) feels vastly slower.

        Still, Vim, Helix, etc are incredible for structural manipulation of text, and I miss what they provide any time I edit text somewhere else, even with the universal keybindings that are available for navigating/selecting/deleting words, lines, etc. I tried Vim mode in Zed and it just didn't cut it.

        Some things about Helix that I particularly like: speed and stability (no weird lag on visual block insert!), the jump to diagnostics/changes pattern (]d <Space>a is a surprisingly nice spellcheck interface, with <Space>d for the overview), the jumplist, and the good-by-default fuzzy pickers.

    • By cassepipe 2026-03-0714:164 reply

      My main gripe with modal editors is that they still use the Escape key to go back to normal mode even though Escape was chosen for historical reasons (used to sit much much closer to the home row on older Unix Keyboards) In Linux and MacOs I can change it with just one gui setting but it's still annoying how everyone went with it. It's not mentionned in most vim tutorials. According to a vim reddit poll, at least half of the users are just using Escape where it is now instead of one of the alternatives. This is beyond me, it feels like someone inventing glasses in order to see better but everyone settled on cast iron frames.

      • By andrewl 2026-03-0714:572 reply

        Cassepipe, it’s not a great default for sure. What do you have yours mapped to? I mapped jj to return to normal mode and also save my file. So, as I’m typing, I just hit jj, the jj vanishes, and this command is run:

        <Esc>:w<CR>

        I could just have it escape instead without saving.

        If I hadn’t chose jj it would have been ff, which is also always under an index finger. I do wish I’d been clued into the idea when I started with Vim instead of two years later.

        • By cassepipe 2026-03-0715:052 reply

          I find the jj/jk hack a bit too clever for my taste. I just map CapsLock to Escape system-wide because it also unlocks quick escaping for shells vi-modes too and I realized that actually Escape is a really nice key to have around in a lot of UIs to get out/go back/cancel what you are doing. I also like that it's a simple gui setting away (or registry key editing in windows).

          I either put CapsLock where Escape sits or use both shifts simultaneously (one cancels it) but even then I almost never use it. The rare times I need to type a lot of uppercase together is generally code in vim and visual selection + gU does the job.

          The point of my comment was not to shill for a particular solution though but for the vim community to acknowledge the problem publicly instead of it being some insider knowledge you discover in a random internet comment six months into fighting vim (if you haven't dropped out yet)

          • By zargon 2026-03-0716:232 reply

            What key would be a good candidate as a default though? Imagine the memes for exiting vim if you needed a modifier to get into normal mode. Caps lock is truly a useless key and should be escape anyway.

            • By dunham 2026-03-0717:50

              As someone who cut their teeth on a sun "programmer" layout, I really need control to be in that position. I might try mapping the vestigial control key to escape though. Or maybe the hack that dtj1123 describes (tap is escape, hold is control), if I can pull that off on macos.

            • By sodapopcan 2026-03-0719:43

              <ctrl-[> always works out of the box which is less of a stretch than esc.

              I do jk as I always find a roll easier on the fingers than a double-tap jj or kk. You could also use space provided you aren't using one of those distros that bases its identity on the spacebar.

          • By gigatexal 2026-03-0722:17

            Yea for me capslock is a systemwide esc for me. Works great.

        • By arbitrandomuser 2026-03-1021:20

          doesnt it get annoying when you actually have to type two adjacent j ?

      • By dtj1123 2026-03-0717:123 reply

        I have caps remapped to esc when tapped, and ctrl when held. Takes perhaps a weekend to get used to, but once the muscle memory is there it feels incredibly comfortable and natural.

        • By gpvos 2026-03-0720:413 reply

          Which tool can do that kind of wizardry? I've seen either but not both.

          • By lkjdsklf 2026-03-0723:39

            I have similar types of bindings. I just found a keyboard that can use ZMK. There's quite a few out there.

            ZMK (or it's free software cousin QMK) are super flexible and you can create lots of custom behaviors for keys (tap/hold behaviors, double press, layering, etc...). It takes some time and effort to learn how to set it all up. Some of the more complicated behaviors require using their dsl for mapping the keys instead of their GUI editor. Considering the ridiculous amount of hours I spend at my computer using a keyboard, I felt it was worth the investment in learning.

          • By katsura 2026-03-0722:18

            On macOS I use Karabiner-Elements to do the exact same thing. Also, my config is only applied in terminals, everywhere else the original functionality is kept. So, I'd say it is quite flexible.

          • By dtj1123 2026-03-0810:25

            Karabiner on macos, keyd on Linux.

        • By dev-ns8 2026-03-0718:473 reply

          Is this macro mapped in vim or OS level? Sounds interesting.

          • By cassepipe 2026-03-0718:521 reply

            Last time I checked, on all OSes you need to install some third-party software alas. Hopefully I am wrong now.

          • By dtj1123 2026-03-0810:30

            I believe it's done via a daemon that intercepts keystrokes

          • By CorrectHorseBat 2026-03-0719:17

            I configure it in the firmware of my keyboard with QMK

        • By cassepipe 2026-03-0718:51

          I have hesitated many times to set this up but I don't want to get used to something that I cannot set up in less than 30 seconds on a new machine.

          Not having Escape where CapsLock sits on a new machine already makes it infuriatingly unusable already :)

      • By grayrest 2026-03-0721:392 reply

        I map caps to ctrl and do ctrl-[ to get to normal mode. The main reason is using Vim bindings in other editors where Esc can get intercepted by other bindings but ctrl-[ has always worked everywhere.

        • By cassepipe 2026-03-0722:27

          My opinion is that going back to normal mode is too important a key to be a key combo, and a weird one at that (is it [ or ] ?). I am pretty sure you can get used to it but we humans get used to anything really, doesn't make it good. My pressing on CapsLock happens at a subconscious level. Quick edit and then punctuate with CapsLock with the pinkie. Some random key combo is not acceptable.

          But again my point is that the default sucks. You probably learned a about Ctrl + [ while looking online for alternatives after realizing the default sucked

        • By zem 2026-03-0723:051 reply

          at least on linux you can map caps lock to esc if tapped and ctrl if held

      • By sodapopcan 2026-03-0719:402 reply

        I mean... if people don't mind reaching, so what? I purposefully don't remap my leader key, although I don't have many leader mappings so it's not like I'm reaching for it constantly.

        • By paddim8 2026-03-0723:201 reply

          It is not good for your wrists. Don't do that to yourself

          • By sodapopcan 2026-03-0820:59

            My wrists are fine! Unless by "you" you mean the people reaching for escape.

        • By cassepipe 2026-03-0722:371 reply

          I mean if people don't mind having cast iron glasses, sure

          No but really, vim's paradim that you should go back to normal mode constantly. With the current situation you get posts on the vim subreddit asking/telling you about insert mode editing commands. You might as well use Emacs at that point, at least it would be the intended workflow

          • By sodapopcan 2026-03-0820:581 reply

            Ah so you're saying people would probably not ask these question if exiting insert mode had a more accessible key?

            • By cassepipe 2026-03-0821:591 reply

              Exactly

              • By sodapopcan 2026-03-0822:25

                Possibly, though would have to see data, I guess. I feel like a lot of people are just curious about Vim and spend all their time in insert mode anyway. I have seen a bunch of those questions around "how would I do this without exiting insert mode" questions, though I'm not sure that having a more accessible escape key would change all of their minds. The "I want to use this new thing but I'm only interested in using it in a way that I'm used to" mindset is rampant among programmers.

    • By the_killer 2026-03-082:14

      [flagged]

  • By bayesianbot 2026-03-076:317 reply

    Tried it again few days ago. I kinda get that currently you can only use AI on Helix through LSP, but on top of that it does not have auto-refreshing files when changed outside - makes it really hard to work with external AIs, as I'm just constantly worrying if I'm editing a stale file.

    • By small_scombrus 2026-03-076:341 reply

      I know it's not a proper fix, but helix does have `:reload` and `:reload-all` commands

      I have reload-all bound to Ctrl-r

    • By g947o 2026-03-0715:493 reply

      GitHub Copilot, Claude Code and Codex provide fairly good IDE integrations. They don't just edit files behind your back. They actually edit the files you have in the IDEs using editor APIs and even show you a nice diff view. This way you never have content that is out of sync. I find this approach very usable and appealing.

      On the other hand, many of the AI tools and their companies think that you should completely ditch IDEs for CLIs only, because "nobody needs to write code anymore". Some of them even stopped maintaining IDE extensions and go all-in in CLIs.

      (I call that complete BS)

      • By yonatan8070 2026-03-0717:13

        I've noticed that Codex usually uses the native editing tools and shows me a diff, but sometimes it just sidesteps that and does a cat > file << EOF, so I need to rely on Git diffs to tell what it did.

      • By MrJohz 2026-03-0718:151 reply

        > This way you never have content that is out of sync.

        They can definitely go out of sync, particularly if something that isn't the editor or the AI changes the code (e.g. running shell commands or opening the file in a different editor and making changes there). I've had a whole load of issues with VSCode where there's been spurious edits all over the place that show up again even if I try and revert them, because every time the AI makes an unrelated edit, VSCode tries to reset the file to the version it thinks exists and then play the AI's edits on top.

        • By g947o 2026-03-0723:59

          That problem already existed long before the age of LLMs?

      • By buzzerbetrayed 2026-03-0716:021 reply

        I don’t even open a text editor anymore 90% of the time. Seems clear to me that IDEs, in the traditional sense, don’t really have a place in the future of software creation. They might morph into something that does, but definitely not in their current form, imo.

        • By satvikpendem 2026-03-0716:361 reply

          If you actually want to engineer properly and review the code rather than pushing out vibe coded slop PRs, then IDEs absolutely do have a future.

          • By mbrumlow 2026-03-0718:331 reply

            > If you actually want to engineer properly.

            I think this statement is misguided, and potentially comes from a lack of experience in getting AI coders to produce quality.

            Proper engineering does not come about from the tools you use or how you use them. Proper engineering has always come from thought, and reasoning, it never was about the act of coding. It always was about the systems thinking and expressing the goals and desires that matched the requirements.

            IDEs were never needed to properly engineer and in the days of AI will become increasingly less important.

            Tools for planning, reviewing, and commenting on code are the future. The necessity to edit actual code is coming to an end.

            • By satvikpendem 2026-03-0719:01

              Yes, that's what I said, I'm contrasting properly engineered AI code to vibe coded slop AI code, not that human written code is inherently better engineered.

    • By dayjah 2026-03-078:51

      I was feeling this pain also; so I switched my workflow to watching file changes with lazygit, and then switching to helix to make small tweaks.

      Another option you may want to try is mux (github.com/coder/mux). It wraps the LLM in a nice interface which has the ability to do line/block comments on changes by the LLM that then goes goes into your next prompt. It’s very early stage though: v0.19.0.

    • By clouedoc 2026-03-077:10

      With time I actually came to get accustomed to it and to enjoy my files not reloading automatically with Claude Code changes.

    • By vaylian 2026-03-076:593 reply

      > you can only use AI on Helix through LSP

      How do other editors do this, if they don't use LSPs? Helix specifically choses LSP as the integration mechanism (in combination with TreeSitter) for supporting different programming languages, because it is a language-agnostic protocol and therefore only needs to be implemented once. Is there some established AI-agnostic protocol/interface? I don't think MCP would work here?

        • By beaker52 2026-03-0710:022 reply

          This is a distinctly Zed solution - trying to move the agent experience into the editor, rather than just giving the agent an interface with which to control and read from the editor.

          Not only do the most popular editors have little-to-no incentive to implement it (they’re more interested in pushing their own first-class implementations, rather than integrating those of others), it’s much more work to integrate the evolving agent experience into the IDE than it would be to provide IDE integration points for the agents themselves.

          So, I think this project would have been much more successful if it had been more focussed on keeping the agent and IDE experiences separated but united by the protocol, instead of trying to deeply marry them. But that’s not in line with Zed’s vision and monetization strategy.

          It won’t be long before the big players start to release their own cloud-based editors. They’ll be cloud-based because the moat is wider, and they’ll try to move coding to the cloud in the way that Google Workspaces moved docs to the cloud. Probably with huge token discounts to capture people. If you squint, you can already see this starting to happen with Claude Desktop, which runs its agent loop on the cloud (you can tell because skills appear to need to be uploaded).

          Notably, Microsoft, with VSCode and GitHub have a web-based editor advantage in this space, but no models.

      • By nikita2206 2026-03-0711:041 reply

        Just watching filesystem for file changes and updating the in-memory view of the file on any change? This isn’t really relevant to MCP, though one option is to provide a different tool to the AI agent for file modifications, which would make modifications through the file editor itself.

        • By vaylian 2026-03-0711:10

          > Just watching filesystem for file changes

          This is non-trivial, if you want to do it efficiently. On Linux you can set up an inotify listener for individual files, but not for entire directories. This also breaks down if you are working with data on non-local drives.

      • By small_scombrus 2026-03-077:101 reply

        > Is there some established AI-agnostic protocol/interface?

        AFAIK no

    • By burke 2026-03-0717:28

      The latter is pretty easy to vibe-patch in:

      https://github.com/burke/helix/pull/1

    • By mgrandl 2026-03-086:24

      Man I heard about this being addressed soon for years. I have given up on Helix by now, but it’s wild that this still hasn’t been released.

HackerNews