Cotty is the multiplayer terminal: host your shell, teammates join from a terminal or a browser. Watch together, and type together when you allow it. End-to-end encrypted, with per-guest permissions and a "who typed what" audit trail.
$ go install github.com/tylerbroqs/cotty/cmd/cotty@latest
A scripted replay of a real Cotty session.
## features
Guests connect to the live PTY: the things pair debugging and incident response actually need, none of the video blur.
Guests attach to the live terminal. Grant write access and their keystrokes land in the same shell, with no lag-smeared pixels.
Relayed sessions are sealed with AES-256-GCM by default. The key rides in the URL fragment: it never touches the wire, and the relay only ever sees ciphertext.
The host dials out to a relay you can self-host with one command. No port forwarding, no firewall tickets, no daemons.
Every relay serves an embedded xterm.js client, decryption included via WebCrypto. Send a link and teammates install nothing.
Everyone joins view-only with a name. cotty ctl allow alice,
deny, kick, live, from any terminal on the
host machine.
Every applied keystroke attributed by participant, plus joins and
permission changes. Record sessions as asciicast v2 and replay them
with cotty replay or asciinema.
## security
# the host prints a join URL, # the key stays after the #, off the wire cotty join "wss://relay/ws?code=XJ4K2P#k=8D0Uy…" └──────────┘ never sent anywhere # what the relay sees: 4f 8a 2c e1 9b … (ciphertext)
## quick start
On your LAN in ten seconds, or across the internet with a relay you host yourself.
One static binary: host, client, relay, and web UI included.
go install github.com/tylerbroqs/cotty/cmd/cotty@latest
Guests are view-only by default. Cotty prints the join links.
cotty host # on your LAN cotty host --relay relay.example.com:7374 # behind NAT, E2EE
From any terminal, or from a browser with nothing to install.
cotty join -name alice "wss://relay/ws?code=XJ4K2P#k=…"
Grant, revoke, and kick, live, without ending the session.
cotty ctl allow alice # let alice type cotty ctl kick bob # remove bob