VNC in the browser

A web VNC client that actually speaks Mac.

The viewer is a complete VNC (RFB) client written in TypeScript and running on a canvas — no download, no plugin, no admin rights. Its difference from generic web VNC clients: it implements Apple's ARD authentication, so it signs in to a stock Mac the way another Mac would.

The browser VNC client in a session, with its Mac quick-actions menu open: Mission Control, Spotlight, screenshots, volume and more
A live session with the Mac quick-actions menu open — Mission Control, Spotlight and friends as single taps.

Why most VNC clients fail against a Mac

macOS Screen Sharing is VNC underneath, but its login isn't the classic 8-character VNC password — it's Apple's ARD security type: a Diffie-Hellman key exchange followed by AES-128-encrypted credentials, verified by macOS itself. Generic clients that skip that type either can't connect to a stock Mac at all or force you to enable legacy "VNC viewers may control the screen" password mode. This client implements ARD (and plain VNC password auth for standard servers), so a Mac needs no settings changed beyond turning Screen Sharing on.

What "web" buys you

How it reaches the VNC server

Browsers can't open raw TCP connections, so a web VNC client needs a bridge to port 5900. You get three, covered in detail on the how-it-works page:

  1. Pairing code: a one-command connector on the Mac dials out to an edge relay — works across any two networks, no port forwarding.
  2. Connect by address: for a VNC server reachable from the internet (ports 5900–5999), our edge dials the TCP port and bridges it to your browser — nothing runs on the target. This also works with standard VNC servers, not just Macs.
  3. Direct mode: the connector serves the client from the Mac itself over your tailnet or LAN — fully offline-capable, no third party in the path.

Try it now

If your Mac (or any VNC server) is already reachable by address, open the viewer and use "connect by address" — you'll be at the login prompt in seconds. Otherwise the connector below gets a Mac online in about a minute. Either way, credentials travel encrypted end-to-end; here's the full security model.

The client's connect screen with a pairing-code field and a connect-by-address field
Two ways in from the same screen: a pairing code, or a direct address.
Get started

Your browser is the client.

Terminal — on your Mac

$ curl -fsSL https://macremotecontrol.com/connector.mjs -o mrc.mjs && node mrc.mjs

Needs Node 21+ — check with node --version, and install from nodejs.org if you get command not found: node. Screen Sharing must be on too: System Settings → General → Sharing.

A single readable file — open it before you run it. Tailscale/LAN-only? Run it with --listen 5800 --no-relay instead.

Open the viewer