(macros)
New: text charts in any buffer

Emacs ideas. A modern engine.

(plot-heatmap field 'mode 'half)

Macros takes what made Emacs worth learning — an editor written in its own extension language, customizable to the core — and rebuilds it on Steel, a fast embedded Scheme, with a GPU renderer underneath. Magit, evil, helix, org-mode, LSP, a debugger, and a terminal ship in the box.

v0.4.9 · macOS · Windows · Linux · free & open source

  • engineRust + gpui, GPU-rendered
  • languageSteel Scheme, hot-reloadable
  • modesemacs · evil · helix

A whole editor · not a plugin host

Code, git, notes. One live image.

Steel Scheme you can evaluate in place, a Magit-style git porcelain, Org mode, and language servers for everything else. Every buffer below runs on the same Scheme you write your config in, so any of it can be rewritten while it runs.

If you've used Emacs

Batteries included.
Every one of them is Scheme.

Steel, all the way down

Commands, keymaps, modes, the mode line — every layer is Scheme you can read, redefine, and re-eval while the editor runs.

Modal, your way

Vim-style evil or selection-first helix, with counts, operators, text objects and dot-repeat. Or stay in Emacs keys.

Magit

Stage hunks, commit, branch, and read diffs in a buffer, powered by gitoxide underneath.

Org mode

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

Language servers

Definitions, references, hover, rename, code actions, and diagnostics in real buffers.

Debugger

Breakpoints in the gutter, stepping, and a variables panel over the Debug Adapter Protocol.

Embedded terminal

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

Completion

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

Text charts

Sparklines, bars, braille plots, histograms, and heatmaps — just colored text, so they work in any buffer.

Scheme in, chart out

Six lines to a live report.

Define a command, hand plot-histogram a list of numbers, and show it in its own buffer. Bind it to a key, run it from M-x, or drop the same plot into an Org file with plot-insert.

(define-command (latency-report)
  (plot-show
    (plot-histogram (read-latencies "access.log")
                    'bins 12 'height 6
                    'title "latency (ms)")
    "*latency*"))

read-latencies is yours to write: any list of numbers will do. Text charts reference

NORMAL*latency*plot-mode

Make it yours,
in every color.