A streamlined, fast modal code editor with selection -> action model similar to Kakoune and Helix.
  • Zig 94.1%
  • Tree-sitter Query 2.9%
  • Shell 1.6%
  • Scheme 0.7%
  • Python 0.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-09 08:52:32 +02:00
docs textobjects: M s extends by a sentence — and counts do it in one press 2026-09-05 19:56:52 +02:00
examples todo: this week's batches, and an example file for markdown rendering 2026-09-09 08:50:24 +02:00
grammars siblings: Alt+Left/Right walk the same units the ladder climbs 2026-09-06 09:39:50 +02:00
scripts config: configDir gets the platform arms dataDir already had 2026-09-01 19:15:24 +02:00
src completion: a page is its TITLE, not its filename 2026-09-08 20:18:10 +02:00
tests transform: the surround verbs and t r edit at every cursor 2026-09-08 11:25:47 +02:00
tools grammars: a bundled unit carries its pack too 2026-08-23 11:56:25 +02:00
vendor space k: documentation lookup, and the silent failures it uncovered 2026-08-11 21:23:46 +02:00
.devkit.conf release: pin bearing like every other sibling 2026-08-22 12:19:06 +02:00
.gitattributes dev: restore path manifest (reverse merge leak) + scripts/sync-dev 2026-07-06 23:07:34 +02:00
.gitignore docs: two stutters, neither reliable — and a script for the repro 2026-08-08 23:28:18 +02:00
build.zig textobjects: zig and markdown get queries — and .inner names an exact inside 2026-09-05 20:07:38 +02:00
build.zig.zon Merge branch 'dev' 2026-09-09 08:52:32 +02:00
CLAUDE.md space k: documentation lookup, and the silent failures it uncovered 2026-08-11 21:23:46 +02:00
context.md docs: the tags bug was the unit pack, and what finally found it 2026-09-08 15:40:22 +02:00
DESIGN.md docs: a unit's pack.json is data, and the pack composes per field 2026-09-08 19:08:48 +02:00
LICENSE Migrate to Zig 0.16 2026-05-01 18:43:25 +02:00
quote.svg readme: quote wordmark logo 2026-07-21 16:06:04 +02:00
README.md docs: a README that describes the editor as it is 2026-08-22 12:40:58 +02:00
RELEASING.md build: only the released build reports a bare version 2026-08-03 09:50:02 +02:00
TODO.md todo: this week's batches, and an example file for markdown rendering 2026-09-09 08:50:24 +02:00

Quote

A Scheme/Lisp and s-expression code editor component, built in Zig. It is a standalone editor app, but is also designed to be embedded inside applications such as game engines and tools that already have a dvui window.

Status: pre-1.0, and used day-to-day for its own development — any file type, not only Scheme. What is still in progress is the engine side: hot-reload into a host VM and inline value inspection. See DESIGN.md for the full feature map and current phase.

Highlights

  • Modal editing in the Helix/Kakoune lineage — normal mode for movement and selection, insert mode for typing.
  • Cross-file code intelligence over a tree-sitter symbol index: g d jumps to a definition, g r lists where a symbol is used, space k shows its documentation, space s finds any definition in the project, and the completion popup ranks candidates from the same index with their signatures and docstrings. The index covers your code, Zig's standard library, and every dependency build.zig.zon declares — no configuration — and it persists between sessions.
  • Tree-sitterdriven syntax highlighting + AST-aware indent. Scheme and Markdown are built in; Zig, JSON and Python install at runtime from a signed catalogue (:packages), which also upgrades and removes them.
  • Scheme-aware paredit basics (auto-pair, skip-close, strict delete) and structural navigation
  • Pickers for everything, all fuzzy-matched with previews: files, buffers, recent files, outline, project symbols, themes, packages, and a live workspace grep whose results re-search as you type
  • Git-aware gutter: added/modified/removed bars, live against HEAD
  • Scheme-defined keybindings, themes, and command-palette commands (src/keybindings.scm, src/themes.scm, src/commands.scm), layered with a user init.scm
  • Multi-cursor editing, split views, jumplist, dot-repeat, selection undo/redo, count-prefixed motions
  • Evaluate Scheme from the buffer into a *repl* transcript (space e for the form at the cursor, space E for the selection)
  • macOS app bundle (zig build bundle), a quote CLI that opens files in the running app, quote -w for use as $EDITOR, and in-place self-update (:upgrade)

Build

Requires Zig 0.16.0 or newer. Earlier toolchains will fail at manifest validation.

main is self-contained: every dependency is pinned by url+hash, so a plain clone builds with no sibling checkouts. (The dev branch instead uses ../sibling path dependencies for fast local iteration — as a consumer you want main.)

zig build               # debug build → zig-out/bin/quote
zig build run           # build + run
zig build test          # full test suite (~80 s warm; fuzz + perf canaries)
zig build bundle -Doptimize=ReleaseFast        # macOS Quote.app
zig build install-user -Doptimize=ReleaseFast  # bundle + install to ~/Applications & ~/.local/bin/quote

After install-user, Quote.app is in ~/Applications (clickable from Finder) and quote is on $PATHquote path/to/file.md opens the file in the running Quote.app (or starts it). No sudo, no system-wide writes. If ~/.local/bin isn't on your $PATH, the install step prints the line to add to your shell rc.

build.zig.zon pins every dependency to an exact commit; .tools/devkit/devkit pin-deps (run on main) bumps the pins to the sibling repos' pushed heads.

Cutting a release — versioning, signing, publishing — is written up in RELEASING.md.

Dependencies

Zig package manager pulls these via build.zig.zon:

  • storykit — text editing core (gap buffer, styling, layout, undo)
  • dvui — immediate-mode GUI (our fork of david-vanderson/dvui tracking the Zig 0.16 work)
  • dvui-sokol — sokol backend for dvui (windowing, Metal, clipboard, native dialogs, std.Io runtime)
  • sokol-zig — sokol bindings fork (carries an NSTextInputClient patch for dead-key composition)
  • sokey — keyboard-layout-aware key translation
  • sift + sift-matcher — threaded fuzzy-match engine + fzf-style matcher (file/buffer pickers)
  • zpicker — headless picker state (query, selection, scroll)
  • comb — content-search engine (regex/literal over a gitignore-aware walk) behind the live grep
  • bearing — tags-based symbol index and resolver over tree-sitter: the definitions, use sites and ranked candidates behind g d, g r, space k and completion
  • plumbuz — in-Zig git library (HEAD blobs + line diff for the gutter, gitignore for the walks)
  • lamp — Scheme VM for REPL/completion/integration tests
  • inputmap — modal input mapping
  • zentry — file watching
  • tree-sitter, with tree-sitter-scheme and tree-sitter-markdown vendored in vendor/ and compiled in. tree-sitter-zig and tree-sitter-json are fetched for the test suite but not bundled — the app installs those grammars, and Python, from the signed catalogue at runtime.

License

MIT — see LICENSE.