Install guide · Linux

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

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.)

⬇ Download for Linux

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.

Restrictive network? MoonlightWeb falls back automatically (UDP → TCP), so it keeps working through strict firewalls and hostile hotel Wi-Fi.

Keep reading