Your entire dev workstation in your pocket. A remote IDE, 60fps desktop stream, visual file explorer, live mobile emulator, zero-config localhost preview, and every AI harness in one UI — Claude Code, Codex, Gemini CLI & 30+ agents — on PC, Web, iPad, or phone.
Codex CLI looks like 1995? Claude Code's TUI hurts? Forget them. Same agents, one UI you'll actually love.
npm i -g 9remote
9remote- macOS (Universal DMG): 9Remote-macos-universal.dmg (Intel + Apple Silicon, signed & notarized)
- Windows (Setup EXE): 9Remote-windows-x64-setup.exe (Installer, x64)
- Windows (Portable EXE): 9Remote-windows-x64-portable.exe (Portable, no install)
- Linux: deb x64 · deb arm64 · AppImage arm64
- iOS / iPadOS: Download on the App Store
- Android: Get it on Google Play
Scan the QR code from a phone (or open the URL) and you're on your machine's shell — over WebRTC or WebSocket, through an encrypted tunnel that closes when you stop the host.
- Every Harness, One UI: Run Claude Code, Codex, Gemini CLI, Cursor CLI, Aider & 30+ AI agents in a single UI, with live artifact inspector (HTML, Markdown, Mermaid).
- Every Screen, Everywhere: Seamless across PC, Web, iPad keyboard shortcuts, and mobile touch dev keys (
Esc,Tab,Ctrl,Alt, arrows). - 60fps Remote Desktop: Ultra-smooth screen streaming with hardware acceleration and <20ms latency over direct WebRTC.
- Full Remote IDE: Multi-pane terminals, integrated code editor with syntax highlighting, visual Git status & diff viewer.
- Live Mobile Emulator: Interactive remote stream for Android Emulator and iOS Simulator straight on your phone.
- Zero-Config Localhost Preview: Built-in Service Worker bridge streams
localhost:3000to your mobile browser without port forwarding or ngrok. - Visual File Explorer (Path-Jailed): Fuzzy search files (⌘⇧P), touch drag-and-drop transfers, and file management safely jailed to your workspace.
- Persistent PTY Daemon: Background daemon keeps your shells and long-running builds alive even when switching networks or closing tabs.
9Remote uses 3 layers of zero-trust defense:
- Split-Key Pairing: The key is split into HEAD and TAIL. The relay server only brokers the handshake with HEAD and never knows your secret TAIL.
- Direct WebRTC P2P: Data flows directly device-to-device with X25519 + AES-256-GCM encryption.
- Physical Host Approval: New devices cannot connect until you physically click "Approve" on your computer screen.
sequenceDiagram
autonumber
participant Client as Mobile / Web Client
participant Server as 9Remote Signaling Relay
participant Host as Host Machine
Host->>Server: 1. Register HEAD (TAIL stays private on Host)
Client->>Server: 2. Request Host lookup with HEAD
Server-->>Client: 3. Return Host Public Key (Relay steps aside)
Note over Client,Host: Direct P2P Connection (WebRTC DataChannel)
Client->>Host: 4. Send encrypted TAIL (X25519 + AES-GCM)
Note over Host: Host verifies TAIL secret
Host-->>Host: 5. Physical Security Prompt: "Approve Device?"
Note over Host: You click Approve on host screen
Host-->>Client: 6. Secure P2P Session Established (<20ms latency)
host/— the Node.js CLI that runs on the machine you want to reach. Serves PTY terminals (daemonized), streams the screen over WebRTC with dirty-tile diffing, and exposes a jailed file explorer. Published to npm as9remote.web/— the Next.js client UI + signaling/session API, deployed to Cloudflare Workers (OpenNext) backed by D1. Terminal data does not flow through it — clients connect to the host directly.desktop/— Tauri wrapper around the host for native macOS, Windows and Linux desktop apps.gitbook/— the docs site.
The transport protocol (host/transport/ and web/shared/transport/) is implemented twice, mirrored on both sides — change one, change the other.
The web app runs on Cloudflare Workers and needs a Cloudflare account (the free tier works). Plain-VPS hosting is not supported — the code uses Workers bindings (D1, KV, Durable Objects, R2).
# 1. Copy the example config and create the resources it references
cp web/wrangler.toml.example web/wrangler.toml
npx wrangler d1 create 9remote
npx wrangler kv namespace create OTA_KV
# fill the printed ids into web/wrangler.toml
# 2. Secrets: copy web/.dev.vars.example → web/.dev.vars, fill in your values,
# then push them to the Worker
npm run secrets:sync
# 3. Deploy
npm run web:deployThe host itself runs anywhere Node runs — no Cloudflare dependency.
- Release binaries are built by the maintainers from the tagged commit of this repository — a release tag always points at the exact source its binaries were built from.
- macOS apps are signed with an Apple Developer ID and notarized.
- Windows installers are Authenticode-signed with a certificate from SignPath Foundation (free code signing for open source).
- The
9remotenpm package is published from this repository by the maintainers. - A binary whose signature does not match the publishers above, or that cannot be traced to a tag here, did not come from this project — do not run it.
Apache License 2.0 — see LICENSE. Free to use, modify, and distribute, including commercially. The "9remote" name and branding are not covered by the license.




