Keyboard
One opt-in mode of structured key events: physical key, logical key, modifiers, locks, text and IME phases. Press, repeat and release are all reported, so applications see exactly what was typed.
Rust crate · v1.0.0 · no dependencies
Encoder and decoder for the Fuzzball terminal protocol, the DCS Fz extension family first implemented in the Mouser terminal. No I/O, no terminal library: bring your own reader and writer.
ESC P = F z <subsystem> <verb> ; <params> [: <payload>] ESC \cargo add fuzzball[dependencies]
fuzzball = "1"1.x keeps the wire format and API compatible. Golden-byte tests lock every message the crate writes. MSRV: Rust 1.85.
Five subsystems behind one prefix, plus helpers for multiplexers.
One opt-in mode of structured key events: physical key, logical key, modifiers, locks, text and IME phases. Press, repeat and release are all reported, so applications see exactly what was typed.
Image upload as chunked base64 (RGBA, RGB or PNG), cell-anchored placements with size, source rectangle and stacking layer, delete, and a memory/cell-size query.
Shells advertise what they can do, and the terminal can ask for a silent cd. Paths are percent-encoded bytes, so they need not be UTF-8.
A program running in the terminal (locally, over ssh, inside tmux) asks to be accepted as a plugin with a name, kind and capabilities. The terminal asks the user and answers later; grants are per tab and end with the tab.
Wrap any message for tmux or GNU screen, or let passthrough::auto pick: tmux when TMUX is set, screen when STY is set.
A capability query followed by DA1. A Fuzzball terminal answers c r before the DA1 reply, listing its subsystems, version and chunk limit.
Real screenshots of Mouser, the reference terminal.

mouser show uploads each image (g u) and places it at the cursor cell (g p).
mouser show displays images (PNG, JPEG, GIF first frame, WebP, BMP); it does not play video.