Let your colleague
type into your terminal.
You're screensharing. They need to run a command. Stop dictating characters. Give them a session code and let them type directly.
The problem with screensharing
Dictating commands
"Capital D, dash, dash, no-cache, space, dot, no the other dot..."
Swapping screen control
Request control, wait for approval, fumble with resolution differences, give it back.
Full pair-programming tools
VS Code Live Share, tmate, tmux — all overkill for "let me just type this one command."
keytun
Share a code. They type. You see it live on your screenshare. Done.
How it works
Developer screensharing.
Runs keytun host
Stateless broker.
Bridges connections.
Helper colleague.
Runs keytun join <code>
Host starts a session
Run keytun host. A PTY spawns your shell. You get a session code like keen-fox-42.
Share the link over your call
You get a direct join link like keytun.com/s/keen-fox-42. Drop it in chat — your colleague opens it in their browser. No install needed.
Helper joins and types
They can join from the browser or via CLI. Raw key bytes flow through the relay to the host's PTY. Arrow keys, tab completion, Ctrl+C — everything works.
Host sees it live
Both local and remote input appear in the same terminal. Your screenshare shows everything in real time.
See it in action
Three ways to use keytun — pick what fits your workflow.
Host starts a session
Run keytun host to spawn a PTY and get a session code.
Colleague joins via CLI
Your colleague runs keytun join with the session code.
Keystrokes flow in real time
The client types commands — they appear in the host's PTY. Arrow keys, tab completion, Ctrl sequences all work.
Host starts in system mode
Target a specific application window by name. Keystrokes are injected at the OS level.
Colleague joins and types
Same join flow — but keystrokes go to the targeted app, not a terminal.
Keystrokes appear in the app
Your colleague types code into your IDE while you watch on screenshare. Works with any app that accepts keyboard input.
Host shares a link
The host gets a direct join URL — just drop it in the call chat.
Colleague opens the link in their browser
No install needed. The browser connects via WebSocket with end-to-end encryption.
Full terminal in the browser
A real terminal emulator powered by ghostty-web. Your colleague sees output and types commands — just like a local shell.
Built for developers
Single binary
Go binary. No runtime, no dependencies. Download and run.
Readable session codes
Wordlist-based codes like keen-fox-42. Easy to say over a call.
End-to-end encrypted
E2EEX25519 key exchange + AES-256-GCM. The relay is a dumb pipe — it never sees your keystrokes or output.
Self-hostable relay
Stateless WebSocket broker. Deploy on Fly.io, Railway, or any container host.
Browser client
Your colleague doesn't need to install anything. Share a link and they join straight from the browser.
Lightweight
No database, no auth tokens, no persistence. Sessions live in memory.
Get started
Shell
RecommendedHomebrew
macOSRoadmap
What's coming next.
- Read-only mode Join as a viewer — see terminal output without being able to type.feature
- Linux system mode OS-level keystroke injection via xdotool/ydotool, matching macOS system mode.platform
- Latency indicator Round-trip time in the client status bar so you know whether lag is keytun or your connection.ux
- Connection notifications Audible and visual notifications when a client joins or leaves your session.ux