fuzzball

Rust crate · v1.0.0 · no dependencies

fuzzball

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.

every message
ESC P = F z <subsystem> <verb> ; <params> [: <payload>] ESC \
Fuzzball logo: a matte, fuzzy pink pom-pom cat-toy ball

Install

shell
cargo add fuzzball
Cargo.toml
[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.

Features

Five subsystems behind one prefix, plus helpers for multiplexers.

k

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.

Example → Spec →

g

Graphics

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.

Example → Spec →

s

Shell integration

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.

Example → Spec →

p

Plugins

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.

Example → Spec →

⇄

Passthrough

Wrap any message for tmux or GNU screen, or let passthrough::auto pick: tmux when TMUX is set, screen when STY is set.

Example → Spec →

c

Detection & capabilities

A capability query followed by DA1. A Fuzzball terminal answers c r before the DA1 reply, listing its subsystems, version and chunk limit.

Example → Spec →