Stream your Linux gaming PC to any browser
MoonlightWeb is a free, open-source (GPL-3.0) server that streams your gaming rig to any device with a browser. One package on the gaming PC. Every other device just opens a URL.
What you need
- A Linux gaming PC (x64) with a GPU capable of hardware encoding — the machine that runs your games.
- Nothing else to install — MoonlightWeb captures the desktop itself (KMS, or the ScreenCast portal on Wayland) and encodes it through VA-API. It needs PipeWire for sound: on a machine still running pure PulseAudio the stream is silent, and says so in the log. Already running Sunshine, Wolf or MultiSeat somewhere? Those machines are paired from the same page.
- Any device with a modern browser as the client: Chrome, Edge, Safari or Firefox. No app, no account.
- A distribution no older than Ubuntu 22.04, Debian 12 or Fedora 36 (glibc 2.34+). Qt and OpenSSL are bundled, but the system C runtime never can be — on an older distro the package installs and the app then refuses to start.
The short way: one command, and updates for free
MoonlightWeb publishes signed APT and DNF repositories. Installing from one of them means your system updater keeps MoonlightWeb current by itself, and the app appears in GNOME Software, KDE Discover and Ubuntu's App Center like any other application. This one command detects your distribution and does the right thing:
curl -fsSL https://moonlightweb.top/install.sh | bash
Rather do it by hand? Those are exactly these steps:
# Debian / Ubuntu / Mint / Pop!_OS
sudo install -d /etc/apt/keyrings
curl -fsSL https://linckosz.github.io/moonlight-web/moonlightweb.gpg | sudo tee /etc/apt/keyrings/moonlightweb.gpg > /dev/null
curl -fsSL https://linckosz.github.io/moonlight-web/moonlightweb.sources | sudo tee /etc/apt/sources.list.d/moonlightweb.sources > /dev/null
sudo apt update && sudo apt install moonlightweb
# Fedora / RHEL / Rocky / Alma / Nobara / openSUSE
sudo curl -fsSL -o /etc/yum.repos.d/moonlightweb.repo https://linckosz.github.io/moonlight-web/moonlightweb.repo
sudo dnf install moonlightweb
# Arch / Manjaro / EndeavourOS
paru -S moonlightweb-bin
SteamOS, Bazzite and other immutable systems have no package manager to add a repository to — they keep the portable AppImage, which the same command downloads for you. The manual route below still works everywhere.
Prefer Docker? Headless servers, NAS and mini PCs
Official multi-arch images (amd64 + arm64) are published to the GitHub
Container Registry. One command on any Linux host with Docker — --network host puts the
container straight on your LAN so it discovers the hosts on it. A container has no desktop to capture,
so this one streams the machines you pair with, not itself:
docker run -d --name moonlightweb --network host \
-v mw-data:/data --restart unless-stopped \
ghcr.io/linckosz/moonlight-web:latest
A container has no trusted local browser, so set an access PIN once, then open
https://<server-ip> and enter it:
docker exec moonlightweb moonlightweb --new-pin
Update with docker pull and recreate the container — the volume keeps your pairings and
certificate. Compose file, port table, macvlan and one-click Internet access are all in
the Docker guide.
Installation, step by step
Download a package
From the releases page, pick the one for your distro family:
.deb for Debian, Ubuntu, Mint, Pop!_OS, elementary, Zorin;
.rpm for Fedora, RHEL, CentOS Stream, Rocky, Alma, Nobara, openSUSE;
a portable .AppImage for Arch, Manjaro, SteamOS, Bazzite and everything else.
Every package is self-contained (Qt and OpenSSL bundled — no dependencies to install).
Install and launch — on the gaming PC
# Debian / Ubuntu / Mint / Pop!_OS — double-clicking the .deb works too
sudo apt install ./moonlightweb-*-linux-x64.deb
# Fedora / RHEL / Rocky / Alma / Nobara
sudo dnf install ./moonlightweb-*-linux-x64.rpm
# openSUSE
sudo zypper install --allow-unsigned-rpm ./moonlightweb-*-linux-x64.rpm
# Arch / SteamOS / other — portable AppImage (needs FUSE 2, see below)
chmod +x moonlightweb-*-linux-x64.AppImage
./moonlightweb-*-linux-x64.AppImage
The package installs to /opt/moonlightweb, adds a menu entry and a
moonlightweb command, opens the firewall ports it needs, and starts the server right away.
To host this machine, use the .deb, the .rpm or the AUR package. Screen capture needs a file capability, which cannot survive inside an AppImage — a portable AppImage still streams the Sunshine, Wolf and MultiSeat hosts on your network, but never its own screen.
Answer the setup wizard
On its first launch MoonlightWeb opens https://localhost/setup, which asks the one
question that is left: whether to allow the Internet link (remote streaming sessions, off by default).
Nothing else is installed — this desktop is captured by the app itself. On a Wayland session the first
stream raises the compositor's screen-sharing dialog once; the grant is remembered afterwards.
Open a browser on any device
On the PC 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 PC is already there
This machine 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 with the PIN they display, and the pairing is remembered forever.
Press play
Pick a screen, a game or the full desktop. Fullscreen, gamepad in hand — up to 4K at 240 fps, with under 20 ms latency over Wi-Fi. (HDR from a Linux host is not implemented yet.)
Troubleshooting
It installs fine, but clicking the app does nothing at all
Nearly always a distribution older than the requirement above. The menu entry runs without a
terminal, so the loader's error has nowhere to go and the click looks like it did nothing. Run
/opt/moonlightweb/bin/MoonlightWeb from a terminal: a line mentioning GLIBC_ or
GLIBCXX_ not found confirms it. The only fix is upgrading the distribution — a program
cannot bring its own C runtime.
Double-clicking the AppImage only opens a "search for software" window
An AppImage is a plain file: your desktop refuses to run it until it is marked executable
(chmod +x moonlightweb-*.AppImage, or Properties → Permissions → Allow executing). It also
needs FUSE 2, which Ubuntu 22.04 and later no longer ship — install it with
sudo apt install libfuse2t64 (libfuse2 before Ubuntu 24.04), or run the file once with
./moonlightweb-*.AppImage --appimage-extract-and-run.
On Debian, Ubuntu and derivatives, just use the .deb instead — it installs with a
double-click, has none of these caveats, and adds a proper menu entry.
The host doesn't appear in the browser
Make sure the client device is on the same network as the gaming PC and that your firewall allows MoonlightWeb's ports. You can also add a host manually by IP.
HEVC or AV1 is greyed out
Codec options your browser can't hardware-decode are automatically disabled — that's expected. H264 works everywhere; HEVC and AV1 availability depends on the client device's browser and GPU.
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 (WebGPU running SGSRv1 + FSR1), so a 720p stream looks close to 1440p.