Documentation
Remote terminal access from any browser. One command to start, a WebSocket to connect.
Quick Start
Start a walkie-talkie server with a single command. No install required — npx handles everything.
npx @walkie-talkie/cli@latest --openThis starts a server on port 3456, generates a one-time token, and opens the web client in your browser. You can also scan the QR code from a phone or tablet.
Install
If you prefer a permanent install:
npm install -g @walkie-talkie/cliThen run:
walkie-talkie --openPackages
Walkie-talkie is a monorepo with modular packages. Use only what you need.
| Package | Description |
|---|---|
@walkie-talkie/server | Express + WebSocket server with node-pty terminals |
@walkie-talkie/client | Framework-agnostic TypeScript WebSocket client |
@walkie-talkie/react | React hooks and xterm.js TerminalView component |
@walkie-talkie/shared | Protocol types and constants shared between packages |
@walkie-talkie/cli | CLI launcher — the npx entry point |
How It Works
The server spawns real pseudo-terminals using node-pty and bridges them to the browser over WebSocket. The flow:
- Server starts — listens on a port (default
3456) and generates a short-lived token. - Client connects — opens a WebSocket to
ws://host:3456/wsand sends the token to authenticate. - Session established — the server issues a session ID. The client can now create terminals, send input, and receive output.
- Real-time I/O — keystrokes flow from browser to PTY, output flows back. Resize events keep the terminal dimensions in sync.
~/.walkie-talkie/sessions.json) but tokens are never saved to disk.Minimal Example
Connect to a walkie-talkie server from any WebSocket client:
const ws = new WebSocket('ws://localhost:3456/ws');
ws.onopen = () => {
// Authenticate with a one-time token
ws.send(JSON.stringify({ type: 'auth', token: 'your-token' }));
};
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
switch (msg.type) {
case 'auth:ok':
// Authenticated — create a terminal
ws.send(JSON.stringify({
type: 'terminal:create',
cols: 80,
rows: 24,
}));
break;
case 'terminal:created':
console.log('Terminal spawned:', msg.terminal.id);
// Send a command
ws.send(JSON.stringify({
type: 'terminal:input',
terminalId: msg.terminal.id,
data: 'echo hello\n',
}));
break;
case 'terminal:output':
process.stdout.write(msg.data);
break;
}
};Or use the TypeScript client for a higher-level API with auto-reconnect, session persistence, and state management.
Source Code
Walkie-talkie is open source under the MIT license.
github.com/vochsel/walkie-talkie