Skip to main content

Changelog

Follow new updates and improvements to LuminalShine.

LuminalShine 26.10.0-beta.1

LuminalShine 26.10.0-beta.1

[!IMPORTANT]
Bundled virtual display driver: LuminalVGD v0.1.0-alpha.9
Signed driver 0.1.0.27 · protocol 0.10 · Build 27 — unchanged from 26.09.1.

LuminalShine 26.10.0-beta.1 introduces experimental PyroWave SDR and HDR streaming in the official Windows build, improves pairing and reconnect reliability, and fixes compatibility with Borealis, an Android client based on Moonlight and tuned for LuminalShine. This prerelease also adds exact virtual-display window routing, trusted application-library imports, clearer Mission Control status, and refreshed documentation. WebRTC remains enabled and its runtime is included in the Windows packages.

PyroWave joins the official Windows build

  • Experimental SDR and HDR10 streaming (#187, #192, #193). PyroWave supports SDR BT.709 and HDR10 BT.2020/PQ with 4:2:0 and 4:4:4 profiles. The Windows release now compiles the codec and its shaders, with a default compressed-video target of 700 Mbps.
  • Built in, but opt-in. Enable experimental PyroWave in Advanced settings and use a compatible client. The host advertises only profiles that pass its bounded availability probe; H.264, HEVC and AV1 retain their existing negotiation paths. Stock Moonlight clients continue to select a regular codec.
  • GPU capture integration. PyroWave imports host-owned D3D11 textures on the matching Vulkan adapter without uncompressed CPU readback. HDR capture is converted to BT.2020/PQ; an HDR request with an SDR source fails setup instead of mislabelling the pixels. Static desktops refresh from retained encoder data without holding driver ring slots.
  • Step 2 capability negotiation. SDR/HDR and chroma profiles are negotiated independently. DXGI/Vulkan probing runs in a bounded disposable child process, and negotiated quality, refresh, bitrate, loss telemetry and pacing settings reach the video worker. Compatible clients can negotiate session-local adaptive FEC and adaptive bitrate.
  • Quality and refresh controls. Advanced settings expose bitrate, quality bias and refresh interval. The default refresh interval of 0 sends complete intra frames; conditional replenishment is an experimental opt-in for the exact client revisions documented in the testing guide. Frame budgets that exceed the current GameStream transport limits are rejected before capture.
  • Visible encoder status (#190, #192). Mission Control reports PyroWave after AV1 in the host status strip, with metadata that distinguishes compiled support from enabled, available advertisement.

PyroWave requires Vulkan 1.3 and the required Windows external-memory/keyed-mutex support on the capture adapter. No Vulkan SDK or LuminalVGD driver update is needed on the installed host. Start with the pinned Aurora client and the SDR/HDR acceptance steps in the PyroWave testing guide. The 700 Mbps target excludes transport overhead; higher settings need sufficient network headroom. Full 10 Gbps transport and broad client/GPU validation remain outside this milestone.

Borealis compatibility and GameStream responsiveness

  • Paired clients can identify the LuminalShine release (#199). HTTPS /serverinfo appends LuminalShineVersion while preserving the GameStream appversion and GfeVersion values. The unauthenticated HTTP response is unchanged.
  • Unknown paths return one correctly framed response (#200, fixes #194). The default handler no longer appends a second malformed response after the declared body. Clients still receive HTTP 200 with XML status_code="404", followed by connection closure.
  • Long launches no longer occupy the HTTPS I/O thread (#203, fixes #202). Launch, resume and cancel run in arrival order on one dedicated worker, allowing other clients' TLS handshakes and requests to proceed while display preparation and application startup run.
  • Shared state follows the new concurrency model. Paired-client settings are protected and copied before use, codec capability reads use atomic values, and /serverinfo can report the starting application without waiting for its lifecycle lock. Shutdown finishes the active worker task and discards queued work. Regression tests cover response framing, version serialization, FIFO scheduling, responsiveness and pending-task shutdown.

Contributor recognition

Special thanks to @magalz for contributing #199, #200, and #203 to fix compatibility with Borealis — an Android client based on Moonlight and tuned for LuminalShine. These contributions improve host identification, protocol response correctness and connection responsiveness for the wider Moonlight client ecosystem as well.

Pairing, teardown and reconnect reliability

  • Pairing requests have distinct identities and bounded lifetimes (#188). Client-specific request selection, exact four-digit PIN validation, retry-safe phase ownership and accurate final status in Mission Control prevent stale or repeated submissions from being confused with a completed pairing. Protocol secrets are redacted from request logging.
  • Launch preparation and last-session teardown are coordinated. Generation checks keep an older session's cleanup from destroying a successor's display state. Launch failure, explicit cancellation and unclaimed-session expiry have deterministic rollback paths.
  • Cleanup restores session-wide state. HDR, frame-limiter, RTSS, platform and runtime-override cleanup participate in the coordinated lifecycle. Independent watchdogs bound teardown phases, choosing the appropriate recovery path when cleanup cannot finish.
  • Regression coverage follows the lifecycle. Pairing policy and UI tests cover retries and final outcomes; session tests cover admission, expiry, cancellation, cleanup transfer and watchdog behavior.

Windows go to the correct virtual display

  • Exact-device window routing (#189). In anchored-exclusive mode, the display helper receives the authoritative per-session LuminalVGD device identity and routes eligible application windows to that device instead of guessing from coordinates or the primary monitor. Shell, helper, tool and minimized windows are excluded, and placement is bounded to the target work area.
  • Event-driven placement with stale-work rejection. Window events are coalesced, and topology/configuration generations prevent outdated work from moving windows after apply, revert, disconnect or delayed reapply.
  • Streaming startup does not wait for the router. It arms after display topology, HDR and refresh preparation complete. Transitional or failed activation leaves routing inactive; it does not substitute another virtual or primary display. Placement remains asynchronous and teardown is bounded.

Mission Control and application-library imports

  • Import a trusted apps.json from Library (4b4514e1). Select a file up to 5 MiB and confirm Replace and import to replace configured applications and their environment variables. Separately auto-synced catalogues are unaffected.
  • Validated, authenticated configuration writes. Imports validate document structure and environment expansion, assign missing UUIDs, preserve supported extension fields, and save through the signed configuration writer. Protection of the configuration directory remains enabled. Only import trusted files: application and preparation commands can execute on the host. Programs and cover images are not transferred, so their paths must exist on this machine.
  • Clearer stream controls (#193). HEVC and AV1 menus display their complete descriptions, and a zero maximum bitrate appears as 0 (Automatic) without changing the saved numeric value.

LuminalVGD driver

This prerelease keeps LuminalVGD v0.1.0-alpha.9, the signed package shipped with 26.09.1:

Driver version0.1.0.27 (DriverVer 08/07/2026, 0.1.0.27)
Protocol0.10 (handshake build 27, capabilities 0xfe5)
Watchdog10-second lease watchdog
SigningNortheBridge Foundation OV certificate, RFC 3161 timestamped

Build 27 retains the D3D12 timeline-fence transport and teardown/drain protections described in 26.09.1. PyroWave and exact-device routing are host-side additions; neither requires a new driver package. Upgrading from 26.09.1 does not normally require replacing the bundled driver.

Project, tests and release engineering

  • WebRTC and PyroWave are explicitly enabled in Windows release CI. WebRTC's runtime is packaged alongside the application. Vulkan/glslang build dependencies support PyroWave shader generation, and Windows coverage builds compile PyroWave too.
  • Deterministic CI gates. Release CI includes a PyroWave/connection-path gate, configuration consistency checks and a GameStream server-info readiness self-test. The general test suite retains its existing reporting behavior; a successful build is not a claim that every historical baseline test is green.
  • Stable Windows packaging (#206). Install the optional libatomic runtime explicitly so upgrades retain the shipped DLL. MSI compatibility checks recognize truncated Vue content hashes while continuing to reject real component changes.
  • Reliable Windows linking (#188). Clang/UCRT builds explicitly select lld, avoiding GNU ld COMDAT failures.
  • Deployment readiness checks (#191). The reusable GameStream checker accepts string and byte-array HTTP bodies, validates server-info XML, accepts FREE or BUSY state, and uses a bounded 180-second default startup window.
  • Documentation refresh. Read the Docs uses a charcoal-and-yellow design with slide-out navigation and a revised landing page. EPUB builds use the standard EPUB template, and configuration/PyroWave documentation covers imports, experimental controls, prerequisites and acceptance testing.
  • Release CI results (run): MSI upgrade compatibility, installer invariants, signature verification, GameStream health-check self-tests, PyroWave/connection-path tests and configuration consistency all passed. The advisory suite recorded 790 passed, 12 failed and 10 skipped (812 total); failures concern an authentication error-text expectation, eight Playnite tests and three locale-consistency tests. This is not an all-tests-green release.
  • Local validation before the packaging-only fix: the Windows application and production web UI built successfully, and 114 selected connection/session regressions passed. Live Moonlight/Borealis streaming was not exercised in that local run; PyroWave hardware acceptance remains as documented in its testing guide.

Upgrading

  • This is 26.10.0-beta.1, a prerelease for testing. Install over 26.09.1 with the installer; settings, pairings and the existing LuminalVGD driver are retained.
  • An active stream ends during the upgrade and can be restarted after the service returns.
  • Hard-refresh Mission Control once (Ctrl+F5) if cached assets from 26.09.1 remain visible.
  • WebRTC remains available from the Play page. PyroWave stays disabled until explicitly enabled and requires a compatible client; ordinary Moonlight sessions continue to use H.264, HEVC or AV1.

Checksums

SHA-256:

9059118bbd7a17aae602635bd4e55b07b34071700a4a46a5b268c859925775cf  LuminalShine_x64-debuginfo.7z6cfc3e5d5e6a8c7531d4697d04cf9de5644537894c84c80b5cca15605846b010  LuminalShine_x64-installer.exe8e32e3887788f1641c1f0b131ac36d6c1976a7d0c25a90b551e2f0958ecefaff  LuminalShine_x64-portable.zip

The same hashes are attached as SHA256SUMS.

Full changes: 6c377335…e2662a44


Original GitHub release

LuminalShine 26.09.1

LuminalShine 26.09.1

[!IMPORTANT]
Bundled virtual display driver: LuminalVGD v0.1.0-alpha.9
Signed driver 0.1.0.27 · protocol 0.10 · Build 27 — unchanged from 26.09.0.

LuminalShine 26.09.1 is the release where the browser streaming path becomes part of the official Windows build. WebRTC is now compiled in, its runtime is shipped with every installer and portable archive, and a fresh build fetches a checksum-pinned wrapper directly from the NortheBridge repository. This release also makes browser sessions and Moonlight sessions hand off cleanly, tears abandoned browser sessions down, fixes two display-helper races behind slow starts and quick reconnects, and closes several Mission Control polish gaps.

WebRTC ships in the official Windows build

  • WebRTC is enabled by default on Windows (#176, fixes #157). Previous official builds exposed the Play page while compiling the host-side WebRTC implementation out. Release CI now enables it explicitly, packages libwebrtc.dll, and stages the DLL beside the test executable as well.
  • The wrapper comes from a pinned NortheBridge release. CMake downloads libwebrtc-win-x64-release.zip from NortheBridge/libwebrtc tag luminalshine-m150.1, verifies SHA-256 45fec22b910b92b414da4a1fa65179baa4367e4db13c43aefcf55b36490d77a0, and reuses the shared cache on later builds. A missing header or runtime DLL is a hard configuration error instead of a package that starts without its dependency.
  • Moonlight and browser capture are mutually exclusive. A Moonlight launch preempts an existing browser session; a browser connection is refused while Moonlight is streaming or still connecting. The launch-pending latch spans the HTTP handler, RTSP hand-off and bounded connection window so two capture workers cannot divide the same LuminalVGD frame ring (#176, #180).
  • Recovery keyframes are acknowledged at the WebRTC encoder boundary. Browser sessions no longer log repeated recovery-IDR timeouts simply because the acknowledgement previously lived only in the RTSP sender.
  • Lost browser links now clean themselves up (#181). The luminalshine-m150.1 wrapper exposes peer and ICE state callbacks. A failed connection closes immediately; a disconnected connection gets a 10-second recovery window before the session, capture worker and virtual display are released. Short network hiccups and successful ICE restarts remain transparent.
  • Better browser-session diagnostics. The host records negotiated video, the first accepted keyframe, data-channel and peer/ICE transitions, and 30-second egress windows; session counters are exposed through the WebRTC session API.
  • Esc reliably leaves fullscreen. Holding Esc exits native fullscreen and the browser fallback mode, with an on-screen hold indicator and a one-time explanation.

WebRTC can still be disabled for a custom build with -DSUNSHINE_ENABLE_WEBRTC=OFF. The classic Moonlight path remains unchanged and is still the path to use when broad native-client compatibility is the priority.

Display and reconnect reliability

  • Slow display-helper startup no longer loses a successful APPLY (#182). The host previously gave up on the anonymous-pipe handshake after 500 ms, reconnected with the wrong protocol shape and then waited ten seconds for a reply the decoder could never recover. Display-helper connections now use one bounded, process-aware handshake and keep the APPLY transaction on the same connection.
  • Quick relaunches no longer race duplicate REVERT requests (#183). Session cleanup and app-exit cleanup now serialize the duplicate check with the transactional restore, preventing a second helper from starting against an already-restored topology. If a helper genuinely exits during the activation APPLY, the host restarts it and retries once instead of spending the full activation timeout on a dead process.
  • These fixes apply to both Moonlight and browser sessions because they harden the shared Windows display-management path.

Mission Control polish

  • The LuminalShine logo loads everywhere (#184). The reserved /images route now serves the branded logo used by the shell, login page and logged-out screen. Route coverage prevents future Web UI image references from silently becoming broken images.
  • The YUV 4:4:4 switch now reflects and preserves the saved value (#184, follow-up for #178). Configuration booleans returned as strings are normalized consistently, fixing the same class of stale-toggle problem for Steam Library, Lossless Scaling and other boolean-backed settings.
  • Configuration hot-apply respects active WebRTC sessions. Autosave and app-lifecycle paths now defer global configuration replacement while either a Moonlight or browser stream is active, instead of checking only RTSP sessions.

LuminalVGD driver

This release keeps LuminalVGD v0.1.0-alpha.9, the same signed package shipped with 26.09.0:

Driver version0.1.0.27 (DriverVer 08/07/2026, 0.1.0.27)
Protocol0.10 (handshake build 27, capabilities 0xfe5)
Watchdog10-second lease watchdog
SigningNortheBridge Foundation OV certificate, RFC 3161 timestamped

Build 27 carries the D3D12 timeline-fence transport used by Direct-to-Encode and the teardown/drain protections that prevent the Windows indirect-display host from being terminated during monitor departure, RDP/console transitions or a delayed ring hand-off. Because the bundled driver has not changed, upgrading from 26.09.0 does not normally require a driver replacement or restart page.

Project, tests and release engineering

  • Windows release builds now compile and package WebRTC from the checksum-pinned NortheBridge wrapper, and the test binary receives the same runtime DLL.
  • WebRTC exclusivity, peer-link liveness, display-helper connection policy, duplicate-revert suppression, static image routes and configuration boolean coercion all have regression coverage.
  • The signed release path uses SSL.com eSigner with a maintained Java 11 trust store while retaining strict TLS validation and post-sign Authenticode verification (#185).

Upgrading

  • Install over 26.09.0 with the installer; settings, pairings and the LuminalVGD driver are kept.
  • An active stream ends during the upgrade and can be restarted after the service returns.
  • Hard-refresh the Web UI once (Ctrl+F5) if a browser still shows cached assets from 26.09.0.
  • Existing Moonlight clients continue to pair and connect as before. Browser streaming is now available from the Play page without a custom build.

Checksums (SHA-256)

453771562df6997c23699e16cd884c9e82da4390ace97104224a588d1c8c6dfc  LuminalShine_x64-debuginfo.7z6191f15f2db44bbc6f53e8592fcfcc8f0254d3f0d08be069b00a08c7ac000a63  LuminalShine_x64-installer.exead1027943852ae89ff6cd6bd9c18868e16dfc3f35a920fb7cb021781a6dfa7a1  LuminalShine_x64-portable.zip

A SHA256SUMS file is attached to this release for sha256sum -c verification.

Full changes: 00da7376…6c377335


Original GitHub release

LuminalShine 26.09.0

LuminalShine 26.09.0

[!IMPORTANT]
Bundled virtual display driver: LuminalVGD v0.1.0-alpha.9
Signed driver 0.1.0.27 · protocol 0.10 · Build 27 — unchanged from 26.08.4.

LuminalShine 26.09.0 is the Mission Control release: the Web UI has been rebuilt from the ground up as a single pane of glass, with everything you used to check across Dashboard, Clients, Applications, Troubleshooting and About visible from one Overview and every detail opening in place. Under the hood it closes the NVENC crash family that hit RTX 30-series (Ampere) hosts, keeps the streamed cursor steady on the current Windows Insider build, unlocks 5.1 / 7.1 audio over WebRTC, and teaches the installer to say when Windows needs a restart.

Thanks to @magalz for the RTX 30-series fixes in this release — see Encoder reliability below.

Mission Control — the new Web UI

Open the Web UI after upgrading and you land on a different application. The design goal was one screen that tells you the state of the host at a glance, with details and settings that open beside what you are looking at instead of on another page.

The shell

  • A 56 px icon rail on the left replaces the top navigation: Overview, Stream, Play, Library, Clients, Display, Settings, Diagnostics. Old bookmarks keep working — every legacy route redirects to its new home.
  • An always-on host strip across the top shows host status, active encoder, display backend, network port and address family, session monitor state and any open incidents, plus the global save indicator.
  • Global search in the strip finds pages, settings sections, individual settings, apps and paired clients from one box. An app hit opens the Library filtered to it, a client hit opens that client, and free text jumps straight to the matching setting.
  • A right-hand inspector column carries the details, editors and actions for whatever is selected on the page. On narrow screens it becomes a slide-in drawer with a floating toggle; Escape closes it.
  • New design tokens throughout: dark chrome, a single gold accent, IBM Plex Sans and Mono. Bootstrap is gone from every rebuilt page.

Overview replaces the Dashboard. Host identity, live session, capture health, recent sessions, connected clients and a "Needs attention" list of everything the old page surfaced as banners, all on one screen.

Stream (replaces Stats). A session list on the left, the selected session in the middle with a live/ended header, six headline numbers, a range selector (full session / 3 / 5 / 15 min) and three charts — encode latency, actual FPS and network throughput. The inspector holds identity, connection and quality rows, and lets you disconnect an active session or delete an ended one.

Library (replaces Applications). A cover grid with source filters (Playnite, Steam, custom), a text filter, Playnite integration status with a force-sync action, and the full app editor for launch, prep commands, display overrides and frame generation.

Clients (replaces Client Management). A table of paired devices with device, display, status and last-seen columns; the inspector edits the selected client's display and stream overrides or pairs a new device by PIN. API tokens live on the same page.

Display (replaces the LuminalVGD Control Panel). Driver card (bundled vs installed version, signature, status), the host's physical and virtual outputs, the four configuration groups (backend and sessions, disconnect and pause behaviour, modes and refresh, HDR), the driver transition prompt, golden-snapshot export and delete, and an inspector that runs the driver diagnostic automatically, with copy and restart-driver actions.

Settings. A left sub-navigation of the nine sections replaces the accordion; the active section is in the URL, and search results land on and highlight the exact field. The three separate save surfaces are collapsed into one Changes panel in the inspector: last save time, pending state, validation, a needs-restart list of the settings that require a service restart (port, address family, UPnP, certificate and key), the recently changed values with before/after, Discard pending and Apply & restart. Settings still auto-save; the panel simply tells you what happened.

Diagnostics (merges Troubleshooting, Logs and About). Health cards for the GPU and display stack (TDR count, stack state, last reset with detail), the capture and render stack (engine, DLSS / DLAA / Frame Generation detection, tips) and drivers and buses; header actions for export logs, force close and restart; the crash-dump alert with a one-click bundle export; and the log viewer with a source selector, chunked search with context snippets, follow-the-tail and per-level tinting. The inspector holds the copyable host report (plain text or Markdown, ready to paste into a bug report) and the five reset actions. The full About page remains one click away.

Web links now point at the Moonlight community Discord invite, with a note that LuminalShine lives in the server's Experimental category.

Encoder reliability — RTX 30-series and every NVENC host

  • AV1 probing on GPUs without AV1 encode (#156, by @magalz). On RTX 30-series / Ampere hosts (an RTX 3080 Ti in the report) the NVENC probe attempted AV1, the driver rejected it, and the failure took H.264 and HEVC down with it — the host fell back to software encoding or crashed outright. The capability check now knows which NVIDIA generations encode AV1, with regression tests for Turing, Ampere, Ada and future device-ID ranges. Fixes #147.
  • Safe teardown of a never-initialized NVENC session (#159). The crash behind the Ampere report was general: tearing down a session that was opened but never initialized unregistered an async event that had never been registered. That path is now closed for every codec, and the terminate handler's one-shot guard no longer turns a second fault into a silent exit.
  • A faulting codec no longer costs the whole encoder (#162). When one codec's probe faults, the next pass skips only that codec instead of discarding NVENC entirely and dropping to libx264 forever.

Capture

  • Cursor held visible while the OS visibility flag flaps (#167). Windows 11 Insider build 29648 has a documented bug that makes the mouse cursor blink; the streamed cursor mirrored it. A short hold on the visibility flag keeps the streamed cursor steady without adding latency on healthy builds.

Audio

  • 5.1 and 7.1 over WebRTC (#165). Surround was previously only available on the classic Moonlight path: browsers never offer multichannel Opus, so a WebRTC session could only ever be stereo. The built-in web client now adds a multichannel Opus payload to its own offer, the host selects it and restates the channel layout from the same table the native encoder uses, and a Stereo / 5.1 / 7.1 selector in the WebRTC session settings is saved with the client profile. If the peer cannot take surround the session falls back to stereo, says so in the UI, and downmixes with proper ITU-R BS.775 coefficients instead of dropping the centre channel and most of the dialogue with it. 5.1 is the well-trodden path in Chrome; treat 7.1 as the less exercised of the two.

Installer

  • Restart page when the LuminalVGD driver is updated (#172). Some hosts keep the previous driver image loaded until Windows restarts. When an install or upgrade moves the bundled driver to a newer version, the installer no longer closes itself; it ends on a page naming both versions with Restart Now and Restart Later, confirms a deferral, and registers the pending restart with Windows either way (exit code 3010 for silent installs, so winget and management tools report it). Upgrading from 26.08.3 does not change the driver, so this page will not appear on this upgrade.

Project, tests and CI

  • The README gains a Project Contributors section (#174), starting with @magalz.
  • The Windows coverage gate reports real data again (#160), and the test-only Simple-Web-Server client use-after-free that crashed the coverage build was root-caused and fixed at the source (#164).
  • The MSI upgrade-compatibility baseline advanced to the 26.09.0 table set (#175); only the renamed Web UI asset components moved, and the invariants gate (UpgradeCode, services, pinned component GUIDs) is unchanged.

Upgrading

  • Install over 26.08.4 with the installer; settings, pairings and the driver are kept. A stream that is active when you upgrade ends and can be restarted a minute or two later.
  • The Web UI's old URLs redirect. Hard-refresh once (Ctrl+F5) if the browser shows the previous interface from cache.
  • Nothing in this release changes the streaming protocol; existing Moonlight clients pair and connect as before.

Checksums (SHA-256)

434d47183a56a51d6e59d30a914cedf30ff58b8618201a09ae7c86c891d6933a *LuminalShine_x64-installer.exe9e1c376825bea4024a9925359605e332241dd8c84458fb2c3e8beecd45e0b4ec *LuminalShine_x64-portable.zipe82c8f6724457c5c68085cde89e83c235627fd4668ef30b5cfed7e6b98a2c8b8 *LuminalShine_x64-debuginfo.7z

A SHA256SUMS file is attached to this release for sha256sum -c verification.


Original GitHub release

Earlier updates