Setup guide

Everything here takes a few minutes. Pick your version: SharpDesk signs in and finds your Macs anywhere; SharpDesk Lite connects directly and pairs with BetterDisplay.

Paid versionSetting up SharpDesk

1 · Install and sign in — on both Macs

  1. Install SharpDesk.app on the Mac you sit at and the Mac you connect to. Move it to Applications and launch it — it lives in the menu bar.
  2. Open the menu-bar panel and enter your email. A 6-digit code arrives from [email protected] — enter it, and this Mac joins your account.
  3. Repeat on the other Mac with the same email. Both Macs now appear in each other's panel, live.
💡No other setup exists. No IP addresses, no port forwarding, no VPN — signed-in Macs find each other over the internet.

2 · Your first sharpened session

  1. On the Mac you sit at, grant Accessibility access when SharpDesk asks (System Settings → Privacy & Security → Accessibility). This is how SharpDesk measures your viewer window precisely.
  2. In the panel, under Sharpen a Mac, click the Mac you're about to view. Its card highlights and reads “Connected — open your viewer.”
  3. Open your viewer — Screens, Apple Screen Sharing, any VNC client — and connect to that Mac as usual.
  4. That's it. SharpDesk resizes the remote Mac's display to exactly fit your view, follows as you resize, and shows the live match on the card (1918 × 1148). Close the viewer and the remote display restores itself.
The Mac being sharpened shows a small sparkle on its card while a session is live.
⚡️Don't want to pick the Mac first? Turn on Auto-sharpen and SharpDesk does steps 2–3 for you, the moment your viewer connects.

3 · Auto-sharpen when you connect a viewer (beta)

Skip the “select a Mac first” step entirely. SharpDesk watches for a viewer opening toward one of your Macs, works out which Mac it is, and sharpens it on its own. It's off by default while in beta.

  1. Open Settings… (⌘,) → Sessions and turn on Auto-sharpen when I connect a viewer.
  2. Open your viewer and connect to one of your Macs exactly as you normally would. There's nothing to click in SharpDesk.
  3. SharpDesk matches that Mac using your explicit New sessions match choice — or the current full display under Automatic. When the viewer closes, SharpDesk follows your After Disconnect choice.

Viewers it recognises: Screens, Apple Screen Sharing, RustDesk, Jump Desktop, VNC Viewer, Microsoft Remote Desktop, AnyDesk, TeamViewer and Parsec. Matching is loose, so version suffixes like “Screens 5” register too.

How it knows which MacIt reads the viewer window's title and matches it against the Macs on your account by name — Mac-Mini-UK.local and Studio — Screens both resolve to the right Mac.
Ambiguity is safeIf two of your Macs could plausibly match the same title, SharpDesk does nothing rather than sharpen the wrong one. Give your Macs distinct Sharing names or select the intended Mac manually.
Spaces & full screenA full-screen viewer lives on its own Space — swiping to another desktop won't drop the session. Only closing the viewer everywhere ends it.
Taking overSelect a Mac yourself at any point and the session becomes a normal manual one, with the full controls below.
💡Use Settings → Sessions → New sessions match, or Make this the default beside the live Match control, to pin new sessions to a particular display. If that monitor is disconnected, SharpDesk safely falls back to its automatic target without forgetting the saved default.

4 · Session controls

When a Mac is selected, a controls card appears under it:

MatchAuto (frontmost window) tracks whatever viewer is in front. You can instead match an entire local display or pin a specific window. The current default is labelled in the menu, and Make this the default saves Auto or an entire screen as the starting target for every new session.
Open ViewerLaunches your viewer straight at the selected Mac. The little menu next to it picks which app: Screen Sharing (Apple), Screens (saved connections match by name, credentials included), or a custom URL with a {host} placeholder for any other viewer. When both Macs run Tailscale, it targets the Tailscale address automatically — so it works from anywhere, not just your home network.
Extend / MirrorExtend keeps the remote Mac's own desktops alongside the sharpened display; Mirror shows the same content on its physical screens.
Black out the Mac's physical displayTurns the remote Mac's physical screens dark during the session — useful when the Mac is in a shared room. The blackout re-asserts and verifies itself through display changes, resizes, and mirror transitions.
Keep matching window sizeOn by default. Turn off to hold the current resolution while you move windows around.
DisconnectRestore display is the safe default. Choose Keep sharpened to retain the same virtual screen through viewer closure, controller sleep or network loss. On wake, the badge returns only after the host confirms or successfully replays the session. Restore, deselecting the Mac, quitting SharpDesk, or the eight-hour safety limit still hands the displays back.
Restore / SharpenOne button, two directions: while a session is live it reads Restore (hand the display back now); once restored it becomes Sharpen — one click to jump back into the session.

On the hosting side, the This Mac card has Reset Displays — it un-blackouts, un-mirrors, and removes the virtual display on the Mac you're sitting at. It's the escape hatch if a session ever leaves the screens in a state you didn't want.

5 · Devices & security

6 · Direct LAN status

Direct LAN is temporarily unavailable. The current beta always uses SharpDesk's normal internet relay while the LAN authentication path is rebuilt. The setting has been removed and older saved preferences are ignored.

⚠️If either Mac runs an older beta that still shows Direct LAN, turn it off and update both Macs. Direct LAN will return only after it uses mandatory authenticated control and passes the same security tests as the relay.

7 · Automation — the sharpdesk:// URL API

Other software can drive SharpDesk: a Shortcut, a script, a launcher like Raycast — anything that can open a URL can shape a remote Mac's screen to an exact size.

Sharpen at a sizesharpdesk://apply?width=1512&height=982
A specific Mac…&host=Mac%20Mini — device name (case-insensitive) or device id; default is the selected Mac
Options&scale=1|2|3 (default 2, Retina) · &mode=extend|mirror · &blackout=1|0 (defaults: your saved session options)
Restoresharpdesk://restore — hands the display back (same host parameter)

From a terminal or script: open "sharpdesk://apply?width=1512&height=982&host=Mini".

An external apply turns Keep matching window size off — you've told SharpDesk the exact size, so the automatic window-matcher stops overriding it. Flip it back on in the panel to return to window-following.

💡Pair it with your viewer: a Shortcut that opens your Screens connection and the sharpdesk://apply URL gives you a one-click, perfectly-sized session.

8 · Updates & beta builds

SharpDesk updates itself (Sparkle) — Check for Updates… in the panel fetches the latest signed release. Flip Also get beta updates in Settings (⌘,) to receive pre-release builds early: same signing, same update path, just sooner. Leave it off to only ever see stable releases.

Free versionSetting up SharpDesk Lite

The two pieces

Lite is the do-it-yourself version for BetterDisplay users: you run a small app on your Mac, it drives BetterDisplay on the remote one, connected directly over your own network or VPN (Tailscale works great).

On the Mac you sit atSharpDesk Lite Client Helper — watches your viewer window and sends the resize instructions.
On the remote MacBetterDisplay with its HTTP integration enabled.

Both Macs must be able to reach each other directly — same network, or a VPN like Tailscale that gives the remote Mac a stable address.

Setting it up

  1. On the remote Mac, install BetterDisplay and enable its HTTP integration in BetterDisplay's settings. The default port is 55777. Set an access token there if you want one (recommended outside your own network).
  2. On your Mac, open Lite Client Helper and add a host: pick the BetterDisplay backend, and enter the URL — e.g. http://192.168.1.20:55777 on a LAN, or http://<tailscale-ip>:55777 over Tailscale. Paste the token if you set one.
  3. Pick the remote screen to manage and the viewer window to match, choose Extend or Mirror, and connect your viewer as usual.
⚠️BetterDisplay's HTTP integration listens on the remote Mac. Keep it on a trusted network or behind a VPN, and use an access token.

Troubleshooting

The sign-in code doesn't arrive

Check spam for mail from [email protected], and use Resend in the panel. Codes expire quickly — request a fresh one if in doubt.

The other Mac shows “Connecting…”

The remote Mac is offline or asleep, or its This Mac switch is off. SharpDesk reconnects automatically when the other side returns, then asks the host for its current session state. A still-valid session resumes; an expired or recovered session is shown as restored instead of being guessed locally.

My session matched the wrong window

Auto mode tracks the frontmost window. Pin your viewer explicitly with the Window picker in the session controls.

The remote Mac's screens look wrong after a session

On that Mac, open SharpDesk and press Reset Displays in the This Mac card. It restores the physical screens and removes the virtual display, whatever state things are in.

“Virtual display unavailable: failed to create…”

Another virtual display already owns that Mac — in practice, Apple Screen Sharing in High Performance mode, which runs one of its own. Switch that session to Standard mode (or disconnect it) and try again. HP mode already matches your display end-to-end, so the two features genuinely don't stack.

Where did Direct LAN go?

It is temporarily disabled while its authentication is upgraded. Update both Macs and use the normal relay connection; no Local Network permission is currently required by SharpDesk.

Lite can't reach the remote Mac

Confirm the two Macs can reach each other (same network or VPN up), BetterDisplay is running with its HTTP integration on, and the URL uses port 55777.

Stuck? Write to [email protected] — a human reads it.