M8: client terminal engine (ghostty-web) and local echo #9
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Trigger: ghostty-web passes the S1/S5 fixture corpus in a browser (phone included) and its rendering bugs are fixed upstream. S10 (2026-10-01): not met.
From PLAN.md, section "M8".
Swaps xterm.js for ghostty-web behind the
BlockViewterminal renderer, soclient and server run the same engine. This is Superlogical's replica model.
Ghostty from December 2025, has no snapshot API, and its upgrade PR is a
work in progress.
WebKit, including emulated phones. On the seventh, it turns grapheme
clustering (mode 2027) on by default and the daemon has it off, so emoji
with modifiers take a different width. It also ignores OSC 4 palette
changes. Its
scrollbackoption is in bytes.write('')throws, and any render error stops rendering for good;replies;
no markers or decorations, no
modes/onBinary, no WebGL, and nobuffer API that keeps blanks and graphemes;
daemon's Ghostty commit (262 KB gzipped). It decodes every fixture's
GHOSTSNP to text identical to the daemon's. For 64k rows it's ready in
5–20 ms, with the history in a further 70–300 ms. That is the more
promising route: our own renderer, or a maintained ghostty-web, over
upstream's wasm.
over upstream wasm exists.
including the phone, and its rendering bugs are fixed upstream. Re-check
each time libghostty-rs is bumped.
snapshotcan carry GHOSTSNP, negotiated per client inhello. xtermclients keep formatter VT bytes.
first (the protocol already has
part: screen|history).remote hosts.
server's output confirms them; mismatches are rolled back.
off).
trip exceeds about 80ms.
corpus renders identically to the daemon's
plain_text();with underlined predictions that settle correctly.