Skip to content

Repository files navigation

██████╗ ██╗███╗   ██╗██╗   ██╗██╗███╗   ███╗
██╔══██╗██║████╗  ██║██║   ██║██║████╗ ████║
██████╔╝██║██╔██╗ ██║██║   ██║██║██╔████╔██║
██╔══██╗██║██║╚██╗██║╚██╗ ██╔╝██║██║╚██╔╝██║
██████╔╝██║██║ ╚████║ ╚████╔╝ ██║██║ ╚═╝ ██║
╚═════╝ ╚═╝╚═╝  ╚═══╝  ╚═══╝  ╚═╝╚═╝     ╚═╝

binvim: the first vim IDE

binvim is the first vim IDE: a vim-native integrated development environment in a single binary, rather than a plain modal editor (Vim, Helix), an editor you assemble into an IDE from plugins (Neovim + distributions like AstroNvim / LazyVim), or a GUI IDE with bolted-on vim emulation (VS Code, Visual Studio, Rider). → What is a vim IDE?

A Vim-grammar TUI editor written in Rust. One binary, no plugin system; everything below ships built in.

  • Editing: modal editing with operators, motions, text objects, marks, registers, macros and dot-repeat; real multi-cursor and Sublime-style Ctrl-N selections; surround, code folding, smart indent, persistent undo, OS-clipboard paste, horizontal scrolling; writes that can't lose work and recovery after a crash. → Editing
  • Highlighting: tree-sitter for Rust, TypeScript / TSX / JSX, JavaScript, JSON, Go, Python, C / C++, Java, Ruby, PHP, Lua, TOML, Svelte, Zig, Nix, Elixir, Dockerfile, SQL, HTML, CSS / SCSS, Markdown, C#, Razor, YAML, XML with the .csproj family, and Bash, plus hand-scanned colouring for .editorconfig and .gitignore. → Highlighting
  • LSP: several servers per buffer (tsserver plus Tailwind, csharp-ls over Razor): completion, snippets, hover, rename, code actions, inlay hints, semantic tokens over tree-sitter, document highlight, signature help, references, document and workspace symbols, and :messages for what the servers say. Opt-in GitHub Copilot ghost completions. → LSP
  • Debugging: DAP for .NET (netcoredbg), Go (delve), Python (debugpy) and Rust, plus C / C++ inside a Cargo project (lldb-dap): project, bin and script pickers, .NET launch profiles, conditional breakpoints, frames, locals with lazy expansion, watches, and the Visual Studio / Rider F-keys. → Debugger
  • Formatting: one formatter per extension (biome, csharpier, gofmt / goimports, ruff, clang-format, shfmt, stylua, prettier, taplo, rufo, php-cs-fixer, google-java-format, zig fmt, nixfmt, mix format, ktfmt, sql-formatter) plus .editorconfig on every save. → External tools
  • Workspace: fuzzy pickers for files, grep, symbols and more; window splits with pick-on-split (<C-w>v → picker → side by side); a tab bar; sessions with per-buffer jumplists; a git gutter with hunk staging; an embedded terminal, task runner and test runner; a :health dashboard; and a Catppuccin Mocha palette with ready-made themes. → Keys, Configuration

AI side panes

<space>jc opens Claude Code in a pane beside your code; <space>jx, jo, jw, jh and jb do the same for Codex, opencode, openclaw, hermes and binai. Each is the tool you already have installed, started in your shell (so your aliases apply), in tabs you can hide while they keep working. The file you're in reloads when the tool edits it, unless it has unsaved changes. binvim passes the tool nothing (no file, no selection), and binvim keeps Esc, so the tool gets it as Ctrl-[ only on terminals with the Kitty keyboard protocol. → AI side panes

A debugger that finds your targets

<space>db sets a breakpoint and <space>ds (or F5) starts: binvim picks the adapter from the project, finds its runnable targets (a .NET project and launch profile, a Go package main, a Python script, a Cargo binary) and asks only when there is more than one. Locals, frames, watches and conditional breakpoints sit in a pane below the code, and :debugtest debugs the Go or pytest test under the cursor (pytest in a project the Python debugger recognises). Android apps attach with <space>Ab. Adapters are installed separately, through :install or by hand. → Debugger

How binvim compares

binvim is the first vim IDE. Here's how it stacks up against the editors and IDEs people usually weigh:

Install

brew install bgunnarsson/binvim/binvim              # macOS
curl -fsSL https://binvim.dev/install.sh | sh        # Linux
cargo install --locked binvim                        # anywhere with a Rust toolchain
iwr https://binvim.dev/install.ps1 -UseBasicParsing | iex   # Windows

Scoop, the Nix flake, building from source, and binvim-install, the one-shot setup for the LSPs, formatters and debug adapters binvim drives, are in docs/install.md.

Run

binvim
binvim [path]
bim
bim [path]

If path is omitted and a session exists for this cwd, the session restores (start page + tab row above it). Otherwise the start page renders alone. Press : for a command (:e <path>, :q) or <space><space> to open the file picker.

Terminals

binvim's official terminal is Ghostty on macOS and Linux, and PowerShell in Windows Terminal on Windows. Other terminals work too, with the differences recorded in the terminal matrix: the checks every terminal is held to, and how Kitty, WezTerm, tmux and the rest came out.

Documentation

  • Install: Homebrew, the install scripts, Scoop, crates.io, the Nix flake, from source, and binvim-install / :install / :update for the toolchains.
  • Editing: modal editing, motions and text objects, registers and macros, search, marks, folds, persistent undo, the git gutter, writes and recovery, sessions and tabs, pickers.
  • Keys: leader bindings, buffer / tab navigation, window splits.
  • Ex commands: the : commands beyond the standard set.
  • Vim compatibility: what's supported, where binvim differs on purpose, and what's left out.
  • Migrating from Neovim: where your plugins' features live, and what replaces init.lua.
  • Migrating from VS Code: modal editing in five minutes, and your shortcuts mapped to binvim's keys.
  • Tree-sitter highlighting: the languages and the per-language query tweaks.
  • LSP: capabilities, their bindings, and multi-server fan-out.
  • Debugger: the DAP adapters, bindings, breakpoints and the debug pane.
  • AI side panes: Claude Code, Codex and the other terminal AI tools in a pane beside the editor.
  • External tools: every LSP, formatter and debug adapter binvim spawns, with the install command for each.
  • Configuration: ~/.config/binvim/config.toml section by section, keymaps, and the theme presets.
  • Project layout: what lives where in src/.
  • Terminal matrix: the checklist every terminal is held to, and the results per terminal.
  • Data-loss audit: every way text reaches disk or could be lost, what binvim guarantees there, and the test or check behind each.
  • Known issues: defects binvim ships with, and what each one costs you.
  • Roadmap: the goals through 1.0 and the milestone each release closes.
  • Windows: where the Windows port stands and what is still to do.

Alongside these: CHANGELOG.md and CONTRIBUTING.md.

Licence

Source-available, not open source. Copyright (c) 2026 B. Gunnarsson; see LICENSE for the full text. In short: you may read the source, run it locally, modify your own copy, and submit pull requests upstream. You may not redistribute, publicly fork, or run it as a hosted service. For anything outside that scope, contact the licensor on Twitter/X at @bgunnarssonis.

About

The first vim IDE. A vim-native IDE in a single binary: multi-server LSP, tree-sitter, four DAP debuggers, opt-in Copilot, an AI pane, and test/task runners. No plugin manager.

Topics

Resources

Contributing

Stars

22 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages