Stream your Mac to any browser
MoonlightWeb is a free, open-source (GPL-3.0) server that streams your Mac to any device with a browser. One download on the Mac that runs the games. Every other device just opens a URL.
What you need
- An Apple Silicon Mac (M1 or newer) — the machine that runs your games.
- Nothing else. MoonlightWeb captures and encodes this Mac itself (ScreenCaptureKit → VideoToolbox) — no second streaming server to install. Already running Sunshine, Wolf or MultiSeat somewhere? Those machines are paired from the same page.
- Any device with a modern browser as the client: Safari, Chrome, Edge or Firefox. No app, no account.
Installation, step by step
Download the installer
Grab the arm64 .pkg from the
releases page.
Run the guided installer — on the Mac that runs your games
The setup wizard walks you through the configuration, including the optional Internet link (remote streaming sessions, off by default). When it finishes, the server is running.
macOS will then ask you to allow Screen Recording for MoonlightWeb — without it, this Mac cannot stream its own screen. It is the first of two permissions only you can grant; the wizard opens the right settings pane for you.
Open a browser on any device
On the Mac itself: https://localhost. From another device on your network: your LAN IP.
Playing from outside your network: turn on Internet access and the app gives you a remote entry link straight to this machine. You can also bring your own domain and certificate.
Your Mac is already there
This Mac is listed straight away, with one card per screen — nothing to pair, no PIN. Other hosts on your network (Sunshine, Wolf, MultiSeat) are discovered by mDNS next to it: those pair once — for Sunshine, by typing the PIN MoonlightWeb shows into Sunshine's web page — and the pairing is remembered forever.
Press play
Pick a screen, a game or the full desktop. iPhone, iPad, another laptop, a TV — anything with a browser becomes a client.
What macOS asks you to allow
Apple lets no installer grant these on your behalf — every streaming server on macOS asks for the same ones. There are two, and MoonlightWeb asks for both at its first launch — right after the install, while you are still in front of the Mac:
- Screen Recording, on the first launch. Tick MoonlightWeb in System Settings → Privacy & Security → Screen Recording (named Screen & System Audio Recording on macOS 15 and newer), then quit and reopen MoonlightWeb — macOS only applies this permission to a program started after you granted it. Until then the hosts page shows this Mac as unavailable and says exactly this.
- Accessibility, asked in the same breath. This is what lets your clicks and keystrokes reach the Mac. Tick MoonlightWeb in System Settings → Privacy & Security → Accessibility. Without it the picture arrives and nothing responds — and macOS gives no warning of its own, which is why the setup page says so and offers to open the pane for you.
Along the way the installer also asks for your administrator password
(the app goes into /Applications) and, on its first page, an Allow on “this package
will run a program to determine if the software can be installed” — that program is the installer's own Internet
page. Nothing else: the installer already allows MoonlightWeb through the macOS firewall, so no incoming-connection
prompt appears, and no second streaming server is installed.
One command instead — and no warning
MoonlightWeb is free and open source, which also means it isn't signed with a paid Apple
Developer ID. macOS therefore greets a downloaded .pkg with
“cannot be opened because it is from an unidentified developer”. That check only applies to files
a browser downloaded, so either of these installs the very same package with nothing to click through:
brew install --cask linckosz/tap/moonlightweb
curl -fsSL https://moonlightweb.top/install.sh | bash
Both ask for your administrator password, install into /Applications and open the setup wizard — same installer, same result, one step less.
Troubleshooting
macOS refuses to open the installer: “unidentified developer”
Expected, and harmless: clearing that dialog requires a paid Apple Developer ID. Use one of
the two commands above and it never appears. If you'd rather keep the file you already downloaded, on
macOS 15 Sequoia and newer double-click it once, let it be refused, then open
System Settings → Privacy & Security, scroll to the bottom and click Open Anyway
— the old Control-click → Open shortcut no longer works. The terminal equivalent is
xattr -dr com.apple.quarantine ~/Downloads/moonlightweb-*.pkg.
The picture is there, but the mouse and keyboard do nothing
That is the Accessibility permission, and macOS drops injected clicks and keystrokes in complete silence when it is missing. Tick MoonlightWeb in System Settings → Privacy & Security → Accessibility, then quit and reopen the app.
The switch is already ticked and it still doesn't work
macOS attaches a permission to an app's signature, not to its name — so a leftover entry from an older or differently-built copy stays ticked while the running app is refused. Clear it in Terminal and let the app ask again:
tccutil reset ScreenCapture com.moonlightweb.server
tccutil reset Accessibility com.moonlightweb.server
Reopen MoonlightWeb, and tick it in the two panes when it reappears there. For a
pre-release build, the identifier is com.moonlightweb.server.dev.
The host doesn't appear in the browser
Make sure the client device is on the same network as the Mac. The installer allows MoonlightWeb through the macOS firewall itself, but a third-party firewall or a guest Wi-Fi that isolates its clients will not. You can also add a host manually by IP.
Playing on iPhone or iPad
Open the same URL in Safari — no App Store download needed. You get a multi-touch trackpad and a native virtual keyboard with modifier keys; a Mac host receives no game controller (macOS allows no virtual gamepad).
Stream feels choppy on a weak connection
Lower the streamed resolution and enable Video Enhancement: the stream is upscaled and sharpened on the client's GPU (WebGL2 or WebGPU running SGSRv1 + FSR1), so a 720p stream looks close to 1440p.