First-principles modern vi.
Adoption is not sought, though please feel free.
There is no plugin API, just ground-up extensibility.
The gap between "bringing up a new OS/hardware platform" and "having a usable editor" is too wide.
vv bridges this gap.
It uses Zig's comptime to compile into three distinct "Planes of Abstraction," allowing the same core text logic to run on an EFI shell, a QNX rescue terminal, or a macOS desktop.
- Target:
freestanding(UEFI Shell, Kernel Mode, Bare Metal). - Constraints: No
libc. No heap allocator. No syscalls. - Memory Model: Fixed-size static arena (Slab) in
.bss. - Topology: Nodes are linked via
u32array indices, not pointers. The state is relocatable and trivially serializable (mem-dumpable). - Use Case: Hex-editing RAM, patching bootloaders, emergency driver debugging.
- Target: QNX, Minix, Linux
initramfs. - Constraints:
libcavailable. No external dependencies, even ncurses. - I/O: Raw VT100/ANSI output.
- Use Case: System configuration on in-development operating systems.
- Target: Linux, macOS, *BSD.
- Features: (WIP)
- Tree-sitter: Statically linked for AST-based structural movement (e.g.
vi[works on the AST). - Input: Async I/O, USB HID support (Pedal/Clutch integration).
- Memory: Dynamic heap.
- Tree-sitter: Statically linked for AST-based structural movement (e.g.
vv evaluated the Gap Buffer and Piece Table approaches, and while viable, has chosen something else.
The text buffer is represented by a Sequence CRDT (DAG) derived from the Eg-walker/Fugue papers:
- The Graph: Text is a Directed Acyclic Graph of immutable nodes.
- The Z-Axis: There are no "tombstones" or delete flags.
- Deletion is modeled as the insertion of a Mask Node (Occluder) that targets the original content.
- The renderer projects the graph; occluded nodes (Depth > 0) are skipped or rendered as "history" depending on the mode.
- Client IDs: In Plane 0, Client ID is hardcoded to 0 (single-user).
There is no runtime configuration parsing.
- Config is defined in
src/config.zig. - Changes require
zig build -Doptimize=ReleaseFast.
# Desktop (Plane 2)
zig build -Dplane=lux
# QNX / POSIX (Plane 1)
zig build -Dplane=core -Dtarget=x86_64-unknown-linux-musl
# UEFI / Bare Metal (Plane 0)
zig build -Dplane=static -Dtarget=x86_64-uefi© 02026 Wilson Bilkovich