Helide

Helix, with the workspace built in. Everything Helix does works the same way, and its own documentation still applies. This page covers what Helide adds.

install

From a release. Download the tarball from the latest release, unpack it anywhere and run the hx inside. It finds the runtime folder next to it. Linux x86_64 only for now.

tar xf helide-v0.1.0-x86_64-linux.tar.xz
./helide-v0.1.0-x86_64-linux/hx .

From source, with Rust installed:

git clone https://github.com/ujjwalvivek/helide-rs
cd helide-rs
cargo install --path helix-term --locked
ln -Ts "$PWD/runtime" ~/.config/helix/runtime
hx --grammar fetch && hx --grammar build

Helide reads your Helix config in ~/.config/helix. The agent panel needs claude or opencode on your PATH, the code stats need scc, and a Nerd Font makes the file icons show.

opening a project

hx, hx ., hx folder/Opens the project and restores its workspace: tabs, splits, cursors, panels and their sizes, terminal tabs and agent tabs.
hx fileA quick edit: just the file, every panel closed, and nothing saved over the project's workspace.

Without a saved workspace, Helide starts on a welcome screen: o open folder, f find file, t file tree, n new file, c config, q quit, and 1–6 for recent projects.

panels and keys

Ctrl+1File tree
Ctrl+2Git panel
Ctrl+4Terminal
Ctrl+5Agents
F11 or Space zZen: hide every panel and the frame, or bring them back
Ctrl+,Open the config
Ctrl+PgUp Ctrl+PgDnPrevious and next file
Alt+PgUp Alt+PgDnPrevious and next layout
Alt+Shift+←→↑↓Resize the sidebar and the terminal; with the agents focused, the agent panel

A panel key shows and focuses its panel, focuses it if it is shown, and hides it if it is focused. Every panel edge can also be dragged.

file tree

j k, Ctrl+d Ctrl+u, g GMove, by a row, half a page, or to the ends
Enter or oOpen the file, or open and close the folder
l hOpen a folder; close it, or go to its parent
v s tOpen in a split beside, a split below, or a new layout
aNew file; end the name with / for a folder. The + on the FILES title does the same.
r dRename; delete, after asking. Tabs of deleted files close unless they have unsaved edits.
. R qShow hidden files; re-read; hide the tree

The tree follows the disk as files change. Under it, when it is tall enough, are code stats for the folder in view (the selected folder, or the selected file's): lines of code by language, and the COCOMO and LOCOMO estimates of what the code would cost a team or a model to write. They come from scc.

git panel

Changes, staged files, untracked files and stashes, then the commit graph, with a summary of the selected commit (or HEAD) at the bottom. Its file list scrolls on its own.

SpaceStage or unstage a file or hunk; pop a stash
l hList a file's hunks; collapse them
Enter or dOpen the diff as a tab; on a hunk, jump to it; on a commit or stash, show it
v Ctrl+sThe diff in a split beside or below
oOpen the file itself
x aDiscard a file or hunk, or drop a stash, after asking; stage everything
c A mCommit; amend; write a commit message with a model
b BSwitch branch; new branch
z ZStash; pop the latest stash
P p fPush; pull; fetch
R ? qRefresh; list these keys; hide

With the mouse: a click on a file opens its diff, a double click lists its hunks, a right click opens the file. A diff tab shows the whole file with added lines tinted green and removed ones red, and stays current as the file changes.

tabs and splits

Each side-by-side split has its own row of file tabs on the border above it. A file joins a row when that split shows it, and stays until you close it there or drag it away. A file open in two splits has a tab in both.

clickShow the file in its split
drag along the rowReorder; the other tabs slide aside
drag to another split's rowMove the file there, at the end
drag into a viewOpen it there, or split it off by dropping near an edge
drag onto an agent or terminalType the file's path there
double clickRename or move the file by editing its path; for a new file, save it there
×Close it in that row, or close the file if this was its last tab
middle clickClose the file
+A new file in that split

Rows of tabs are saved with the workspace. Layouts are whole arrangements of splits, like separate screens: :tab-new makes one, and when there is more than one they are numbered on the right of the border under LAYOUTS.

terminal

:terminal [command]A new tab, running the command or a shell. Alias :term.
:terminal-split [command]A pane beside the focused one. Alias :tsplit.
drag a tab into the panelJoin it to the shown tab as a pane
double click a tabName it

Tabs come back with the workspace, with their panes, names, folders and programs. A file path printed in the terminal can be clicked to open it.

agents

:agent claude, :agent opencodeA new agent tab. The + on the AGENTS title offers whichever is installed.
Space @Mention the current file, and the selected lines, in the agent
:accept :rejectTake or refuse an edit Claude proposed as a diff

Agent tabs reopen on the conversation they were in, including after /clear or /resume in Claude and /sessions in OpenCode. A tab shows ● while the agent works and ✓ when it finished while you were elsewhere, with a desktop notification for long runs. Claude Code connects to Helide the way it does to its VS Code extension, so it sees your selection and proposes edits as diffs in a tab.

time travel

Helide keeps a private copy of every file as you open it, each time you save it, and every half minute while it has unsaved edits. :history (or :time-travel) lists the versions with how they differ from now, and previews each one: a green bar marks lines that would come back, a red mark where lines of now would go. Enter puts the version back as one edit, so u undoes it.

:history git does the same through the commits that changed the file. Copies older than a day are thinned to one an hour, older than a month to one a day; files over 1 MB are not kept.

markdown preview

Space m, :preview, or PREVIEW on the border renders a Markdown file in the pane beside it, with headings, lists, tables, code blocks and quotes.

model commands

:rewrite instructionRewrite each selection as told
:ask questionAnswer a question about the selection in a popup. Alias :explain.
m in the git panelWrite a commit message for the staged changes

These use the local model from your OpenCode config. :ask can search the web through SearXNG when SEARXNG_URL is set. The helide-rs-mozilla branch routes them through Otari instead, with secrets masked before anything leaves the editor.

scripting

Each editor listens on a socket, and hx msg talks to it. Programs started inside Helide find their editor through HELIDE_SOCKET.

hx msg open file:line:colOpen a file in the focused view
hx msg command reload-allRun a typable command
hx msg keys '<C-2>j<space>'Type keys as if pressed
hx msg statusMode, focused file, cursor, selection and open buffers
hx msg lsp, hx msg diagnostics [file]Language servers; diagnostics

where things live

~/.local/state/helide/workspaces/Each project's saved workspace
~/.local/state/helide/history/Time travel's copies
~/.config/helix/Config, keys and themes, shared with Helix
NOR docs.html
markdown utf-8