How it works

How to remote into a Mac — three roads in.

Remoting into a Mac takes one command on the Mac and a browser anywhere else. Every session speaks Apple's own Screen Sharing protocol (RFB with ARD authentication) from your browser all the way to macOS — the only thing that changes between the three modes is how the bytes travel.

1. Pairing code — works everywhere

The default road, built for the common case: your Mac is at home behind NAT, and you're somewhere else. You run a single command on the Mac:

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

The connector is a single dependency-free Node script — about 350 readable lines you can audit before running. It opens an outbound WebSocket to a relay on Cloudflare's edge and prints a 9-character pairing code like XKR-92M-4TQ. On any other device, you open the viewer, type the code, and sign in with the Mac's own username and password. The relay pipes bytes between the two connections — it can't read your credentials (they're encrypted end-to-end by Apple's ARD handshake) and it never learns your Mac's address beyond the connection it dialed out from.

Because both sides dial out, this road crosses NAT, hotel Wi-Fi, office firewalls, and LTE without any port forwarding or VPN. Codes expire within 24 hours, and stopping the connector (one Ctrl-C) kills the session instantly.

2. Connect by address — nothing runs on the Mac

If your Mac is reachable from the internet — a public IP, or a router port-forward in the VNC range (5900–5999) — you don't need the connector at all. Type the address into the viewer and our edge opens a TCP connection to the Mac's Screen Sharing port and bridges it to your browser's WebSocket.

Note that Tailscale and LAN addresses are not reachable this way: the bridge runs on the public edge, and a 100.x or 192.168.x address is invisible from there. For those, use direct mode below.

3. Direct mode — your tailnet, our servers cut out

Already run Tailscale (or you're on the same LAN)? Run the connector in listen mode:

node mrc.mjs --listen 5800 --no-relay

The Mac then serves the viewer itself at http://<tailscale-ip>:5800 and bridges it straight into Screen Sharing. Every byte stays inside your tailnet; the relay is never contacted, and it keeps working with no internet at all.

Which road should I use?

SituationUseRuns on the Mac
Mac at home/office behind NAT, you're anywherePairing codeConnector (dials out only)
Mac with a public IP or a 5900-range port forwardConnect by addressNothing
Both devices on your tailnet or LANDirect mode (--listen)Connector as a local server
A remote Mac desktop running inside a browser tab, with the viewer's dark toolbar above it
Where all three roads end: the Mac's desktop, live in a browser tab.

What the browser actually does

The viewer is a full RFB client written in TypeScript: it performs Apple's ARD authentication (a Diffie-Hellman exchange followed by AES-128), negotiates ZRLE encoding, decompresses the framebuffer in the browser, and paints it onto a canvas. Multiple displays, touch-trackpad input, an on-screen keyboard and one-tap Mac shortcuts are all part of the same page — nothing to install on the viewing side, ever.

Ready to try it? Set up your Mac — one command, about a minute — or read the security model first.

Get started

Reach your Mac in a minute.

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