Free and open source ยท Linux and macOS

The editor you can rewrite while it runs.

Vim's editing. Emacs's depth. One fast binary. In imp, every key, command and mode is a few lines of Scheme you can open, change and reload without restarting.

  1. 1Write a command in init.scm
  2. 2SPC e b evaluates it, live
  3. 3SPC i d runs it anywhere

No restart, no plugin manifest, no build step. It's in M-x too, with its key beside it, and SPC h f shows its docstring.

Keep your muscle memory.

Switching editors usually costs you a month of fumbling. imp starts out speaking the dialects you already know.

From Vim or Neovim

Motions, operators, text objects, counts, ., registers, macros, marks, visual modes, :s, :g, folds and splits. Each is tested against what real Vim does.

ciw dap qa :%s C-w v

From Doom or Spacemacs

Press SPC and a menu shows what comes next: files, buffers, windows, projects, search, git, code, Org, help. M-x runs any command by name, with its keys and docs beside it.

SPC f f SPC p p SPC g g M-x

From Emacs

C-z switches to an Emacs state, with C-x C-f, C-x C-s and friends. Describe any key, function, option or face, then redefine it from the same window.

C-x C-f SPC h k SPC h f C-c C-c

Everything you'd install twenty plugins for. Already here.

These are real screenshots of imp, not mockups. Git, Org, a file browser and a command palette all come in the box.

Git, Magit-style

SPC g g opens status down the right: stage, unstage, commit and browse history from the keyboard, beside the code you're working on. q puts it away.

imp with a README on the left and a git status window on the right listing an unstaged change, recent commits and the keys to act on them

It's Scheme all the way down.

imp's Rust core handles buffers, rendering and parsing. Everything else, from Vim's motions to the git interface, is Scheme in runtime/. You can read it, and redefine any piece from your config.

  • Change it live. Edit init.scm and SPC e b. No restart.
  • Find anything. SPC h k tells you what a key runs. SPC h f shows a function's docs.
  • Mistakes don't lock you out. An error in your config shows on the status line, and the editor still starts.
  • Packages, without a package manager. use-package! loads one from disk or from git.
~/.config/imp/init.scm
;; Options, a theme and a key.
(set-option! 'relativenumber #t)
(load-theme! 'gruvbox-dark)
(define-key! 'normal "C-s" 'save-buffer)

;; Packages that come with imp.
(use-package! 'olivetti)     ; a centred column
(use-package! 'org-babel)    ; run source blocks

;; Your own command, on SPC and in M-x.
(define-command! 'insert-date
  (lambda (count)
    "Insert today's date at the cursor."
    (begin-change!)
    (buffer-insert! (cursor)
      (without-final-newline
        (cadr (run-shell "date +%F" ""))))))
(define-leader! "id" 'insert-date "insert date")

Built for how you actually work.

A window, or your terminal

imp opens in a GPU-drawn window, with zoom, padding and see-through backgrounds. Over SSH, on a console, or with --tui, the same binary runs in your terminal.

A daemon that keeps your place

imp --daemon keeps your editor running. Attach to it from any terminal with --connect, even from another machine over SSH.

Claude Code built in

M-a opens Claude Code for the current project in a side window. Hiding it keeps it running. Send it the selection, the buffer or a file reference, already labelled with lines.

Completion that merges sources

Language server suggestions, file paths, imp's own names with their docs, and words from your open buffers, ranked together. Snippets expand with tab stops, and VS Code snippet files load as they are.

Help you can trust

Every command and function carries Emacs-style documentation. SPC h F names the faces under the cursor, so you know exactly what to restyle.

One file to install

A single self-contained binary for Linux (x86_64 and aarch64) and macOS on Apple silicon, with the Scheme runtime built in. Nix users get a flake.

Try it in under a minute.

Download, put it on your PATH, run imp. The start screen links straight to your config.

imp is alpha. It's good enough for daily Vim-style editing, but expect rough edges and changes to the Scheme API. Bug reports are very welcome.

Grab the archive for your platform from the releases page, then:

tar xzf imp-*.tar.gz
install -m 755 imp-*/imp ~/.local/bin/
imp

On macOS, clear the quarantine flag first: xattr -d com.apple.quarantine ~/.local/bin/imp

Stop configuring around your editor.
Start changing it.