🔗What Makes an Editor an IDE?

When developers talk about an IDE (Integrated Development Environment), the expectation goes well beyond simple text editing. A good IDE provides syntax highlighting, intelligent code completion, real-time error detection, jump-to-definition, find-references, debugging support, and version control integration. It proactively points out syntax errors, missing imports, and sometimes even logical issues as you write.

Helix is a modern, modal, terminal-first editor with built-in Language Server Protocol (LSP) support. It sits between a minimal text editor and a full IDE: fast and uncluttered, but language-aware enough to catch errors, navigate codebases, and suggest completions without requiring plugins. I picked it up looking for something that would feel at home on a remote server and not need a configuration file just to be useful, and it delivered on both.


🔗Why Use an Editor with LSP Support?

  • Code correctness: Real-time diagnostics surface errors before you compile or run.
  • Navigation: Jump-to-definition and find-references work across files without manual searching.
  • Refactoring: Rename symbols, extract functions, and apply code actions through the editor.
  • Consistency: Integrated formatting and linting keep code uniform across a team.
  • Speed: All of this runs inside a terminal with no Electron runtime or GUI overhead.

Helix delivers these features through LSP, which means the same editor interface works across dozens of languages by simply installing the appropriate language server.


🔗How Helix Compares to Other Editors

  • Neovim: Both are modal and terminal-based. Neovim is highly extensible through Lua plugins and has a large plugin ecosystem. Helix prioritizes sane defaults and built-in LSP integration without requiring any configuration to get started. There is no plugin system in Helix; all features are built in.
  • Visual Studio Code: VS Code also uses LSP and has excellent language support. It requires a GUI and runs on the Electron framework, which adds significant memory overhead. Helix runs natively in any terminal.
  • JetBrains IDEs (IntelliJ, PyCharm, etc.): Best-in-class for deep language-specific features, refactoring, and debugging. Helix does not match JetBrains for project-wide refactoring or GUI debugging, but is far lighter and works over SSH without any remote plugin infrastructure.
  • Eclipse and NetBeans: GUI-based Java-era IDEs. Both are heavyweight compared to Helix and are less common in modern workflows.
  • CodeLite / Code::Blocks: Traditional C/C++ IDEs with GUI frontends. Helix supports C/C++ through clangd and is more versatile across languages.
  • KDevelop: KDE's C++ and Qt-focused IDE with project management. Helix does not manage build systems or project files but covers editing and navigation through LSP.

Helix is not trying to replace a monolithic IDE for every workflow. It is a fast, language-aware editor that runs anywhere a terminal exists.


🔗Installing Helix

🔗On FreeBSD

pkg install helix

🔗On Linux (from package managers)

Debian/Ubuntu:

sudo add-apt-repository ppa:maveonair/helix-editor
sudo apt update
sudo apt install helix

Arch Linux:

sudo pacman -S helix

🔗From source (any platform with Rust installed)

git clone https://github.com/helix-editor/helix
cd helix
cargo install --path helix-term --locked

After building from source, copy the runtime directory so Helix can find its grammars and themes:

mkdir -p ~/.config/helix
ln -s /path/to/helix/runtime ~/.config/helix/runtime

🔗Step 1: Check Your Setup with hx --health

After installation, run the built-in diagnostic tool:

hx --health

This checks your Helix installation, locates the runtime directory, lists all supported languages, and shows which language servers are installed or missing for each one. It is the first thing to run after a fresh install.

For a language-specific check:

hx --health rust
hx --health python

This shows whether the language server, formatter, and debugger adapter are available for that language.


🔗Step 2: Install Language Servers

Helix does not bundle language servers. You install them separately through your system's package manager or language toolchain. Some common examples:

LanguageLanguage ServerInstall
Rustrust-analyzerrustup component add rust-analyzer
Pythonpylsppip install python-lsp-server
JavaScript/TypeScripttypescript-language-servernpm install -g typescript-language-server typescript
C/C++clangdpkg install llvm (FreeBSD) or apt install clangd
Gogoplsgo install golang.org/x/tools/gopls@latest
Bashbash-language-servernpm install -g bash-language-server

After installing a language server, rerun hx --health <language> to confirm Helix can find it.


🔗Step 3: Basic Configuration

Helix stores its configuration in ~/.config/helix/config.toml. A minimal starting configuration:

[editor]
line-number = "relative"
mouse = false
auto-save = true

[editor.cursor-shape]
insert = "bar"
normal = "block"
select = "underline"

[keys.normal]
# Example: map space+w to save
space.w = ":w"

Helix does not require configuration to be useful. The defaults are reasonable. Adjust as you learn the editor.


🔗Keybindings: Helix vs Vim

Helix uses modal editing inspired by Vim but with a different key philosophy:

  • Selection before action: In Vim, you typically specify an action then a motion (e.g., dw to delete a word). In Helix, you select first, then act (e.g., w to select a word, then d to delete). This is called selection-first, or kakoune-style editing.
  • Discoverable menus: Pressing Space opens a menu of common actions. Pressing g in normal mode shows navigation options. You do not need to memorize command names up front.
  • No ex-mode for common tasks: File saving (:w), quitting (:q), and opening files (:open) still use colon commands, familiar to Vim users.

If you are coming from Vim or Neovim, expect a short adjustment period. The selection-first model is different but consistent once it clicks.


🔗Remote Editing with SSH

Because Helix runs entirely in a terminal, remote editing over SSH is straightforward:

ssh user@remotehost
hx /path/to/file

No plugins, no remote extension installation, no GUI forwarding needed. Helix runs on the remote machine just as it does locally.

🔗Clipboard integration over SSH

By default, Helix uses the system clipboard of the remote machine, which is not connected to your local clipboard. To bridge the clipboard:

On Linux remotes, install xclip or xsel on the remote, then connect with X11 forwarding:

ssh -Y user@remotehost

The -Y flag enables trusted X11 forwarding. Once connected, yank and paste operations in Helix will use your local clipboard through the X11 channel. This requires X11Forwarding yes in the remote server's /etc/ssh/sshd_config and an X server running locally. On macOS, XQuartz must be installed.

On macOS remotes or modern terminals, some terminals (such as iTerm2 and WezTerm) support OSC 52, which lets terminal applications set the clipboard directly. Helix supports OSC 52 clipboard integration out of the box in recent versions. No SSH flags needed in that case.


🔗Useful Commands to Know

TaskKeys / Command
Open a file:open filename
Save:w
Quit:q
Force quit:q!
Open file pickerSpace f
Open buffer pickerSpace b
Go to definitiongd
Find referencesgr
Rename symbolSpace r
Format file:format
Open command paletteSpace ?

🔗Closing Thoughts

Helix is the kind of editor that gets out of your way quickly. The LSP integration works without a configuration file, the health check tells you exactly what is missing, and the terminal-first design means it behaves the same whether you are on your local machine or three SSH hops deep into a remote server. The selection-first keybinding model takes some getting used to if you are coming from Vim, but the consistency of it becomes an advantage once it is familiar. It is not the right tool for every situation, but for editing and navigating code in a terminal, it earns its place.