Sunshine offers low latency, cloud gaming server capabilities with support for AMD, Intel, and Nvidia GPUs for hardware encoding. Software encoding is also available. You can connect to Sunshine from any Moonlight client on a variety of devices. A web UI is provided to allow configuration, and client pairing, from your favorite web browser. Pair from the local server or any mobile device.

Features

Self-hosted

Run Sunshine on your own hardware. No need to pay monthly fees to a cloud gaming provider.

Moonlight Support

Connect to Sunshine from any Moonlight client. Moonlight is available for Windows, macOS, Linux, Android, iOS, Xbox, and more. See clients for more information.

Hardware Encoding

Sunshine supports AMD, Intel, and Nvidia GPUs for hardware encoding. Software encoding is also available.

Low Latency

Sunshine is designed to provide the lowest latency possible to achieve optimal gaming performance.

Control

Sunshine emulates an Xbox, PlayStation, or Nintendo Switch controller. Use nearly any controller on your Moonlight client!

  • Nintendo Switch emulation is only available on Linux.
  • Gamepad emulation is not currently supported on macOS.

Configurable

Sunshine offers many configuration options to customize your experience.

What's New

This release contains critical security updates. For more information see the following:

  • GHSA-39hj-fxvw-758m
  • GHSA-x97g-h2vp-g2c5

Please update as soon as possible!

This release also contains many new features and bug fixes, including:

  • Encoder probing fixes.
  • Display automation is now disabled by default, you can re-enable it in the Sunshing config UI.
  • RestAPI improvements.
  • Async encode added for NVENC.
  • Native DualSense support on Linux.
  • Headless monitor support on Wayland Linux.
  • Minimum FPS is now be based on client framerate.
  • New languages and updated translations.
  • Many behind the scene updates to the build, ci, and dependencies.

For a more comprehensive list of user-facing changes, see below.

What's Changed

  • fix(video): prevent encoder probing with no active displays by @FrogTheFrog in #3592
  • fix(video): allow encoder probing when there are no devices at all by @FrogTheFrog in #3594
  • feat(display): Add revert display config on disconnect option by @VMFortress in #3613
  • fix(api): return proper json objects by @ReenigneArcher in #3544
  • fix(ui): properly handle boolean json responses by @ReenigneArcher in #3626
  • fix(dd_config)!: disable by default by @ReenigneArcher in #3639
  • feat(nvenc): implement async encode by @cgutman in #3629
  • fix(linux/inputtino): DualSense native support without Steam Input by @ABeltramo in #3600
  • feat: Add Max Bitrate option by @utkarshdalal in #3628
  • fix: add missing strings for max_bitrate setting, and improved logging for bitrate by @utkarshdalal in #3656
  • feat(display): expose HDR toggle workaround delay to user by @FrogTheFrog in #3579
  • fix(http): lower TLS to v1.2 for downloading covers by @ReenigneArcher in #3691
  • fix(packaging/windows): add Sunshine directories to system PATH by @ReenigneArcher in #3727
  • fix(linux): update sunshine rules by @ReenigneArcher in #3748
  • feat(input/linux): DualSense adaptive trigger support by @ABeltramo in #3738
  • style(Web UI): Add 1rem margin between Save and Apply buttons for better UI/UX by @richardziegler in #3762
  • fix(config): parse config after logging initialized by @ReenigneArcher in #3769
  • fix(config): fix parse error when list ends on last line of config file by @ReenigneArcher in #3772
  • fix(config): ensure logging config settings are properly loaded by @ReenigneArcher in #3777
  • fix(linux): headless monitors on wayland by @gorgbus in #3783
  • fix(audio): set the bits-per-sample of Steam Streaming Speakers to 16-bit when the default audio device is 16-bit by @andygrundman in #3704
  • fix(apps): exit steam big picture mode on session end by @eaglesemanation in #3808
  • fix(homebrew): enable system tray for linux by @ReenigneArcher in #3819
  • feat(audio): add an option to disable sound streaming by @Clutchnp in #3833
  • fix(linux/input): improve input rules by @jbellionjourdan in #3857
  • fix(web-ui): Change Pin to PIN by @karasuhebi in #3872
  • fix(rtp): improve timestamp accuracy for video by @andygrundman in #3883
  • fix(installer/windows): remember service start type by @ReenigneArcher in #3902
  • fix(package/linux): update desktop metainfo by @joebonrichie in #3901
  • feat(security/windows): Add defense-in-depth measure for insecure system PATH configuration by @cgutman in #3971
  • fix(macOS): nil displayName on macOS 26 beta by @water-vapor in #3991
  • fix(video): base min frame time strictly on client framerate by @ReenigneArcher in #3844
  • chore(l10n): update translations by @LizardByte-bot in #3582