Skip to content

Releases: linckosz/moonlight-web

MoonlightWeb v0.2.2 — updates that land, frames that stop dropping

Choose a tag to compare

@github-actions github-actions released this 29 Jul 16:57

MoonlightWeb v0.2.2 — updates that land, frames that stop dropping

A release about two promises v0.2.1 made and did not always keep: the one-click update, which could stall forever on a host running as a service, and the renderer, which quietly dropped a fifth of its frames as soon as something else wanted the GPU. MoonlightWeb streams your Sunshine gaming PC to any device with a browser — you still install one app on the gaming PC only; every other device just opens a URL.

Updates

  • The update goes through on a host that runs as a service — the installer used to be launched as a child of the server, and Windows took the whole process tree down with the service the instant the installer stopped it. It killed itself before touching a single file: bar stuck, nothing installed, no trace. It now runs from outside the server's process tree, where the exact same command installs cleanly.
  • A failed update now says it failed — the progress bar could sit at 90% for good while every retry answered "an update is already in progress", until someone restarted the server by hand. The host now gives up out loud, with the reason, and the button works again.
  • The installer is checked before it is run — its exact size and sha256 come from the release itself and are verified against the downloaded file. A release whose asset changed mid-download used to hand the host an installer that refused to start and explained nothing.
  • Closing a failure no longer hides the release — dismissing the error banner marked that version as "don't tell me again", so the only way back to the Update button was clearing the browser's storage by hand. The ✕ on an error now just clears the row.
  • The banner shows up on a page you left open — a phone parked on the hosts page kept its first answer, from before the release existed. The host now re-checks on its own clock, and the page whenever it comes back to the foreground.
  • The installer keeps a log on the host, next to the server's own, so a failed update can be read afterwards instead of guessed at.

Streaming

  • More of the frames that arrive actually reach the screen — only one draw ran at a time, so the GPU idled between frames and presentation was capped around 51fps no matter what the host sent; the surplus was decoded and dropped. Two draws now overlap, which is what the micro-stutter on fast motion (and on iOS pinch-zoom) was made of.
  • The image enhancer steps down instead of costing you frames — FSR1 costs ~10ms of GPU per frame at rest, and about 19ms while a video call fights for the same GPU, which no longer fits inside a 60fps frame. MoonlightWeb now watches whether the draw still fits between two frames and walks fsr1 → sgsr → off, never above your setting, restoring it after things calm down. The overlay marks the enhancer "(auto)" while it holds a lower level.
  • The latency overlay stays a user tool — the raw pipeline trace that came with the per-leg breakdown is developer output and is now behind a flag, not in your overlay and not in your console every second.

Linux

  • Sunshine actually starts, and is still there after a reboot — the packaged .deb/.rpm ship a systemd user unit, and we were running the binary directly: Sunshine landed in MoonlightWeb's own cgroup and was reaped with it, so pairing had nothing to talk to. Nothing enabled the unit either, so a fresh install streamed until logout and the host then went quiet for good. Both fixed.
  • The distro version you need is written down — Qt and OpenSSL are bundled, the C runtime never can be: below glibc 2.34 the package installs and the app then refuses to start without a word, because the desktop entry has no terminal to print to. Ubuntu 22.04 / Debian 12 / Fedora 36 is the floor, and the troubleshooting page names the one command that shows it in a second.

Installer & setup

  • Sunshine's credentials are filled in for you — a fresh install provisions admin/admin, but the wizard showed an empty masked box, so you had to guess what to type. Both fields are prefilled and readable, and the password turns into a real password field the moment you edit it. An already-installed Sunshine still starts empty: those credentials are yours, not ours.
  • The wizard finishes when the address really works — Internet Access was declared done as soon as the DNS record resolved, which sent you to a domain still served with the self-signed fallback. It now waits for the certificate too, the way the Windows installer already did.

Under the hood

  • New per-pipeline observations (frame arrival interval, encoded frame size, decoder queue depth, and the draw split into submit vs GPU wait) — enough to tell "frames genuinely cost more" from "the presentation path is back-pressuring the decoder", which is what drives the enhancer decision above.
  • CI no longer runs the whole pipeline on every branch push; tags and pull requests still do, and packaging can be asked for by hand.
  • The website hands Debian-family Linux the .deb instead of the AppImage, states the same glibc floor as the docs, and keeps its language and GitHub controls on the brand row.

Downloads

Install on the gaming PC only:

Platform Asset
Windows x64 MoonlightWeb-installer-0.2.2-win-x64.exe
Windows ARM64 MoonlightWeb-installer-0.2.2-win-arm64.exe
macOS (Apple Silicon) moonlightweb-0.2.2-macos-arm64.pkg
Linux (Debian/Ubuntu/Mint) moonlightweb-0.2.2-linux-x64.deb
Linux (Fedora/RHEL/openSUSE) moonlightweb-0.2.2-linux-x64.rpm
Linux (portable) moonlightweb-0.2.2-linux-x64.AppImage

Playing from a phone, tablet or TV? Nothing to download — just open your server's URL in the browser.

Requirements

  • A gaming PC running Sunshine (the installer can set it up for you).
  • A modern browser on the client device (Chrome/Edge recommended for full codec, HDR and WebGPU support).
  • Linux hosts: glibc 2.34 or newer (Ubuntu 22.04, Debian 12, Fedora 36).

MoonlightWeb v0.2.1 — one-click updates, real touch controls

Choose a tag to compare

@linckosz linckosz released this 28 Jul 04:18

MoonlightWeb v0.2.1 — one-click updates, real touch controls

A release about the two moments the app got in your way: updating the host, and playing from a touch screen. MoonlightWeb streams your Sunshine gaming PC to any device with a browser — you still install one app on the gaming PC only; every other device just opens a URL.

Updates

  • Update the host from the web app — the update banner now carries an Update button instead of a download link that was useless on a phone. The host downloads the installer and runs it silently; the banner becomes a progress bar that follows the server across its restart and reloads on the new version. No prompt to answer on the gaming PC, no keyboard needed on its desk.

Touch & streaming

  • Scroll in any direction, with one finger — horizontal scrolling now exists end to end, and touch-screen mode behaves like a real touch screen: the cursor lands under your finger and the drag scrolls the page. Long press still grabs the left button, two-finger tap is the right click.
  • Quality switches no longer reset your view — zoom, pan and the on-screen keyboard survive a degradation or an upgrade, on both the seamless and the legacy path.
  • The signature grid behind the stream — the letterbox bars and the strip left by the soft keyboard now carry the app's faint cyan grid instead of dead black.
  • Toasts above the keyboard — the quality-switch warning no longer renders behind the soft keyboard and its key bar, i.e. exactly when you needed to read it.
  • The app stays hidden during a seamless switch: retiring the old stream no longer let the header and hosts page show through the gaps.

Stats

  • Latency broken down per pipeline leg — the overlay still shows one total; hovering (or tapping) the card reveals where the milliseconds go: Sunshine capture/encode, host link, backend, network, then decode, wait and draw on the client.

Installer

  • Adapts to what is on the machine — the Sunshine step now has three shapes (absent, installed but unpaired, already paired) with a Skip button, and stops resetting an existing Sunshine's web-UI credentials on macOS.
  • Clean pairing on a fresh install — Sunshine is no longer restarted mid-pairing, and the wizard waits for the real TLS certificate before opening the admin page instead of landing on a certificate error.
  • Honest checklist — steps that had nothing to do say so ("Sunshine is already installed / already paired") rather than claiming credit next to a full bar.
  • Uninstall can remove the configuration — an unchecked box on uninstall wipes the settings and paired-host list; closing the window keeps them.

Under the hood

  • CI packages real installers on every branch push, so an installer can be tested before a tag is cut — the same path a release publishes.

Downloads

Install on the gaming PC only:

Platform Asset
Windows x64 MoonlightWeb-installer-0.2.1-win-x64.exe
Windows ARM64 MoonlightWeb-installer-0.2.1-win-arm64.exe
macOS (Apple Silicon) moonlightweb-0.2.1-macos-arm64.pkg
Linux (Debian/Ubuntu/Mint) moonlightweb-0.2.1-linux-x64.deb
Linux (Fedora/RHEL/openSUSE) moonlightweb-0.2.1-linux-x64.rpm
Linux (portable) moonlightweb-0.2.1-linux-x64.AppImage

Playing from a phone, tablet or TV? Nothing to download — just open your server's URL in the browser.

Requirements

  • A gaming PC running Sunshine (the installer can set it up for you).
  • A modern browser on the client device (Chrome/Edge recommended for full codec, HDR and WebGPU support).

MoonlightWeb v0.2.0 — hardened Internet access

Choose a tag to compare

@linckosz linckosz released this 25 Jul 14:13

MoonlightWeb v0.2.0 — hardened Internet access

A release built on a hardened design for how an Internet-published server registers its public address: each server now holds a least-privilege credential scoped to its own subdomain, with ownership enforced server-side. MoonlightWeb streams your Sunshine gaming PC to any device with a browser — you still install one app on the gaming PC only; every other device just opens a URL.

Internet access & security

  • Least-privilege DNS registration — Internet access now runs through a dedicated gateway (mw-proxy) that keeps full DNS control server-side. Each MoonlightWeb instance is granted only what it needs: its own {subdomain} A record and the matching _acme-challenge TXT used to issue its TLS certificate. Nothing else is reachable.
  • Server-side ownership — the first instance to claim a subdomain owns it, tracked by a per-instance secret the gateway stores as a keyed hash and never publishes in DNS. That keeps your public address yours — one instance, one subdomain — with no way for another server to take it over.
  • Abuse-resistant — the gateway rejects zone dumps and bulk queries (subdomains can't be enumerated), rate-limits new claims per IP, and only accepts the exact request shapes the app legitimately makes.
  • Backward compatible — servers from earlier releases keep working unchanged; 2.0.0 uses the new registration path automatically, with no reconfiguration on your side.

Instant updates

  • No more stale app after an update — the app's own JS/CSS are now cache-busted by version: every asset carries an ETag/Last-Modified and a ?v=<version> URL derived from the running build, and /version.json is synthesised live. Updating your server no longer serves a half-old, half-new page from the browser cache — the new build takes effect immediately, with cheap 304 revalidation when nothing changed.

Docs & website

  • Refreshed moonlightweb.top — a unified header/footer across every page, a proper /guides hub, a stream. vanity address, and a bot-resistant contact page, with the FAQ and install guides available in English, French and Simplified Chinese.
  • Expanded technical wiki — the PowerDNS, Security and Settings chapters have been updated for the new gateway-based Internet-access architecture.

Under the hood

  • Cross-platform build scripts and docs, with MSVC builds auto-detecting any installed Qt 6.x kit.
  • Backend sources brought under a single clang-format house style.

Downloads

Install on the gaming PC only:

Platform Asset
Windows x64 MoonlightWeb-installer-0.2.0-win-x64.exe
Windows ARM64 MoonlightWeb-installer-0.2.0-win-arm64.exe
macOS (Apple Silicon) moonlightweb-0.2.0-macos-arm64.pkg
Linux (Debian/Ubuntu/Mint) moonlightweb-0.2.0-linux-x64.deb
Linux (Fedora/RHEL/openSUSE) moonlightweb-0.2.0-linux-x64.rpm
Linux (portable) moonlightweb-0.2.0-linux-x64.AppImage

Playing from a phone, tablet or TV? Nothing to download — just open your server's URL in the browser.

Requirements

  • A gaming PC running Sunshine (the installer can set it up for you).
  • A modern browser on the client device (Chrome/Edge recommended for full codec, HDR and WebGPU support).

MoonlightWeb v0.1.3 — seamless quality switching

Choose a tag to compare

@github-actions github-actions released this 19 Jul 15:13

MoonlightWeb v0.1.3 — seamless quality switching

A release centred on what happens when the network gets worse: the stream now adapts without ever interrupting play — no loader, no black frame, no lost input. MoonlightWeb streams your Sunshine gaming PC to any device with a browser — you still install one app on the gaming PC only; every other device just opens a URL.

Streaming

  • Transparent quality switching — when congestion forces a quality change (or the network recovers and quality goes back up), MoonlightWeb opens the new stream as a hidden standby session alongside the live one and swaps the display on its first decoded frame. Input, audio, pointer lock and fullscreen follow the swap; the old session retires quietly behind it. Previously every change meant a visible reconnect.
  • A degrade ladder that actually saves bandwidth — each rung now cuts the bitrate too (-50% on the first rung, -30% after, floored at 2 Mbps) and steps the resolution down one rung at a time to a 720p floor, with video enhancement (SGSR) switched on automatically to compensate. Then media transport, then a 60 fps cap. Dropping resolution alone barely shrank the encoded stream.
  • Automatic recovery — once the network holds up again, quality climbs back on its own.
  • Seamless switching is always on — the setting is gone; hosts that can't run two concurrent sessions fall back to the previous freeze-frame relaunch automatically.

Under the hood

  • One process per session — streams now run in dedicated --stream-worker child processes, lifting the single-session limit that came from moonlight-common-c's process-global state. The parent supervises each worker, detects crashes and releases the slot cleanly.
  • Aligned with Sunshine's session model — a second client joins the running app through /resume (not /launch), and retiring one leg of a dual stream no longer cancels the shared host app session for the survivor.
  • Sunshine configured for two clients — provisioning raises Maximum Connected Clients to 2 when it's lower, leaving higher values untouched. The extra client certificate and its double pairing are no longer needed and have been removed.

Fixes

  • No more black screen on a static host screen — Sunshine only encodes on screen damage, so a requested keyframe could never arrive (typically on the pairing page). The buffered keyframe is now displayed instead of being discarded as stale.
  • Internet access: no more intermittent 502 — every ACME and DNS request now sends a MoonlightWeb/<version> User-Agent; Qt sends none by default, and ZeroSSL's front-end answered UA-less requests with an HTML 502.
  • Press-and-hold now repeats Del from the on-screen toolbar.
  • Clearer self-stream notice — it now spells out that MoonlightWeb is installed on the PC being streamed.

Installer

  • Prior Internet authorization is remembered — on Windows and macOS, re-installing pre-ticks "allow Internet access" when the server was already authorized. First installs stay unchecked: the initial opt-in always requires an explicit click.

Docs & website

  • New pages on moonlightweb.top — an FAQ and step-by-step install guides for Windows, Linux and macOS.

Downloads

Install on the gaming PC only:

Platform Asset
Windows x64 MoonlightWeb-installer-0.1.3-win-x64.exe
Windows ARM64 MoonlightWeb-installer-0.1.3-win-arm64.exe
macOS (Apple Silicon) moonlightweb-0.1.3-macos-arm64.pkg
Linux (Debian/Ubuntu/Mint) moonlightweb-0.1.3-linux-x64.deb
Linux (Fedora/RHEL/openSUSE) moonlightweb-0.1.3-linux-x64.rpm
Linux (portable) moonlightweb-0.1.3-linux-x64.AppImage

Playing from a phone, tablet or TV? Nothing to download — just open your server's URL in the browser.

Requirements

  • A gaming PC running Sunshine (the installer can set it up for you).
  • A modern browser on the client device (Chrome/Edge recommended for full codec, HDR and WebGPU support).

MoonlightWeb v0.1.2

Choose a tag to compare

@github-actions github-actions released this 10 Jul 13:25

MoonlightWeb v0.1.2 — audio, latency & stability

A maintenance release focused on audio fidelity, accurate latency reporting and connection stability, plus a complete technical wiki for contributors. MoonlightWeb streams your Sunshine gaming PC to any device with a browser — you still install one app on the gaming PC only; every other device just opens a URL.

Streaming & audio

  • Proper stereo, proper loudness — audio now negotiates stereo Opus (browsers default to mono, which downmixed the stream and made it ~6 dB quieter than moonlight-qt), and MoonlightWeb restores Sunshine's virtual Steam Streaming Speakers/Microphone to 100% unmuted at each stream start, so the host's volume keys no longer silently attenuate every client.
  • Accurate latency overlay — the on-stream latency figure now sums independently measured legs (host processing + network RTT + backend/client pipeline) instead of an estimated cross-clock offset, so it reflects real felt latency instead of freezing on a wrong value (e.g. a stuck 62 ms while actual latency was under 15 ms).
  • Reliable key locks — Num/Caps/Scroll Lock are now synced host-authoritatively: MoonlightWeb reads the host's real lock state and only taps the keys that differ, so streaming no longer flips a host's lock keys the wrong way.

Stability

  • No more 502 with multiple instances — a pooled Sunshine TLS socket could wedge Sunshine's single-threaded HTTPS server, making the Hosts page time out with a 502 "Operation timed out" for ~2 minutes for any other MoonlightWeb instance or native client. The socket is now evicted right after each app-list fetch.

Deployment

  • stream. vanity subdomain — the stream.<domain> address (the one shown in the marketing screenshot) is now created and backfilled on your zone and redirects to the apex, and it's reserved so it can't be claimed as a user label.

Docs

  • Complete technical wiki — a 15-chapter English wiki under docs/wiki for contributors and AI agents: overview, architecture, backend, frontend, streaming transports, security, settings reference, REST API, installers, PowerDNS stack, build/CI/testing, agentic coding setup, roadmap and constraints.

Under the hood

  • Dev/local builds now derive their version from git describe (rpm-legal, parses newer in the update checker).
  • First step of a theme retune: the login logo is recolored to Professional Dark blue.

Downloads

Install on the gaming PC only:

Platform Asset
Windows x64 MoonlightWeb-installer-0.1.2-win-x64.exe
Windows ARM64 MoonlightWeb-installer-0.1.2-win-arm64.exe
macOS (Apple Silicon) moonlightweb-0.1.2-macos-arm64.pkg
Linux (Debian/Ubuntu/Mint) moonlightweb-0.1.2-linux-x64.deb
Linux (Fedora/RHEL/openSUSE) moonlightweb-0.1.2-linux-x64.rpm
Linux (portable) moonlightweb-0.1.2-linux-x64.AppImage

Playing from a phone, tablet or TV? Nothing to download — just open your server's URL in the browser.

Requirements

  • A gaming PC running Sunshine (the installer can set it up for you).
  • A modern browser on the client device (Chrome/Edge recommended for full codec, HDR and WebGPU support).

MoonlightWeb v0.1.1 — polish & reliability

Choose a tag to compare

@github-actions github-actions released this 08 Jul 12:21

MoonlightWeb v0.1.1 — polish & reliability

A follow-up to the first public release, focused on smoother streaming, fewer crashes, a third language and a handful of quality-of-life touches. MoonlightWeb streams your Sunshine gaming PC to any device with a browser — you still install one app on the gaming PC only; every other device just opens a URL.

What's new

  • 简体中文 — the interface is now available in English, French and Simplified Chinese, and the website gets a language dropdown.
  • Clipboard sync — copy text on one side and paste it on the other; the clipboard follows you between the browser and the host desktop.
  • Clearer host status — a machine that's powered on but not yet running MoonlightWeb now shows as "Unavailable" instead of "Offline" with a pointless Wake button, so you know to start the app rather than wake a PC that's already up.
  • "Are you sure?" when streaming your own PC — a friendly heads-up (with the URL to open from another device) before you stream the very machine you're sitting at.
  • Quicker access to Sunshine — the admin page now links straight to Sunshine's own web configuration, and pairing during install is optional (leave the credentials blank to pair later).
  • Cleaner desktop integration — a single "MoonlightWeb" shortcut that launches the app and lands on the admin page, with single-tab de-duplication so you don't end up with the page open twice.

Streaming & stability

  • Rock-solid transport pick — the WebRTC media-track path now always encodes H.264, fixing streams that could fail to start when HEVC/AV1 was selected.
  • Fewer hiccups on flaky networks — transient connection and app-list failures are retried silently instead of surfacing an error.
  • Smoother on macOS — App Nap is suppressed during a session (no more periodic stutter), and Sunshine's running state is detected reliably.
  • No more double cursor when the stream window regains focus, and live stats reliably reach the browser.
  • Crash hardening — several use-after-free fixes, plus a crash minidump and archived debug symbols so any remaining crash can be diagnosed.

Packaging

  • Release assets are now version-stamped (e.g. …-0.1.1-…) so you can tell builds apart at a glance.
  • macOS .pkg now sets the right ownership on first install.

Downloads

Install on the gaming PC only:

Platform Asset
Windows x64 MoonlightWeb-installer-0.1.1-win-x64.exe
Windows ARM64 MoonlightWeb-installer-0.1.1-win-arm64.exe
macOS (Apple Silicon) moonlightweb-0.1.1-macos-arm64.pkg
Linux (Debian/Ubuntu/Mint) moonlightweb-0.1.1-linux-x64.deb
Linux (Fedora/RHEL/openSUSE) moonlightweb-0.1.1-linux-x64.rpm
Linux (portable) moonlightweb-0.1.1-linux-x64.AppImage

Playing from a phone, tablet or TV? Nothing to download — just open your server's URL in the browser.

Requirements

  • A gaming PC running Sunshine (the installer can set it up for you).
  • A modern browser on the client device (Chrome/Edge recommended for full codec, HDR and WebGPU support).

MoonlightWeb v0.1.0

Choose a tag to compare

@linckosz linckosz released this 08 Jul 05:05

MoonlightWeb v0.1.0 — first public release

MoonlightWeb streams your Sunshine gaming PC to any device with a browser — phone, tablet, laptop or TV. Free and open source. You install one app on the gaming PC only; every other device just opens a URL. Nothing to install on the client.

Highlights

  • Zero-install client — the client is the browser. Open the server URL on any phone, tablet, computer or TV and start playing.
  • Low-latency WebRTC streaming — video, audio and input travel over WebRTC (DataChannels + native media tracks) with an automatic transport fallback chain, so it works across LAN, NAT and restrictive networks.
  • Modern codecs — H.264, HEVC and AV1, with real HDR passthrough and optional YUV 4:4:4 chroma for crisp text and desktop use.
  • WebGPU Video Enhancement — in-browser upscaling and sharpening (SGSR + FSR-style Video Super Resolution) makes a lower-bitrate stream look noticeably sharper.
  • One-click Internet access — turn on a secure public URL with automatic DNS and a real TLS certificate (ZeroSSL/ACME), or stay strictly LAN-only. UPnP NAT traversal with STUN fallback gets you connected without manual port forwarding.
  • Full input support — keyboard, mouse (with a gaming pointer-lock mode), Xbox/PlayStation gamepads with rumble, touch trackpad gestures on mobile, and an on-screen virtual keyboard.
  • Automatic host discovery & pairing — Sunshine hosts on your network are found automatically; pairing is guided and fully asynchronous.
  • Fullscreen, HiDPI, live stats — proper fullscreen on desktop and mobile, HiDPI rendering, and an on-stream stats overlay (bitrate, FPS, RTT).
  • Guided setup wizards on every platform, plus an admin page to manage Internet access, streaming defaults (resolution / frame rate / bitrate / codec) and Sunshine.
  • Privacy-first Internet opt-in — Internet access is off by default and requires explicit consent, which is recorded for traceability; a host-key mechanism lets the machine you installed on reach its own admin over the public domain safely.
  • English & French interface.

Downloads

Install on the gaming PC only:

Platform Asset
Windows x64 MoonlightWeb-installer-win-x64.exe
Windows ARM64 MoonlightWeb-installer-win-arm64.exe
macOS (Apple Silicon) moonlightweb-macos-arm64.pkg
Linux (Debian/Ubuntu/Mint) moonlightweb-linux-x64.deb
Linux (Fedora/RHEL/openSUSE) moonlightweb-linux-x64.rpm
Linux (portable) moonlightweb-linux-x64.AppImage

Playing from a phone, tablet or TV? Nothing to download — just open your server's URL in the browser.

Requirements

  • A gaming PC running Sunshine (the installer can set it up for you).
  • A modern browser on the client device (Chrome/Edge recommended for full codec, HDR and WebGPU support).

Built on the shoulders of Moonlight and Sunshine. Licensed under GPL-3.0.