And now for the feature level comparison. I tried to write this as a traditional table comparing all features but the blithering ball of suck that is Jekyll and table layout left me in a rage. So there are 15 tables each of which focus on one element of the editors. The benefit to the multiple table approach is the selective winnowing down of options.
NOTE: If you want a good looking, well formatted version of this then please follow this link over to the gist version of this section.
This looks at the editors by commit count and it pretty clearly shows you what is actively under development. With this analysis, we can reduce 8 editors down to 4.
Editor | Commit Count | Stars |
---|---|---|
amp | 1,170 | 3.2K |
glyph | 50 | 68 |
helix | 3,028 | 10.5K |
hired | 78 | 14 |
kibi | 179 | 784 |
lapce | 1,669 | 12.9K |
Neovide | 887 | 7.6K |
pepper | 3,133 | 247 |
Zed | 1,200 | 1.9K |
zee | 137 | 1k |
With the number of editors winnowed down from 8, I've now had some additional time to assess each editor and I can try and craft a coherent paragraph on each. Think of this as the tldr for each editor. My apologies to the project authors where I got stuff wrong; I know you all work hard on your project and I do appreciate it.
- Amp -- A light weight character mode editor with a VI like feel.
- Helix -- A very impressive character mode editor. It feels like there's a lot of tech under the hood.
- Lapce -- A graphical editor with split screening and an embedded terminal. There is a lot of good stuff in the head branch of the git repo so it looks like it will be getting much better in the near future.
- Neovide -- The only one I wasn't able to try. This is a graphical front end on top of NeoVim. Unfortunately Apple wouldn't let it execute either from Brew or a cargo build (cargo is the Rust build tool).
- Zed -- A very impressive graphical editor and the one that is robust enough for me to use today. One of its most intriguing promises is the ability to edit files concurrently with another person. I suspect this is a pair programming style business model. Overall Zed having a commmercial focus is I think good because it argues for a long live span.
- Zee -- A light weight character mode editor.
I know this isn't listed above but it is one of the great Litmus tests for editors.
Editor | Open |
---|---|
amp | Emacs |
helix | VI |
lapce | Graphical; modal mode for VI fans in settings(1) |
Neovide | VI |
Zed | Graphical; configurable key bindings although rough - keymap.json file |
zee | Emacs |
Normally I'd toss out anything Emacs style right from the jump but it is already a small pool.
1 - source: Jakub Panek on Twitter
Editor | Graphical |
---|---|
amp | N |
helix | N |
lapce | Y |
Neovide | Y |
pepper | N |
Zed | Y |
zee | N |
Note 1: I left Zee in here because of its 100 fps claim. Performance really matters; they get props for realizing that.
Note 2: With exactly 2 graphical editors, I have to relax this criteria (perhaps).
Note 3: Neovide is graphical but it is also a VIM style editor (technically a front end to NeoVim) so the graphics are minimal (but if you are a VI person that's what you want).
Computing platforms have a style and conforming to that style / conventions matters.
Editor | Graphical |
---|---|
amp | N |
helix | N |
lapce | N - Only a single menu; File picker responds to ~ but doesn't allow pasting in a path |
Neovide | ? |
pepper | N |
Zed | Yes; Clearly early days but going the right direction |
zee | N |
Note: Given that nothing conforms to platform conventions, either I give up and go home or plow on and accept change.
Lapce gets huge props for integrating a Terminal into its environment giving a very integrated feeling.
Neovide - I couldn't try it so its hard for me to say but it appears to follow platform conventions as much as you can while being true to VI styling.
Zed gets huge props for being recognizably a modern style programming editor. I had no issues conceptually mapping it in the Sublime / TextMate school of design.
Editor | Open |
---|---|
amp | N |
helix | YES - Beautifully implemented; Kudos |
lapce | There is a basic CLI interface in HEAD not yet released so its coming!(1) |
Neovide | Y |
pepper | ? |
Zed | Y |
zee | ? |
1 - source: Jakub Panek on Twitter
Note: There is an Install CLI option and while it didn't have feedback at all, once I did it and typed:
zed .
The directory I was in opened instantly; beautiful.
Editor | Open |
---|---|
amp | ? |
helix | ? |
lapce | N - Seems to be a single editor window only |
Neovide | Y |
pepper | ? |
Zed | Y - it even highlights markdown syntax; swoon |
zee | ? |
Editor | Open |
---|---|
amp | Y |
helix | Y |
lapce | Y |
Neovide | ? |
pepper | N |
Zed | N |
zee | N |
Note: I'm really not sure why I'm not getting syntax highlighting more and I'm worried that I'm doing something wrong. The lack of it deeply surprises me in programming editors. Perhaps it is a generalized shift to LSP support; unclear.
I was really quite sorry to see Pepper drop out here. I originally made a mildly snarky comment about Helix and I apologize for that and the error was mine. This was a configuration issue and Helix has an interesting approach:
- Fetch the grammars
- Build the grammars
- Symlink the grammars
- Diagnose any configuration issues via hx --health
This is documented on their setup page and with the energy and foolishness of a rant, I missed the Symlink step. Blaz the author of Helix reached out to me and helped me through it. Helix has a great set of grammars with a wc -l reporting 93 distinct grammars.
Editor | Open |
---|---|
amp | ? |
helix | ? |
lapce | ? |
Neovide | ? |
Zed | N |
zee | ? |
I wasn't able to confirm this on any of the tools. This is one of those arcane features.
Editor | Open |
---|---|
amp | N |
helix | N |
lapce | N; maybe it has it but if so it isn't easily discoverable. |
Neovide | ? |
Zed | N |
zee | N |
This doesn't seem to be in any editor. However, as much as I believe in autosave, if the underlying editor is actually stable then it matters less.
IMPORTANT: However not only is Auto Save lacking but Lapce allows you to quit without prompting for save. I only just discovered that or I'd have cut it from the options right here. That's not just user hostile but basic hating on the user (imho).
Editor | Open |
---|---|
amp | Unknown |
helix | Unknown |
lapce | Unknown |
Neovide | Y |
pepper | Unknown |
Zed | Unknown |
zee | Unknown |
Yes I need to do more research here. I freely admit that I punted on this one as I've spent far more time on this than I wanted.
Editor | Open |
---|---|
amp | N |
helix | N |
lapce | N - Lapce skips this by only having 1 menu! |
Neovide | N |
pepper | N |
Zed | Y |
zee | N |
The reason for specifically listing this feature is that I'm also running Warp.dev as a terminal manager and it is written in Rust and the bizarre feature omission is a Window menu that lists all the windows.
Editor | Open |
---|---|
amp | ? |
helix | ? |
lapce | ? |
Neovide | Y |
pepper | ? |
Zed | Y |
zee | ? |
As with extensibility, I punted on this one. I was only able to confirm this for Zed but I suspect it is coming down the pike for Lapce.
Editor | Open |
---|---|
amp | ? |
helix | ? |
lapce | N |
Neovide | ? |
pepper | ? |
Zed | Y |
zee | ? |
I'm pretty sure this is in at least Helix and Pepper but I didn't specifically use it. I did use this in Zed and it worked perfectly. Zed also had the more traditional C language style Go to Symbol / Definition stuff you use for C / Java style programming.
Editor | Open |
---|---|
amp | ? |
helix | ? |
lapce | Y (1) |
Neovide | Y |
pepper | ? |
Zed | Y |
zee | ? |
I'm unsure of this feature because, honestly, I couldn't really find info on it.
1 - source: Jakub Panek on Twitter
Editor | Open |
---|---|
amp | N |
helix | N |
lapce | N |
Neovide | N |
pepper | N |
Zed | Y |
zee | N |
None of these editors are particularly discoverable. The lack of overt user interfaces means they get out of the way but that has a cost of making features unknown unless you really dig in -- and you aren't likely to dig in when you can't tell if it has the features you need.
Editor | Open |
---|---|
amp | Y |
helix | Y |
lapce | Y |
Neovide | Y |
pepper | Y |
Zed | Y |
zee | Y |
Uniformly these felt fast. Hooray!
Editor | Open |
---|---|
amp | N |
helix | ? |
lapce | Y |
Neovide | ? |
pepper | N |
Zed | Y |
zee | N |
Editor | Open |
---|---|
amp | Y |
helix | N |
lapce | N |
Neovide | Y |
pepper | N |
Zed | Y |
zee | N |
With none of the editors supporting save on loss of focus, I wouldn't come close to thinking I could use them in this way. Auto Save, in 2022, should be a default (imho). To paraphrase the great Ted Nelson who said something like "Real people trust the car to shift itself", I would argue "Real people trust the editor to automatically save".
Some reached out to me on Twitter and confirmed that Lapce does have LSP integration -- "although we don't have much LSP plugins yet, only Rust/Go/Clangd". That's awesome and I'll be sure to experiment with it.
Digging through Helix docs brought up the issue of LSP (language server protocol) support and the hx --health command. Here is how it looks on my machine:
❯ hx --health
Config file: default
Language file: default
Log file: /Users/sjohnson/.cache/helix/helix.log
Runtime directory: /Users/sjohnson/.cargo/bin/runtime
Language LSP
bash ✘ bash-language-server
c ✔ clangd
c-sharp ✘ OmniSharp
cairo None
clojure ✘ clojure-lsp
cmake ✘ cmake-language-server
comment None
cpon None
cpp ✔ clangd
css ✘ vscode-css-language-server
dart ✘ dart
devicetree None
dockerfile ✘ docker-langserver
edoc None
eex None
ejs None
elixir ✘ elixir-ls
elm ✘ elm-language-server
elvish ✘ elvish
erb None
erlang ✘ erlang_ls
fish None
gdscript None
git-attributes None
git-commit None
git-config None
git-diff None
git-ignore None
git-rebase None
gleam None
glsl None
go ✘ gopls
gomod ✘ gopls
gowork ✘ gopls
graphql None
hare None
haskell ✘ haskell-language-server-wrappe…
hcl ✘ terraform-ls
heex None
html ✘ vscode-html-language-server
idris ✘ idris2-lsp
iex None
java ✘ jdtls
javascript ✘ typescript-language-server
jsdoc None
json ✘ vscode-json-language-server
jsx ✘ typescript-language-server
julia ✘ julia
kotlin ✘ kotlin-language-server
latex ✘ texlab
lean ✘ lean
ledger None
llvm None
llvm-mir None
llvm-mir-yaml None
lua ✘ lua-language-server
make None
markdown None
meson None
mint ✘ mint
nickel ✘ nls
nix ✘ rnix-lsp
nu None
ocaml ✘ ocamllsp
ocaml-interface ✘ ocamllsp
odin None
openscad ✘ openscad-language-server
org None
perl None
php ✘ intelephense
prisma ✘ prisma-language-server
prolog ✘ swipl
protobuf None
python ✘ pylsp
r ✘ R
racket ✘ racket
regex None
rescript ✘ rescript-language-server
rmarkdown ✘ R
ron None
ruby ✔ solargraph
rust ✘ rust-analyzer
scala ✘ metals
scheme None
solidity ✘ solc
sql None
sshclientconfig None
starlark None
svelte ✘ svelteserver
swift ✔ sourcekit-lsp
tablegen None
tfvars ✘ terraform-ls
toml ✘ taplo
tsq None
tsx ✘ typescript-language-server
twig None
typescript ✘ typescript-language-server
v ✘ vls
vala ✘ vala-language-server
verilog ✘ svlangserver
vue ✘ vls
wgsl ✘ wgsl_analyzer
yaml ✘ yaml-language-server
zig ✘ zls
Helix did find solargraph which gives Ruby LSP support.