Skip to content

Releases: RamazanKara/Rubylight

Rubylight 2.4.7

Choose a tag to compare

@github-actions github-actions released this 17 Oct 00:07

Windows game streaming, written in Rust. Built for Radeon and Moonlight.

Download Windows x64 installer · Portable ZIP

New in 2.4.7

Important

Still using WGC on a Rubylight virtual display? Choose Settings → Video → Capture method → Direct driver push to use the recommended, lower-overhead path straight from Rubylight's display driver. Automatic already uses this path on Rubylight virtual displays. Save, end existing streams and reconnect. Physical monitors still use Windows capture; lower capture overhead does not guarantee lower total latency in every setup.

  • Select Direct driver push in Video settings. The Capture method menu now exposes Rubylight's existing direct virtual-display capture path. Automatic's help explains that it already uses driver push on Rubylight virtual displays and WGC elsewhere. The console identifies the selected method and keeps capture-specific controls relevant. Driver push falls back to WGC when unavailable; existing capture selections are preserved.
  • Create a token with all available API permissions. Token creation now offers Select all permissions, including paths hidden by search, while keeping individual selection and clearing available. The old 64-path limit blocked tokens selecting the host's full catalog; the UI and host now accept all advertised paths and methods. Token-management routes remain administrator-only.

Install or upgrade

Disconnect your stream and close host-launched games, then run the installer. Your settings, paired devices and game library are preserved. Open the console at https://localhost:47990.

Full release notes · Build and tests · Code signing policy

Rubylight 2.4.6

Choose a tag to compare

@github-actions github-actions released this 16 Oct 22:48

Windows game streaming, written in Rust. Built for Radeon and Moonlight.

Download Windows x64 installer · Portable ZIP

New in 2.4.6

  • Your phone's microphone becomes the PC's microphone automatically. When microphone forwarding starts, Rubylight selects Steam Streaming Microphone for all Windows recording roles, so apps using the system default can hear the client. Muting or disconnecting restores the previous microphones; manual selections during forwarding are preserved. Recovery also covers host crashes and failed switches. Apps pinned to a particular input still need Default selected, and an already-open voice session may need restarting. If Windows refuses the automatic switch, forwarding stays available with a message explaining manual input selection.

Install or upgrade

Disconnect your stream and close host-launched games, then run the installer. Your settings, paired devices and game library are preserved. Open the console at https://localhost:47990.

Full release notes · Build and tests · Code signing policy

Rubylight 2.4.5

Choose a tag to compare

@github-actions github-actions released this 16 Oct 09:43

Windows game streaming, written in Rust. Built for Radeon and Moonlight.

Download Windows x64 installer · Portable ZIP

New in 2.4.5

  • calibration measures the fastest total rate, and the fastest frame pace, your network carries without loss, using the UDP probe added in 2.4.4. It needs the host to treat that rate as a total on the wire. A PyroWave bitrate is now the stream's whole budget: audio with its parity and 500 kbps for control come off it. With record framing (Nonary's Moonlight, Nightjar, Aurora), each picture gets what fits after packet overhead and one block of critical FEC. The picture gets about 15–20% less than the bitrate you set, and the stream no longer goes over that bitrate on the wire. Raise the client's bitrate if your network has room.

Install or upgrade

Disconnect your stream and close host-launched games, then run the installer. Your settings, paired devices and game library are preserved. Open the console at https://localhost:47990.

Full release notes · Build and tests · Code signing policy · Host validation

Rubylight 2.4.4

Choose a tag to compare

@github-actions github-actions released this 16 Oct 08:47

Windows game streaming, written in Rust. Built for Radeon and Moonlight.

Download Windows x64 installer · Portable ZIP

New in 2.4.4

  • The console's certificate warning is gone after an update too. 2.4.2 and 2.4.3 trusted the console's root only on a fresh install, so a PC updated from an earlier version still showed the browser warning on https://localhost:47990. Setup now trusts it on every install and update.
  • PyroWave clients can measure their own network. Paired clients can ask the host for a two-second UDP test at a chosen rate, optionally sent as whole frames at a chosen pace, and count what arrives. A client can use it to find the fastest pace its network carries without loss and report it with each stream, so a Wi-Fi client is no longer sent frames faster than it can take them. The probe is refused while a stream runs.

Install or upgrade

Disconnect your stream and close host-launched games, then run the installer. Your settings, paired devices and game library are preserved. Open the console at https://localhost:47990.

Full release notes · Build and tests · Code signing policy

Rubylight 2.4.3

Choose a tag to compare

@github-actions github-actions released this 16 Oct 07:04

Windows game streaming, written in Rust. Built for Radeon and Moonlight.

Download Windows x64 installer · Portable ZIP

New in 2.4.3

  • Steadier frame timing when a game runs between the stream's rate and the display's. On Rubylight's 240 Hz virtual display, a game whose pictures land on one refresh and then two (about 160 a second) could make the host encode 121 frames a second for a 120 fps stream, taking pictures that had already waited. Rubylight now judges the source by its average rate and stays at the stream's rate.
  • Streams start when the GPU driver refuses the client's slice count (#32). Moonlight for Nintendo Switch asks for four slices per frame. When the AMD driver rejected that count, the encoder failed and the stream never started. Rubylight still asks for the client's count, but now logs a warning and keeps the driver's own value. A tile count set in amd_av1_tiles is still required.

Install or upgrade

Disconnect your stream and close host-launched games, then run the installer. Your settings, paired devices and game library are preserved. Open the console at https://localhost:47990.

Full release notes · Build and tests · Code signing policy · Host validation

Rubylight 2.4.2

Choose a tag to compare

@github-actions github-actions released this 16 Oct 06:18

Windows game streaming, written in Rust. Built for Radeon and Moonlight.

Download Windows x64 installer · Portable ZIP

New in 2.4.2

  • No more certificate warning on the console. Opening https://localhost:47990 on the host PC showed Firefox's and other browsers' security warning, because the console reused the self-signed certificate that paired devices check. The console now has its own certificate for localhost, 127.0.0.1 and ::1, and setup adds its issuer, Rubylight local console, to Windows' trusted roots. That root can vouch only for those loopback names, and its private key is deleted once it has signed the console's certificate, so trusting it cannot vouch for any other site. Firefox uses Windows' trusted roots by default. Paired devices are unaffected. Opened from another device by the host's network address, the console still shows the warning.

Install or upgrade

Disconnect your stream and close host-launched games, then run the installer. Your settings, paired devices and game library are preserved. Open the console at https://localhost:47990.

Full release notes · Build and tests · Code signing policy

Rubylight 2.4.1

Choose a tag to compare

@github-actions github-actions released this 16 Oct 05:37

Windows game streaming, written in Rust. Built for Radeon and Moonlight.

Download Windows x64 installer · Portable ZIP

New in 2.4.1

  • Your display layout is remembered (#33). Switching Windows to Show only on 2 (only the stream's display), or making the stream's display the main one, during an extended stream was undone at the next connection. Rubylight now keeps the layout you leave a stream in as that device's own, shown as its Virtual display layout under Devices. A layout your client asks for, and the exclusive and isolated layouts, are left as they are.
  • PyroWave on a client with a slower network port (#31). PyroWave sent each frame at the host's own link speed, so a 10 GbE host streaming to a 2.5 GbE client, or a 2.5 GbE host to a 1 GbE client, overran the client's port: shimmering and lost packets unless the bitrate went far down. Clients that report their own network link with each PyroWave stream now get frames paced to that link when it is slower than the host's, or to the pace their calibration found. A client as fast as the host keeps the full speed, so its frames arrive just as soon. pacing_max_bitrate_kbps still sets a fixed limit.
  • Steadier frame timing on Rubylight's virtual displays. A pacing wait meant for Windows Graphics Capture also ran when frames came from Rubylight's display driver; under GPU load it could hold a frame up to a quarter of a frame period past its slot. It now runs only with Windows Graphics Capture.

Install or upgrade

Disconnect your stream and close host-launched games, then run the installer. Your settings, paired devices and game library are preserved. Open the console at https://localhost:47990.

Full release notes · Build and tests · Code signing policy

Rubylight 2.4.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 21:37

Windows game streaming, written in Rust. Built for Radeon and Moonlight.

Download Windows x64 installer · Portable ZIP

New in 2.4.0

  • Rubylight's own virtual display driver. Setup now installs Rubylight's display driver instead of libvirtualdisplay (SudoVDA), and removes libvirtualdisplay from earlier installations once Rubylight's driver runs. The host reads each frame straight from the driver, which saves about 0.9 ms at 240 Hz over Windows Graphics Capture. Until releases are signed, setup signs the driver on your PC with a key it deletes at once; no test mode, no restart. On PCs with Smart App Control, Windows in S mode or an App Control policy, Windows refuses such a driver: setup and the console say so and what you can do, nothing is left half-installed, and streams use a physical display. Two devices streaming one virtual display with different settings both get a picture: the second captures it with Windows Graphics Capture.
  • NVIDIA RTX HDR (TrueHDR) is gone. It was the one part of Rubylight that linked NVIDIA's proprietary libraries, and it only ran on NVIDIA GPUs; without it every Rubylight build is open source, which code signing through the SignPath Foundation requires. HDR streams of HDR games and displays are unchanged. The peak brightness a virtual display reports stays, as Settings → HDR → Peak brightness (hdr_peak_brightness, earlier rtx_hdr_peak_brightness, which is read under its new name). Other saved RTX HDR settings are dropped without a warning.
  • Version details on every Rubylight program. The host, service, start program, setup, diagnostic probes and Rubylight's DLLs now carry the product name, version and a description, which Explorer's Details tab and Task Manager show. Code signing through the SignPath Foundation requires them.
  • Code signing policy and privacy statement. The code signing policy says who signs releases and how to check a download; the privacy statement lists every connection Rubylight makes and how to turn it off. Releases stay unsigned until the SignPath project is approved.
  • Smoother streams once pacing slows down. On a fast wired link the host sends each frame itself between pictures. When pacing later slowed, for example after a lost keyframe, every send took up to half a frame period and held up the next picture. Those sends now move to the video send thread, as on a link paced from the start. Under congestion, a batch of packets now waits at most 4 ms in total for a full socket buffer instead of 4 ms per packet, which could hold a frame for a quarter of a second without network offload. Reading the stream's statistics, for the console or the 5-second log, no longer holds up the send thread while it sorts them.

Install or upgrade

Disconnect your stream and close host-launched games, then run the installer. Your settings, paired devices and game library are preserved. Open the console at https://localhost:47990.

Full release notes · Build and tests · Code signing policy · Host validation

Rubylight 2.3.1

Choose a tag to compare

@github-actions github-actions released this 15 Oct 02:26

Windows game streaming, written in Rust. Built for Radeon and Moonlight.

Download Windows x64 installer · Portable ZIP

New in 2.3.1

Frame rate and slow-network fixes, measured on an RX 7900 XT host: Warp-style requests now get the frame rate they ask for, and TV boxes with 100 Mbps Ethernet get a picture.

  • A picture on TV boxes with 100 Mbps Ethernet. Behind a port slower than the host and a switch with a shallow queue, every keyframe sent at the fast wired pacing rate (up to 800 Mbps) overflowed the queue. The client asked for another, which was lost the same way, and the picture froze. Through a 100 Mbps loopback bottleneck with a 16 or 64 KiB queue, 1440p60 AV1 and HEVC streams at 40 and 60 Mbps delivered no frame in 20 seconds, in 2.2.1 too. Now, once a keyframe is lost, the rest of the stream is paced like Wi-Fi (twice the encoder bitrate), and the picture arrived within about a tenth of a second. Devices that never lose a keyframe keep the fast rate. Settings → Video → Slow down after lost keyframes (keyframe_loss_pacing) turns it off.
  • Streams run at the frame rate the device asks for. Artemis's Warp frame pacing launches at 60 fps and asks for 120 or 240 in its stream request; the host streamed 60, so the frame rate would not go above 60 whatever Warp setting was chosen. The stream now runs at the requested rate, as in Vibepollo: a virtual display's refresh is raised for it and the frame limiter follows it. The bitrate you set stays the stream's budget, so each frame gets less of it than in Vibepollo at the same setting; raise the bitrate if your network allows. Use the launch frame rate (limit_framerate), now off by default, keeps the launch rate.
  • The console shows the frame rate the stream is encoded at. With Use the launch frame rate on, a device that launches at 60 fps and asks for 120 in its stream request is streamed at 60 fps, but the stream card showed 120 as the target. It now shows 60 and the rate the device asked for.
  • Send Artemis's Warp streams at the bitrate you set. With Artemis's Frame pacing set to Warp Drive or Warp 2, the host multiplied the client's bitrate by 2 or 4 but still encoded at the launch frame rate, so a 40 Mbps setting sent about 84 or 168 Mbps. On a TV box with a 100 Mbps Ethernet port, such as the Onn 4K Pro, nearly every frame was lost. The bitrate you set is now the stream's budget whatever the frame pacing. The log's stream lines also show the requested frame rate, the configured and encoder bitrates and the rate actually sent.

Measured with isolated test hosts and the independent moonlight-common-c receiver: a request launched at 60 fps that asks for 120 delivered 120.0 fps on a virtual display (2.3.0: 60.0), and 120 → 240 delivered 240.0 fps; the virtual display's refresh was raised in place and the bitrate stayed at the client's setting. Through a 100 Mbps loopback bottleneck with a 16 or 64 KiB queue, every frame of 1440p60 AV1 and HEVC arrived (2.3.0 and 2.2.1: none). A real Onn 4K Pro and Artemis have not been tested.

Install or upgrade

Disconnect your stream and close host-launched games, then run the installer. Your settings, paired devices and game library are preserved. Open the console at https://localhost:47990.

Full release notes · Build and tests · Host validation

Rubylight 2.3.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 18:15

Windows game streaming, written in Rust. Built for Radeon and Moonlight.

Download Windows x64 installer · Portable ZIP

New in 2.3.0

A fresh start. The 2.2.x line shipped 21 updates in four days. 2.3.0 replaces them with one reviewed release: every change since 2.2.1 was audited, the regressions found are fixed with regression tests, and the web console was reworked. Upgrading from any 2.x keeps settings, paired devices and the app library.

  • A clearer web console. Settings now uses one row layout: the setting on the left, its control on the right. Each description is one or two sentences, with details behind More. The default and Reset appear only when a value differs, and config keys stay hidden unless Show config keys is on. Discarding unsaved changes asks first. Overview, Devices and Maintenance are reorganised: readiness checks are easy to scan, pairing uses PIN and one-time-PIN tabs, and Maintenance is grouped into Host, Displays, Troubleshooting, Integrations and Security. Every console request now has a time limit, so a host that stops answering can no longer leave buttons locked.
  • Pair devices with ordinary punctuation in their names. Since 2.2.2, pairing refused names outside letters, digits and - _ . '. Android clients that send their model, such as "moto g(60)", could not pair, and names like "Galaxy S24+" or "Ramazan’s iPhone" were refused in the console.
  • Hybrid GPUs (#28). With a GPU selected under Graphics card, Rubylight now asks the virtual display driver to render on that GPU, as Apollo and Vibepollo do. If the display still ends up on another GPU and Windows Graphics Capture is unavailable, Desktop Duplication captures and encodes on the GPU that renders it. Previously the stream ended without a picture. The stream card says which GPU is used.
  • Connect right after the host starts. Since 2.2.3, a client that connected while the startup encoder check was running cached H.264/SDR, or its first launch was refused. Discovery and launches now wait up to five seconds for that first check, and never for retried checks.
  • Updates work again for installs outside Program Files. Since 2.2.2, every update failed when the install folder, or a folder above it, belonged to a user, for example D:\Rubylight created in Explorer. Updating now takes ownership of such a folder and locks it down. When a folder above it belongs to a user, the installer offers to move Rubylight to C:\Program Files\Rubylight, keeping settings, paired devices and drivers. Maintenance → Updates now shows why an update stopped instead of "See the setup log".
  • Portable hosts started as administrator run apps again. Since 2.2.2, every non-elevated app, preparation command and client hook failed to start with "bad impersonation level". They now start with the desktop's standard user rights.
  • Controllers follow the device that plays. Since 2.2.16, switching devices during a game left the previous device's virtual controllers plugged in, where they could hold player 1.
  • Capture survives display changes during its colour check. Since 2.2.17, a display change during the HDR/colour refresh restarted capture, or prevented it from opening.
  • Settings the console did not show. Settings saved by Vibepollo, Apollo or 2.0.x under older names (rtss_path, rtss_disable_vsync_ullm, nvenc_force_split_encode, dd_vdd_static_monitor_count) now appear in the console under their current names. Values the host accepts in other spellings show as their option. Quoted numbers such as "60" are read as numbers.
  • Settings checks. A fixed refresh rate with more than three decimals, or a malformed fixed resolution, is refused when saving instead of failing every stream. AMD encoder (AMF) settings are visible when the encoder is Automatic on an AMD GPU.
  • Apps on mapped drives and network shares start under the service instead of reporting "executable not found".
  • Remote Desktop (#18). A launch into a disconnected session is logged as a warning, with the session and its state. When a stream starts on the console sign-in screen while a signed-in Remote Desktop session is disconnected, the log explains that signing in reconnects that session and ends the stream. The console and troubleshooting guide describe this case.
  • The host's private key stays locked when a profile permission reset fails during setup. Before, it could stay readable by every local user until the host restarted.

Validation: workspace tests (core, host, Windows, setup), strict Clippy, formatting, 42 console unit tests and 49 console browser tests. Hybrid-GPU rendering, a real install-folder move and the Remote Desktop cases need the affected hardware and are not yet confirmed there.

Install or upgrade

Disconnect your stream and close host-launched games, then run the installer. Your settings, paired devices and game library are preserved. Open the console at https://localhost:47990.

Full release notes · Build and tests