(macros)

The Emacs you know, with a modern engine.

Macros takes the thing that made Emacs worth learning, an editor written in its own extension language and customizable to the core, and builds it again on Steel, a fast embedded Scheme, with a GPU renderer underneath. It is batteries included: Magit, evil-mode, org-mode and roam, helm, transient, and LSP all ship in the box. Every bit of it is Scheme you can read and change.

Download for macOS, Windows, LinuxRead the docs
free & open source
The Macros editor in the macros-dark theme
If you've used Emacs

You'll recognize the neighborhood, popular packages are built-in

Org mode

Headings, TODOs, agenda, capture, tables, and babel. A real org-mode, written in Scheme.

Embedded terminal

A real VT/ANSI terminal (alacritty-backed) running your login shell, right inside a buffer.

Completion

A corfu-style in-buffer popup, with pluggable completion-at-point functions and an LSP fallback.

Dired and the sidebar

A directory editor plus an expandable file-tree sidebar with icons and file operations. Move around the filesystem without reaching for the mouse.

Diagnostics

A flycheck-style diagnostics list with gutter dots, plus next-error and previous-error to walk them.

Rainbow delimiters

Bracket coloring by nesting depth, driven by tree-sitter so it stays right inside strings and comments.

Magit

A Magit-style git porcelain for staging, committing, branching, and reading diffs — all in a buffer, powered by gitoxide (gix) behind the scenes.

LSP

Language servers for go-to-definition, references, hover, rename, code actions, and diagnostics, in real buffers.

Why I built this

Going back to where it started

I've used Emacs for more than twenty years, and I genuinely love it. It's been a constant companion through my whole career, and so much of what I've enjoyed about programming traces back to it. I never would have learned Lisp if it weren't for Emacs, and learning Lisp shaped my career in ways I couldn't have predicted. It set me down the path of programming languages, which led to a roughly 10+ year stretch where I wrote compilers and related tooling, a completely different trajectory than the one I had been on.

Tinkering in it and trying new packages has always been a joy: getting the one thing just right. Emacs with Magit is the only git porcelain I've ever actually missed when working somewhere else. Wiring up keybindings to search and navigate a codebase with Helm sharpened how quickly I could grok an unfamiliar repo. Org mode is the only note-taking habit that ever stuck for me, and using it as a data science notebook with R, instead of the usual tools, was genuinely useful and a lot of fun.

Mostly, though, this is fun. The state of Emacs felt stale, and I wanted to tinker again, to go back to where it all started, except this time I write in Scheme.