Documentation / Contents - CyThrough
CyThrough's viewer wire is a framed TCP stream after AUTH. It is not VNC and not the old CyBeam Windows agent. Magic byte 'T' (0x54) rejects a leftover CyBeam agent on the same port at the first byte.
Design detail lives in the tree as docs/protocol.md. This card is the operator view: enough to understand logs, caps, and why setup choices matter.
Every message:
+0 u8 magic 0x54 'T' +1 u8 version 1 +2 u8 channel +3 u8 type +4 u32 length payload bytes following (big-endian)
Multi-byte fields are always big-endian. Pixel payloads follow the negotiated pixel_order; they are not wire integers.
Client sends HELLO with protocol major/minor, pixel layout, tile size, codec list, caps, optional desk size, optional app_id, quality, glyph cache. Server answers HELLO_ACK with the intersection (client codec order preserved).
If CY_CAP_AUTH is negotiated, the server sends AUTH_CHALLENGE. The client replies AUTH_RESPONSE with password bytes (not a digest). AUTH_OK or AUTH_DENIED follows. ATTACH binds the session. An optional app_id from HELLO is launched only after AUTH_OK + ATTACH -- never before auth.
Crypto (when enabled) wraps the session after knock/AUTH. --no-crypto turns SPA and AEAD off entirely; identity auth still runs. --no-knock keeps AEAD but skips the UDP SPA door knock.
--list-apps on the viewer is AUTH + catalog without opening a display session. --watch-catalog stays connected for CATALOG_CHANGED.
The server encodes damage tiles (not full frames by default). Codecs include CACHE_REF, COPYRECT, SOLID, LZ4, PAL8, RAW, QOI, QOI_LZ4, XOR_LZ4, HEXTILE, GLYPHS, and related helpers. The viewer decodes and blits (MIT-SHM when available; --noshm forces the slow path).
Input channel forwards keys, buttons, motion, and wheel to the published app. Remoted apps keep their own accelerators; the viewer has no Motif chrome of its own.
Capability bits advertise optional features (input window id, window close, auth, applist, winlist, OR atomic paint, draw ack, crypto). Peers intersect. Missing optional HELLO fields read as zero so short HELOs stay valid.
Quality modes (auto / smooth / fast / fastest) bias encoder choices on the wire without changing the frame header layout.
On the daemon host, a manager process owns knock, AUTH, and catalog. A backend child owns the X seat (dummy Xvfb or --hw display) and pushes pixels. Fd handoff and the Running registry are local to the daemon; they are not the viewer TCP document. Dummy Xvfb dirs under /tmp are adopted or reaped across daemon restarts so orphans do not sit on init forever.
Cyanotype Project. Blueprint Desktop. BSD 2-clause.
Not affiliated with Silicon Graphics. SGI, IRIX, and Indigo Magic
belong to their owners. 1.0 is aimed at 31 October 2026.