Skip to content
libghostty-vt logo

libghostty-vt

libghostty-vt

plurigrid/asi0installs67stars

SKILL.md

Full skill instructions

libghostty-vt

Zero-dependency VT sequence parser from Ghostty. Mitchell Hashimoto's embeddable terminal core.

Status

NOT YET RELEASED (as of 2025-09) - Zig API available for testing, C API coming.

What It Is

libghostty-vt extracts Ghostty's proven VT parsing into a standalone library:

  • Parse ANSI/​VT sequences
  • Maintain terminal state
  • Zero dependencies (no libc required!)
  • SIMD-optimized (>100 MB/​s plain text)

Architecture

Raw Bytes → UTF8Decoder → Parser (DFA) → Stream → Actions
                           │
                     State Machine
                     (14 states)

Parser States

StatePurpose
groundNormal text printing
escapeESC detected (0x1B)
csi_entryCSI sequence start
csi_paramParsing CSI parameters
osc_stringOSC data collection
dcs_passthroughDCS data collection

Action Types

const Action = union(enum) {
    print: u21,              // Unicode codepoint
    execute: u8,             // C0/​C1 control
    csi_dispatch: CSI,       // Control Sequence Introducer
    esc_dispatch: ESC,       // Escape sequence
    osc_dispatch: *osc.Parser,
    dcs_hook: DCS,
    dcs_put: u8,
    dcs_unhook: void,
};

Key Files (ghostty-org/​ghostty)

src/​terminal/​Parser.zig      # State machine
src/​terminal/​stream.zig      # Stream wrapper + SIMD
src/​terminal/​osc.zig         # OSC parser
src/​terminal/​parse_table.zig # Compile-time transition table
src/​simd/​vt.zig              # SIMD acceleration

Performance

OptimizationImpact
Pre-computed state tableO(1) transitions
SIMD text processing10-100x for plain text
Fast-path CSI parsingSkips state machine
Fixed-size buffersNo allocation

Use Cases

  • Terminal emulators (tmux, zellij, Ghostty)
  • IDE terminals (VS Code, JetBrains)
  • Cloud terminals (Vercel, Render)
  • TUI frameworks
  • Terminal recording/​playback

When Available

# Future installation (not yet available)
# Zig
zig fetch --save git+https://github.com/ghostty-org/libghostty-vt

# C (when released)
# pkg-config --cflags --libs libghostty-vt

Example (Future API)

const vt = @import("libghostty-vt");

var parser = vt.Parser.init();
var stream = vt.Stream(MyHandler).init(&parser, &handler);

// Process bytes
for (input) |byte| {
    if (stream.next(byte)) |action| {
        switch (action) {
            .print => |cp| handler.print(cp),
            .csi_dispatch => |csi| handler.handleCSI(csi),
            // ...
        }
    }
}

Sources

GF(3) Assignment

Trit: +1 (PLUS) - Generator/​Parser
Hue: 180° (cyan - terminal green vibes)

Triads:

  • libghostty-vt (+1) × vterm (0) × terminfo (-1) = 0 ✓
  • libghostty-vt (+1) × tmux (0) × escape-sequence-validator (-1) = 0 ✓