Attention
This release contains critical security updates. For more information see
GHSA-3hrw-xv8h-9499.
Please update as soon as possible!
This release also contains many new features and bug fixes, including:
- Implemented automatic resolution and HDR mode changing on Windows.
- Implemented YUV 4:4:4 encoding support for Intel and NVIDIA GPUs on Windows.
- Implemented automatic discovery support for macOS hosts.
- Added support for capturing displays other than the main display on macOS.
- Added support for emulating DS5, Nintendo Switch Pro, and Xbox One controllers on Linux.
- Removed the limit on concurrent streaming sessions.
- Eliminated the need for driver patching to use NvFBC capture on Linux.
- Significantly reduced CPU usage for encoding when using AMD GPUs (RDNA or later) on Windows.
- Fixed video traffic timeout error when streaming from a Hyper-V VM using GPU Paravirtualization.
- Fixed inability to stream from a Windows machine when using the Microsoft Basic Display Adapter driver.
- Optimized internal frame handling by eliminating redundant data copies and using functions optimized for SSSE3,
AVX2, and AVX512. - Implemented flow control to reduce the chance of dropped packets by overwhelmed routers or network switches.
- Reworked the video encoding rate control logic for VA-API to improve bitrate efficiency on Linux.
- New capture method using Windows.Graphics.Capture API on Windows.
This is an experimental feature and requires running Sunshine manually.
It is not compatible with running Sunshine as a service. - Clients can now be named and unpaired individually.
- The web UI now supports dark mode.
- Checkboxes replace select menus for boolean settings in the web UI.
- RestAPI improvements.
For a more comprehensive list of user-facing changes, see below.
What's Changed
- feat(macos/capture): support for capture display other than main display by @TimmyOVO in #2449
- fix(macos/input): incorrect mouse input for non-main display by @TimmyOVO in #2461
- webui: Update resolution automation example text with auto refresh rate by @cgarst in #2503
- fix(linux): add frame processing latency and logging improvements by @gschintgen in #2502
- AppImage: add needed VA-API libraries (Intel & AMD) by @gschintgen in #2429
- Allow a custom FFmpeg build to be provided using CMake variables by @chewi in #1970
- Fix log message for Periodic Ping by @c3m3gyanesh in #2538
- feat(ui): Dark Mode by @Hazer in #2493
- build(win): use UCRT64 environment instead of MinGW64. by @tez011 in #2323
- feat(win): new capture method, Windows.Graphics.Capture by @tez011 in #2580
- Name and unpair individual clients by @xanderfrangos in #2042
- feat(audio): custom surround-params by @mariotaku in #2424
- Remove the need for a patched nvidia library for NvFBC. by @hgaiser in #2471
- build(linux): add homebrew support by @ReenigneArcher in #2667
- fix(macos): Mouse input broken in-game by @Hazer in #2550
- feat(input/linux): add support for more virtual input devices by @Hazer in #2606
- fix(linux/input): battery values conversion by @ABeltramo in #2715
- feat: add min_fps_target setting by @ReenigneArcher in #1043
- fix(upnp): support newer miniupnpc library by @ReenigneArcher in #2782
- macOS: New implementation of service publication by @cathyjf in #2786
- build(linux): drop support for AUR by @ReenigneArcher in #2819
- Implement basic network flow control by @ns6089 in #2803
- Provide SSSE3, AVX2, and AVX512 optimized Reed-Solomon functions by @cgutman in #2828
- Eliminate a redundant alloc+copy of each frame by @cgutman in #2852
- Implement S/G IO for non-batched sends and eliminate more data copies by @cgutman in #2867
- Implement S/G IO for batched sends and eliminate another frame copy by @cgutman in #2874
- Migrate audio pipeline to float from 16-bit integer by @ns6089 in #2873
- Handle CTRL_CLOSE_EVENT on Windows by @ns6089 in #2952
- feat!: drop advertised resolutions and fps by @ReenigneArcher in #2924
- fix(linux): ensure NvFBC capture works after multiple sessions by @insanemal in #3020
- feat(win/video): support native YUV 4:4:4 encoding by @ns6089 in #2533
- fix(linux): enable lowlatency mode for AMD by @ReenigneArcher in #3088
- fix(nvhttp): wrap TLS socket to ensure graceful closure by @cgutman in #3077
- fix(mdns): don't hardcode mDNS instance name by @cgutman in #3084
- fix(win/video): don't offload chroma subsampling math to texture sampler when downscaling by @ns6089 in #3014
- build(cmake): Prioritize vendored includes over system-wide by @jmou in #3182
- fix(macos): Touch input broken by @BayLee4 in #3240
- fix(video): encode at least one frame before capture reinit by @cgutman in #3300
- fix: Reverse Proxy support by @Degot in #3173
- feat(stream)!: remove limit on concurrent sessions and allow quitting apps with active sessions by @cgutman in #3325
- fix(nvenc): disable filler data in AV1 bitstream by @cgutman in #3336
- feat(vaapi): add option to enable strict enforcement of frame size by @cgutman in #3332
- fix(macos): prevent indefinite hanging if screen capture is not granted by @cathyjf in #3360
- fix(process): avoid leaking zombies and fds in detached processes by @cgutman in #3379
- fix(hostname): fix handling of non-ASCII hostnames on Windows by @cgutman in #3382
- feat(display)!: Add libdisplaydevice dependency and output name mapping by @FrogTheFrog in #2894
- fix(nvenc): Enable opt-in client refresh by client by @TheElixZammuto in #3415
- fix(shaders/directx): replace modulus with bitwise operator by @iMakeSoftware in #3499
- feat(display): Configure display device based on user config by @FrogTheFrog in #3441
- fix(confighttp): do not return 200 on errors by @ReenigneArcher in #3385
- feat(display): add display mode remapping option by @FrogTheFrog in #3529
- fix(capture/windows): fix capture when using the basic render driver by @cgutman in #3531
- feat(capture/windows): hook APIs to avoid output reparenting that breaks DDA by @cgutman in #3530
- fix(checkbox): inverse global prep values for apps by @FrogTheFrog in #3547
New Contributors
- @TimmyOVO made their first contribution in #2449
- @cgarst made their first contribution in #2503
- @skryvel made their first contribution in #2514
- @c3m3gyanesh made their first contribution in #2538
- @BeeLeDev made their first contribution in #2555
- @xanderfrangos made their first contribution in #2042
- @hgaiser made their first contribution in #2471
- @cathyjf made their first contribution in #2786
- @cfalas made their first contribution in #2841
- @insanemal made their first contribution in #3020
- @jmou made their first contribution in #3183
- @BayLee4 made their first contribution in #3240
- @andygrundman made their first contribution in #3294
- @midwesternrodent made their first contribution in #3287
- @caveat-makes-software made their first contribution in #3264
- @Degot made their first contribution in #3173
- @soerenkampschroer made their first contribution in #3348
- @davidemarcoli made their first contribution in #3356
- @MiroKaku made their first contribution in #3416
- @petrhanak made their first contribution in #3490
- @iMakeSoftware made their first contribution in #3499
- @Gurubaseio made their first contribution in #3466
Full Changelog: v0.23.1...v2025.118.151840