rmux

web-share

Browser access to a local rmux daemon

The rmux daemon exposes only the /share WebSocket endpoint. The browser app is served by share.rmux.io, then connects to the endpoint encoded in the URL fragment.

First time on Chrome

Local mode opens https://share.rmux.io/share/ and connects to ws://127.0.0.1:<port>/share. Chrome 147 and newer can ask for Local Network Access before allowing that WebSocket. Click Allow to connect to the rmux daemon running on your machine.

Chrome Local Network Access prompt with Allow and Block buttons.
Chrome stores the decision per site. If you click Block, reopen site settings for share.rmux.io and allow Local Network Access.

Lost connection

A local share is tied to the running rmux daemon, the share TTL, and the selected pane. If the page reports a lost connection, refresh the page first. If the share expired or was stopped, create a new rmux web-share URL.

Use rmux without internet

After one successful online visit, the share app installs a Service Worker and caches the static app shell. Later visits to /share/ can load without internet, but the browser still connects to the rmux daemon through the endpoint in the URL.

For machines that must never depend on share.rmux.io, self-host the frontend and pass that URL to rmux with --frontend-url.

Share over internet

rmux provides the browser frontend by default. To share outside your machine, bring a public HTTPS endpoint that forwards to the local daemon, then pass it with --tunnel-url.

rmux web-share -t work --tunnel-url https://terminal.example.com

The generated link keeps using https://share.rmux.io/share/, but its WebSocket endpoint becomes wss://terminal.example.com/share.

BYOT recipes

Cloudflare Quick Tunnel:

cloudflared tunnel --url http://127.0.0.1:9777
rmux web-share -t work --tunnel-url https://<url-printed>

Tailscale Funnel:

sudo tailscale funnel 9777
rmux web-share -t work --tunnel-url https://<machine>.<tailnet>.ts.net

ngrok:

ngrok http 9777
rmux web-share -t work --tunnel-url https://<url-printed>

zrok:

zrok share public http://127.0.0.1:9777
rmux web-share -t work --tunnel-url https://<url-printed>

Self-hosted VPS with Caddy and reverse SSH:

# VPS Caddyfile
terminal.example.com {
  reverse_proxy 127.0.0.1:19777
}

# local machine
ssh -N -R 127.0.0.1:19777:127.0.0.1:9777 user@vps
rmux web-share -t work --tunnel-url https://terminal.example.com

Air-gapped deployments

  1. Build this site and publish the generated dist/ directory on an internal HTTPS host.
  2. Make the share app reachable at https://share.internal.example/share/.
  3. Run rmux web-share --frontend-url https://share.internal.example/share so Origin validation matches the hosted frontend.
  4. Use --tunnel-url only when the WebSocket endpoint itself is reachable through a public or internal reverse proxy.