← Back to archive

Repo of the Day

linckosz/moonlight-web

Published: Sep 23, 2026

Open repository ↗

Play your PC games anywhere, directly in your browser. A web-based Moonlight client for streaming Sunshine games with ultra-low latency, full gamepad support, high-quality video streaming (H.264, HEVC, AV1), and intelligent upscaling algorithms for sharper visuals

Summary

Moonlight-Web is a server application that turns a gaming PC into a self-contained streaming host, reachable from any modern browser without installing client software. It pairs a native C++/Qt capture and encode engine with a WebRTC transport, so one machine produces the stream, serves the web UI, and optionally bridges to Sunshine, Apollo, Wolf, or MultiSeat hosts. It is aimed at engineers who want browser-side clients for LAN or remote game streaming with documented host integrations.

What it is useful for

  • Streaming a PC's desktop or games to Chrome, Edge, or Safari, with H.264/HEVC/AV1 encoding, up to 4K HDR at 240 FPS, on NVENC, AMF, Quick Sync, VA-API, or VideoToolbox (with a software fallback).
  • Driving a headless gaming PC through "MoonlightWeb Virtual Display," a signed virtual monitor that turns on at 1080p 120 Hz during a stream and restores physical displays after; on macOS the host creates its own.
  • Replacing Sunshine as the host when the browser should be the only client and the local machine should appear as a host card with no PIN pairing step.
  • Forwarding browser gamepad input (Xbox, PS, GameSir, 8BitDo) with rumble, plus keyboard and pointer-lock mouse.
  • Sharing a session with up to three guests at Viewer, Gamer, Desktop, or Full control, each with their own PIN, stream quality, and lifetime from 1 hour to unlimited.
  • Acting as a front end for any paired GameStream host through the embedded moonlight-common-c library, with mDNS discovery, PIN pairing, and multi-host support.

How engineers can use it

Install only on the gaming PC; open https://localhost in a recent browser and the machine is already a host.

  • Windows: run MoonlightWeb-installer-<version>-win-x64.exe (or -win-arm64.exe on ARM). The wizard installs ViGEmBus for virtual gamepads and adds firewall rules.

  • macOS (Apple Silicon): brew install --cask linckosz/tap/moonlightweb or curl -fsSL https://moonlightweb.top/install.sh | bash. The .pkg is not notarized.

  • Linux: curl -fsSL https://moonlightweb.top/install.sh | bash adds a signed APT or DNF repo, or install a .deb/.rpm directly. AppImages need FUSE 2 and cannot host a screen, so use a package when you want to stream that machine.

  • Docker (headless server on the LAN):

    docker run -d --name moonlightweb --network host \
      --cap-drop ALL --cap-add NET_BIND_SERVICE \
      -v mw-data:/data --restart unless-stopped \
      ghcr.io/linckosz/moonlight-web:latest
    

    Set a PIN and admin password (docker exec moonlightweb moonlightweb --new-pin) before opening https://<server-ip>.

Stream settings (1–150 Mbps, 720p–2160p, 15–240 FPS, HDR, 4:4:4, Mouse Gaming Mode) are exposed in an in-app overlay. Advanced tuning lives in settings.json and is documented in docs/wiki/07-Settings-Reference.md.

Documented limitations: MultiSeat per-seat streaming is "not yet tested end to end"; Switch Pro and some 8BitDo Bluetooth modes are not read correctly by browsers; Intel Macs require a source build; CGNAT or disabled UPnP can block remote access; Docker bridge networking breaks mDNS/UPnP, so --network host is recommended.