Selection-first core
Every action has an explicit target. Caret is an empty selection. Multi-cursor is not a separate mode.
Pre-alpha · Phase 0.7
A Linux-first terminal editor with a selection-first Rust kernel, a per-session Go policy gateway, and a plugin host that is a real process boundary. Pre-alpha, but the seams are deliberate.
01 · Architecture
The gateway is not the sandbox. The plugin host is. The editor owns text and selection; the gateway owns system policy; neither owns the other's state.
PieceTable · selection · view · snapshots · commands
openat2 · fetch policy · exec policy · capability token
Lua/QuickJS · Landlock · seccomp · no ambient authority
02 · The pieces
Every action has an explicit target. Caret is an empty selection. Multi-cursor is not a separate mode.
openat2 workspace resolution, DNS-pinned fetch, sandboxed exec, and per-session capability grants.
Lua/QuickJS never run in the editor process. A compromised plugin is not the editor.
Diagnostics, completion, hover, definition, rename, actions, formatting, and symbols — as a replaceable layer.
Ratatui/crossterm, vertical splits, fuzzy file finding, file tree, and dirty-only redraws.
The standard edition is one composition. Third parties can build their own UI on the kernel without forking it.
03 · Current state
Anvil is not a drop-in Helix or Vim replacement yet. The kernel, gateway, and sandbox are real; the standard-edition and third-party distribution surface is still being extracted.
Roadmap ↗anvil-session from the TUI · in design04 · Boundary
Compiled Rust code in a distribution is trusted kernel code. Lua/TS plugins are untrusted runtime code. PGO/BOLT is an optional release step, not part of the interface.