github Nonary/moonlight-qt v6.1.0-vrr16
v6.1.0-vrr16 - Much lower VRR latency with smooth motion (beta)

pre-releaseone month ago

v6.1.0-vrr16: Much lower VRR latency with smooth motion (Beta)

VRR16's biggest change is a much lower-latency adaptive queue. It keeps a small timing reserve and adds protection only when current frame-spacing errors show that more buffering can help. Windows and Linux use the same policy, and it is enabled automatically for normal VRR sessions.

Early gameplay results are a major improvement over VRR15: roughly the same fluidity at about one-third the queue latency. Even Smoothest looks promising at around one-quarter to one-third of VRR15's latency (3–4× lower) in the developer's testing. Some observed averages fell from roughly 12 ms to 2 ms. These are preliminary local queue/latency observations, not a controlled benchmark across all three presets or a measurement of total input-to-screen latency. Results depend on the stream, hardware, and delivery stability.

What's New

  • A much leaner VRR queue. Tiny timing errors and old calibration tails no longer justify keeping a large buffer. Fresh errors must affect frame spacing and be attributable to unfinished client work before the queue can ask for more protection.
  • Smooth motion without permanently paying the maximum delay. The three presets now target the same severity-weighted timing-quality score. Protection grows in small steps when needed, stays through short quiet periods, and drains slowly after sustained recovery.
  • A 0.5 ms timing tolerance. The final policy uses a one-second measurement window and a 30-second quality history. Gameplay testing favored 0.5 ms over the tighter 0.25 ms experiment; shorter measurement windows also proved less stable during tuning.
  • More reliable Windows GPU readiness. Fence completion is checked directly between short waits, so a missed or stale notification cannot hold up work that has already completed. Moonlight also waits for each frame's captured decode fence before scheduling, keeping GPU decode waits out of rendering-service prediction.
  • Clearer diagnostics. The overlay reports the same timing-quality score the queue uses, alongside the selected target and recent spacing error. Reconnecting preserves earlier trace files, and the trace writer reduces diagnostic row loss under contention. The Windows portable package includes updated replay and trace-decoding tools.

How the Lower-Latency Queue Works

Moonlight tracks the host's frame timestamps to estimate when each frame should be submitted for display. It then compares the intended spacing between consecutive frames with their actual submission spacing, accounting for deliberate Reduce judder adjustments.

This is the key refinement to the original missed-frame idea: the final version measures spacing error across consecutive frames, including correctly timed intervals, rather than averaging only late frames. If frames are all shifted by the same amount, that constant offset cancels out. What matters is whether the client is making their spacing uneven.

  1. Ignore small timing noise. A one-second average spacing error of 0.5 ms or less does not request more buffering.
  2. Check whether protection would help. Above that tolerance, the preset's 30-second quality score must be below target, the current error must exceed its allowance, and fresh late readiness must explain the problem. Historical misses alone cannot keep growing the queue.
  3. Add only a small amount. The requested buffer grows by at most 0.25 ms per 250 ms, applied in steps of at most 0.125 ms per frame. It does not jump by a full millisecond for every late frame.
  4. Keep useful protection, then ease it away. Lowest latency, Balanced, and Smoothest require 6, 8, and 10 clean seconds before release. They then shed protection gradually, avoiding repeated buffer growth and collapse between disturbances.

The aim is to preserve smooth motion while spending far less time waiting in the queue. It cannot repair a frame the host never produced or remove the time already spent encoding, transporting, or decoding it.

Timing Presets

VRR timing Timing-quality target Maximum adaptive buffer Example at 120 FPS
Lowest latency 99% Half a configured stream-frame period About 4.17 ms
Balanced (default) 99.5% One configured stream-frame period About 8.33 ms
Smoothest 99.95% Two configured stream-frame periods, capped at 16 ms 16 ms

These are maximum buffer allowances, not delay added all the time. All presets also respect the shared queue-capacity limit, which can lower the effective cap. The normal adaptive-buffer minimum is 1 ms, subject to capacity; startup uses a bounded initial reserve. Stable delivery can let the queue drain toward its minimum.

The percentages are controller timing-quality targets, weighted by the severity and duration of spacing errors. They are not percentages of perfectly displayed frames or promises of tear-free output. In particular, 99.95% does not mean exactly 0.05% of frames will tear; occasional tearing or stutter can still occur.

Existing users: Confirm that V-Sync and VRR are enabled, then select your preferred VRR timing preset. Start with Balanced. Reconnect after changing the preset or Reduce judder. The new queue is automatic; no experimental launcher or V2 checkbox is needed. VRR uses borderless fullscreen.

Downloads

Platform File
Linux x86_64 AppImage Moonlight-6.1.0-vrr16-x86_64.AppImage
Steam Deck / Linux x86_64 Flatpak Moonlight-VRR-6.1.0-vrr16-linux-x86_64.flatpak
Windows 10 / 11 installer MoonlightSetup-x64-6.1.0-vrr16.msi
Windows 10 / 11 portable MoonlightPortable-x64-6.1.0-vrr16.zip

Steam Deck Installation

  1. Switch to Desktop Mode.

  2. Download Moonlight-VRR-6.1.0-vrr16-linux-x86_64.flatpak from the assets below.

  3. Open Konsole and change to the download folder:

    cd ~/Downloads
  4. For a first installation, run:

    flatpak install --user ./Moonlight-VRR-6.1.0-vrr16-linux-x86_64.flatpak

    To update or replace an earlier VRR beta, run:

    flatpak install --user --reinstall ./Moonlight-VRR-6.1.0-vrr16-linux-x86_64.flatpak
  5. Open Steam in Desktop Mode and add Moonlight as a non-Steam game. If an older Moonlight shortcut already exists, remove it and add Moonlight again so Steam selects the user-installed VRR16 Flatpak.

  6. Return to Gaming Mode and launch Moonlight.

No sudo, Mesa downgrade, Flatpak mask, or compatibility installer script is required.

Other Linux Distributions

Install Flatpak through your distribution if it is not already available, download the .flatpak asset, then run from the directory containing the download:

flatpak install --user ./Moonlight-VRR-6.1.0-vrr16-linux-x86_64.flatpak

To replace an existing Moonlight VRR build:

flatpak install --user --reinstall ./Moonlight-VRR-6.1.0-vrr16-linux-x86_64.flatpak

Launch it from the desktop application menu or with:

flatpak run com.moonlight_stream.Moonlight

This bundle targets 64-bit x86 Linux and uses the same Flatpak application ID as standard Moonlight. If both a system-wide and user installation exist, your desktop shortcut may need to be recreated so it opens the user installation.

Windows Installation

Installer

  1. Close Moonlight completely before installing the update.
  2. Download MoonlightSetup-x64-6.1.0-vrr16.msi from the assets below.
  3. Open the downloaded MSI and follow the installer prompts.
  4. If Windows warns that the build is from an unknown publisher, confirm that you downloaded it from this release before continuing. This beta build is intentionally unsigned.
  5. Launch Moonlight from the Start menu when installation finishes.

The installer can replace an earlier Moonlight VRR beta; uninstalling the previous beta first is not required.

Portable ZIP

  1. Close any running copy of Moonlight.
  2. Download MoonlightPortable-x64-6.1.0-vrr16.zip from the assets below.
  3. Extract the entire ZIP to a new writable folder. Do not run Moonlight directly from inside the ZIP.
  4. Run Moonlight.exe from the extracted folder.

Keep all extracted files together. If replacing an older portable beta, use a fresh folder or replace the complete extracted directory while Moonlight is closed.

AppImage Installation

Download Moonlight-6.1.0-vrr16-x86_64.AppImage, make it executable, and run it:

chmod +x Moonlight-6.1.0-vrr16-x86_64.AppImage
./Moonlight-6.1.0-vrr16-x86_64.AppImage

How to Use VRR

  1. Enable V-Sync in Moonlight.
  2. Enable VRR.
  3. Make sure FreeSync, G-Sync, or Adaptive-Sync is enabled for the display.
  4. In Moonlight's frame-rate setting, choose one of the entries marked VRR.
  5. Choose Lowest latency, Balanced, or Smoothest under VRR timing. Start with Balanced, then adjust to your preference.
  6. Select a stream frame rate the host can sustain within the display's VRR range. Full-refresh and lower-rate VRR options are both available.
  7. Optionally enable Reduce judder, and reconnect after changing either timing setting.

SHA-256 Checksums

796d426dd091763d634053fa83370d11007899e33fae38d77618cf8b40772bf7  Moonlight-6.1.0-vrr16-x86_64.AppImage
91a3e040a4a2a190a52a85b5590d749be2e0c91108a170c7d917e6f7ab540638  Moonlight-VRR-6.1.0-vrr16-linux-x86_64.flatpak
3620380a731e146d1f3b501a8f57c636e14beab546011ebcd7e4b8d5477b623a  MoonlightPortable-x64-6.1.0-vrr16.zip
917c261feb0f454e4c59bf23f991517bb1c07b833026f6f8673eaac555698c5a  MoonlightSetup-x64-6.1.0-vrr16.msi

Beta Notice

This remains a beta. Host or game stalls, network interruptions, and decoding delays can still cause visible stutter. When reporting a regression, include:

  • the Moonlight session log;
  • operating system and GPU;
  • display model and refresh rate;
  • selected stream resolution and FPS;
  • whether VRR, HDR, and hardware decoding were enabled; and
  • for Steam Deck, whether the issue occurred in Desktop Mode or Gaming Mode.

Don't miss a new moonlight-qt release

NewReleases is sending notifications on new releases.