Your Claude. Your terminal. Anywhere.
Self-hosted browser terminal for Claude Code. Connect to your tmux sessions from any device — phone, tablet, laptop — over a single secure WebSocket. One npm install away.
npm install -g ccremote
ccremote startThat's it. ccremote auto-generates a token, opens your browser, and connects you to tmux.
Other package managers & Docker
bun install -g ccremote
pnpm add -g ccremote
docker run -p 14100:14100 ghcr.io/nicholasgriffintn/ccremote| ccremote | ttyd / GoTTY | Web SSH | tmate | |
|---|---|---|---|---|
| Mobile-first UX | ✓ | — | — | — |
| File browser + Monaco editor | ✓ | — | — | — |
| Single-port (HTTP + WS) | ✓ | ✓ | ✓ | — |
| Self-hosted | ✓ | ✓ | ✓ | optional |
| WebGL terminal | ✓ | — | — | — |
| Built for Claude Code workflows | ✓ | — | — | — |
- True terminal fidelity — xterm.js + WebGL, Unicode 11, 256-color
- Mobile-first — keyboard toolbar, swipe gestures, haptic feedback
- Files + previews — Monaco editor, syntax highlighting, image preview
- Self-hosted — your machine, your tmux, your token. No third party.
- Single port — HTTP and WS share one upstream behind nginx/Caddy
- PWA — installable on iOS/Android home screens
ccremote start # localhost:14100, auto-token, opens browser
ccremote start --host 0.0.0.0 --port 8080
ccremote token print # show current token
ccremote token rotate # generate a new one
ccremote --helpSingle-port means a single upstream. Nginx:
location / {
proxy_pass http://127.0.0.1:14100;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}Caddy:
ccremote.example.com {
reverse_proxy 127.0.0.1:14100
}| Flag / Env | Default | Description |
|---|---|---|
--port / PORT |
14100 |
HTTP+WS port |
--host / HOST |
127.0.0.1 |
Bind address (0.0.0.0 to expose) |
--token / AUTH_TOKEN |
auto | Shared auth token |
--allowed-paths / ALLOWED_PATHS |
$HOME |
Comma-separated path allow-list for the file browser |
--no-open |
— | Don't open the browser on start |
The auto-generated token is stored at ~/.ccremote/config.json (mode 0600).
One Node process, one HTTP server, three layers:
Browser ⇄ wss/https ⇄ ccremote node ⇄ pty ⇄ tmux
(one port) Next.js + ws your sessions
pnpm install
pnpm dev # web (14100), relay (14300), docs (14102)
pnpm build
pnpm test
pnpm typecheck
pnpm lintThe repo is a pnpm + Turborepo monorepo. See CLAUDE.md for the full layout.
The CLI is for self-host on a single machine. For multi-tenant or container deployments, the repo also ships:
- Docker compose (
docker-compose.prod.yml) — separate web/relay services - PM2 (
ecosystem.config.cjs) — multi-process production
PRs welcome. Conventional commits (feat:, fix:, chore:). See AGENTS.md and CONTRIBUTING.md.
MIT © Nicholas Griffin