Inspired by lazygit and lazyssh — a lightweight terminal-native IDE built with Rust and ratatui. Provides file tree navigation, tabbed editing, LSP integration (rust-analyzer), syntax highlighting, code folding, git gutter & file status, indent guides, project search (ripgrep), customizable keybindings, and a theme system.

{}, (), [] colored by nesting depth (3-color cycle per theme)~/.config/lazyide/keybinds.json or the in-app keybind editor (command palette > "Keybind Editor")Ctrl+Shift+F)+), modified (~), and deleted (-) line markers in the editor gutter via git diffΔ: ~M +A ?U) shown in the top barAlt+Z (or F6)Linux / macOS / WSL2:
curl -fsSL https://tysonlabs.dev/lazyide/install.sh | sh
Windows (PowerShell):
irm https://tysonlabs.dev/lazyide/install.ps1 | iex
More install options
macOS (Homebrew):
brew tap tgeorge06/tap
brew install lazyide
Windows (Scoop):
scoop bucket add lazyide https://github.com/tgeorge06/scoop-bucket
scoop install lazyide
Shell script options:
curl -fsSL https://tysonlabs.dev/lazyide/install.sh -o install.sh
sh install.sh --with-deps # also install ripgrep + rust-analyzer
sh install.sh --prefix /usr/local/bin
sh install.sh --version v0.3.0 # specific version
From source (all platforms):
cargo install --git https://github.com/tgeorge06/lazyide
This compiles all dependencies from scratch and may take a few minutes on the first install.
Prebuilt binaries: Download from Releases for Linux, macOS, and Windows.
cargo build --release
cargo run # run in current directory
cargo run -- /path/to/project # open a specific project
cargo test # run tests
After building, the binary is at target/release/lazyide. Copy it somewhere in your $PATH to run it from anywhere:
cp target/release/lazyide /usr/local/bin/
Requirements: Rust (2024 edition)
After installing, run the setup command to check for optional tools:
lazyide --setup
This detects missing tools (rust-analyzer, ripgrep) and offers to install them automatically.
Optional external tools (not installed by cargo, must be installed separately):
- rust-analyzer — enables LSP completions, diagnostics, and go-to-definition for Rust files
- rg (ripgrep) — enables project-wide search (Ctrl+Shift+F)
- git — shows current branch name in the top bar
F1 / F2 previous / next tabF4 helpCtrl+S saveCtrl+W close active tab (with dirty check)Ctrl+Q quit (two-step if unsaved)Ctrl+B toggle files paneCtrl+R refresh treeAlt+Z / F6 toggle word wrapCtrl+N new fileCtrl+O quick open file (fuzzy search)Ctrl+P command palette (also Ctrl+Shift+P)Ctrl+F find in current file (regex)Ctrl+H find and replaceCtrl+Shift+F search in project (ripgrep)Tab focus tree / Shift+Tab focus editorCtrl+Space or Ctrl+. LSP completion (ghost suggestion + Tab accept)Ctrl+D go to definition (Rust LSP)Ctrl+G go to lineCtrl+J toggle fold at cursorCtrl+U toggle fold all / unfold allCtrl+Shift+[ / ] fold / unfold current blockCtrl+Alt+[ / ] fold all / unfold allF3 / Shift+F3 find next / previousPageUp / PageDown scroll by pageCtrl+Home / Ctrl+End go to start / end of fileShift+Alt+Down / Up duplicate lineCtrl+Z undo / Ctrl+Y redoCtrl+A select allCtrl+C copy / Ctrl+X cut / Ctrl+V pasteCtrl+/ toggle line comment (language-aware)Shift+Arrow select textCtrl+Shift+Arrow select word-by-wordShift+Tab dedent selected lines[x] to close* prefixUp/Down or K/J moveLeft or H collapse / go parentRight, L, or Enter open/toggleDelete starts delete confirmationAll keyboard shortcuts can be remapped via ~/.config/lazyide/keybinds.json. Only include the keys you want to override — missing actions keep their defaults.
{
"save": "ctrl+s",
"redo": ["ctrl+shift+z", "ctrl+y"],
"fold_toggle": "ctrl+j"
}
Values are a single string or array of strings. Keys are snake_case action names (e.g. save, close_tab, go_to_definition, dup_line_down, toggle_word_wrap).
You can also open the Keybind Editor from the command palette (Ctrl+P > "Keybind Editor") to browse, remap, and reset keybindings interactively. Conflict detection warns you if a key is already in use.
Ctrl+Q twice to quit with unsaved changesEnter save+close, Esc discard, C cancelR reload, K keep local, D decide laterSee the docs/ directory for contributor guides:
Contributions welcome — especially new themes! See CONTRIBUTING.md for details.
$ claude mcp add lazyide \
-- python -m otcore.mcp_server <graph>