A browser link to any terminal process.
shell claudeThe command keeps running on your machine. shell.online prints a URL, password, and QR code that open the same terminal in a desktop or mobile browser. Terminal traffic is end-to-end encrypted by default.
macOS, Linux, BSD, and Solaris:
curl -fsSL https://shell.online/install | shWindows PowerShell:
irm https://shell.online/install.ps1 | iexHomebrew (the tap lives in this repository):
brew tap teoslayer/shell-online https://github.com/TeoSlayer/shell.online
brew trust --tap teoslayer/shell-online
brew install shell-onlineHomebrew 6 asks you to trust a third-party tap once. Older versions have no
brew trust and can skip that line.
Installers verify checksums. Release binaries and SHA256SUMS are available on
the releases page.
| OS | Architectures | Verification |
|---|---|---|
| macOS | amd64, arm64 | Build |
| Windows | 386, amd64, arm64 | Native ConPTY on amd64; build on others |
| Linux | 386, amd64, armv5/6/7, arm64, LoongArch64, MIPS/MIPSLE/MIPS64/MIPS64LE, PPC64/PPC64LE, RISC-V 64, s390x | Runtime under QEMU |
| FreeBSD | 386, amd64, armv7, arm64 | Build |
| OpenBSD | 386, amd64, armv7, arm64, ppc64, riscv64 | Build |
| NetBSD | 386, amd64, armv7, arm64 | Build |
| DragonFly BSD | amd64 | Build |
| Solaris | amd64 | Build |
See platform details for PTY, router, ROS, installer, and test caveats.
shell <command> # share a command
shell # share a new shell
shell --read-only <command> # disable browser input
shell --foreground <command> # also show it locally
shell --auto-close 5m <command> # set an earlier deadline
shell --persistent <file> <command> # reuse a URL and password
shell --files <command> # opt in working-directory files
shell --files-root <dir> <command> # opt in a different file root
shell list # list local sessions (adapts to terminal width)
shell password <id> # retrieve an active password locally
shell password rotate <id> # revoke it without restarting the process
shell attach <id> # attach locally
shell kill <id> # stop a sessionPress Ctrl-X, then D, to detach from an attached session. See
shell help reference for every command and option.
File sharing is disabled unless --files or --files-root is present. Once
enabled, browsers can browse that root and open referenced files on demand.
Paths and contents use the session's E2EE WebSocket; the CLI rejects traversal,
non-regular files, and symlink escapes. File flags cannot be combined with
--no-e2ee. Refstream (alpha) adds inline backed-file
previews, while the Files panel works with either renderer.
Refstream (alpha) also provides a scoped Connect agent invitation. An agent
can read, search, and wait for terminal output; with explicit control permission
it can type, run commands, and send key combinations such as Ctrl-C. Disconnecting
the agent does not stop the terminal. Files remain unavailable unless the host
separately started the share with --files or --files-root.
The CLI owns the PTY and encrypts terminal frames before sending them to the
relay. The browser decrypts them locally. The relay still sees connection
metadata, encrypted frame sizes, timing, labels, and session lifecycle events.
Use --no-e2ee only when transport encryption without payload E2EE is required.
Anyone with both the URL and password can open a share. Interactive shares can
type with the permissions of the wrapped process; use --read-only when viewers
should only watch. See the security model and
the security policy.
The CLI always prints the generated password and retains it while the local
session is active. After shell login, it also saves an encrypted copy when
that account has enabled its optional personal vault. A vault belongs to one
person, not the team, and unlocks with its password or a supported passkey;
the recovery key is the break-glass fallback. Without an owner-held copy there
is intentionally no service-side recovery backdoor.
Accounts are optional. shell login groups sessions from linked machines in
app.shell.online. The vault is separately optional,
and the CLI reports whether each password was saved there.
The published container keeps one encrypted shell, URL, and password across restarts:
docker compose up -d
docker compose logs shell-online- Quick start
- CLI reference
- Mobile behavior
- Reliability
- End-to-end encryption
- Containers
- Platforms
- Self-hosting — Docker or Cloudflare
Requires Go 1.26.8, Node.js 22, and npm.
npm ci
npm run check
go test -race ./...
npm run test:appSee the contribution guide before opening a pull request.
MIT licensed. See LICENSE.
Developed by Pilot Protocol.