
Security News
Happy Birthday, Shai-Hulud
It has been one year since Shai-Hulud made its first appearance on npm.
Beam your terminal to any device — mobile-optimized web terminal with multi-session support
TermBeam lets you access your terminal from a phone, tablet, or any browser — no SSH, no port forwarding, no configuration needed. Run one command and scan the QR code.
https://github.com/user-attachments/assets/9dd4f3d7-f017-4314-9b3a-f6a5688e3671
![]() | ![]() | ![]() | ![]() |
npx termbeam
Or install globally:
npm install -g termbeam
termbeam
Scan the QR code printed in your terminal, or open the URL on any device.
termbeam # tunnel + auto-password (default)
termbeam --password mysecret # custom password
termbeam --no-tunnel # LAN only
termbeam -i # interactive setup wizard
default and the server auto-spawns it on startup, so connecting any client lands on a ready terminal. Preferences (theme, fonts, defaults, custom keys, workspaces) are persisted server-side in ~/.termbeam/prefs.json and sync across devices..md files rendered with GitHub Flavored Markdown directly in the browserTermBeam starts a lightweight web server that spawns a PTY (pseudo-terminal) with your shell, serves a mobile-optimized xterm.js UI via Express, and bridges the two over WebSocket. Multiple clients can view the same session simultaneously, and sessions persist when all clients disconnect.
flowchart LR
A["Phone / Browser"] <-->|WebSocket| B["TermBeam Server"]
B <-->|PTY| C["Shell (zsh/bash)"]
B -->|Express| D["Web UI (xterm.js)"]
B -.->|Optional| E["DevTunnel"]
| Flag | Description | Default |
|---|---|---|
--password <pw> | Set access password | Auto-generated |
--no-password | Disable password protection | — |
--tunnel | Create an ephemeral devtunnel URL | On |
--no-tunnel | Disable tunnel (LAN-only) | — |
--persisted-tunnel | Reusable devtunnel URL (stable across restarts) | Off |
--port <port> | Server port | 3456 |
--host <addr> | Bind address | 127.0.0.1 |
--lan | Bind to all interfaces (LAN access) | Off |
--public | Allow public tunnel access (no Microsoft login) | Off |
-i, --interactive | Interactive setup wizard | Off |
--log-level <level> | Log verbosity (error/warn/info/debug) | info |
For all flags, subcommands, and environment variables, see the Configuration docs.
Run TermBeam as an always-on background service using the built-in PM2 integration:
termbeam service install # interactive wizard — configures PM2, password, tunnel, boot auto-start
termbeam service status # check process info, uptime, memory
termbeam service logs # tail live logs
termbeam service restart # restart after config changes
termbeam service uninstall # stop and remove the service
The installer checks for PM2 (and offers to install it), then walks you through password, port, access mode, and boot auto-start options. Config is saved to ~/.termbeam/ecosystem.config.js.
For systemd, launchd, and Windows Task Scheduler setup, see the Running in Background docs.
💡 Keep the host awake so the service stays reachable while you're away. macOS: pair with Amphetamine (process trigger on
node) or wrap withcaffeinate -dims. Windows: enable PowerToys Awake and disable network adapter power saving. Linux: usesystemd-inhibitin your unit file. See Keeping the Host Awake for the full setup.
TermBeam auto-generates a password and creates a secure tunnel by default, binding to 127.0.0.1 (localhost only). Auth uses httpOnly cookies with 24-hour expiry, login is rate-limited to 5 attempts per minute, QR codes contain single-use share tokens (5-min expiry), and security headers (X-Frame-Options, CSP, nosniff) are set on all responses.
For the full threat model and safety checklist, see SECURITY.md. For detailed security documentation, see the Security Guide.
Contributions welcome — see CONTRIBUTING.md.
See CHANGELOG.md for version history.
Special thanks to @tamirdresher for the blog post that inspired the solution idea for this project, and for his cli-tunnel implementation.
FAQs
Beam your terminal to any device — mobile-optimized web terminal with multi-session support
We found that termbeam demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.