How to setup Sunshine for Steam Deck streaming

Samuel Batista

Samuel Batista / January 19, 2026

3 min read • ––– views

For most people I recommend Apollo instead, which offers a more seamless setup and go experice. It's a fork of Sunshine with a built-in virtual display that automatically matches the resolution and frame rate of the device you stream to, so you can skip the virtual display setup in steps 2 to 4. Sunshine and this guide are still worth it if you want maximum control and customization.

Step 1: Install Sunshine

https://github.com/LizardByte/Sunshine

How to ensure high quality connection over WiFi

It's essential to have the PC directly connected to a router to ensure a good experience.

If the router providing internet cannot be connected to the gaming PC connect a secondary router to the PC use Windows Internet Connection Sharing to enable internet access on the Steam Deck.

To do this set the Router into "Access Point" mode and enable Windows Internet Connection Sharing between the WiFi and Ethernet networks.

Then do the following to ensure ICS is enabled on boot:

Set the following registry subkey:

Path: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SharedAccess
Type: DWORD
Setting: EnableRebootPersistConnection
Value: 1

Then launch services.msc, locate the Internet Connection Sharing (ICS) and set its Startup mode to Automatic.

Step 2: Install VDD

https://github.com/VirtualDrivers/Virtual-Display-Driver

After installation, disable the "Virtual Display Driver" Display adapter in Windows Device Manager.

Step 3: Configure VDD

  1. Download toggle-VDD.ps1

This script allows us to enable the virtual display on-demand when Moonlight connects to Sunshine.

  1. Update the config file: C:\VirtualDisplayDriver\vdd_settings.xml
<?xml version='1.0' encoding='utf-8'?>
<vdd_settings>
    <monitors>
        <count>1</count>
    </monitors>
    <gpu>
        <friendlyname>default</friendlyname>
    </gpu>
	<global>
		<!--These are global refreshrates, any you add in here, will be replicated to all resolutions-->
		<g_refresh_rate>30</g_refresh_rate>
		<g_refresh_rate>60</g_refresh_rate>
		<g_refresh_rate>90</g_refresh_rate>
		<g_refresh_rate>120</g_refresh_rate>
	</global>
    <resolutions>
        <resolution>
             <width>1280</width>
            <height>800</height>
            <refresh_rate>30</refresh_rate>
        </resolution>
        <resolution>
            <width>2560</width>
            <height>1600</height>
            <refresh_rate>30</refresh_rate>
        </resolution>
        <resolution>
            <width>1280</width>
            <height>720</height>
            <refresh_rate>30</refresh_rate>
        </resolution>
        <resolution>
            <width>1920</width>
            <height>1080</height>
            <refresh_rate>30</refresh_rate>
        </resolution>
        <resolution>
            <width>2560</width>
            <height>1440</height>
            <refresh_rate>30</refresh_rate>
        </resolution>
        <resolution>
            <width>3840</width>
            <height>2160</height>
            <refresh_rate>30</refresh_rate>
        </resolution>
    </resolutions>
    <options>
		<CustomEdid>false</CustomEdid> <!-- Custom Edid should be named "user_edid.bin"! This does not support emulating resolutions!-->
		<PreventSpoof>false</PreventSpoof> <!--Enable this to prevent manufacturer spoofing when using custom edid. Please only do so if you need to!-->
		<EdidCeaOverride>false</EdidCeaOverride> <!--Enable this to override or add hard coded cea-extension block to custom Edid support allowing you to enable HDR-->
		<HardwareCursor>true</HardwareCursor>
		<SDR10bit>false</SDR10bit>
		<HDRPlus>false</HDRPlus> <!-- If you have SDR10 bit enabled, HDRPlus wont work - there’s a conflict because the display system cannot simultaneously handle both high dynamic range 12-bit and standard dynamic range 10-bit settings. -->
		<logging>false</logging>
        <!-- DEBUG LOGGING FOR EXPERTS ONLY!-->
        <debuglogging>false</debuglogging>
        <!-- DEBUG LOGS CAN GENERATE 1000+ LINES-->
		<!-- Warning: Leaving logging on too long can lead to excessive filesize. Especially DebugLogging, which should only be used for short periods to log errors. -->
		<!-- Logging: Useful to troubleshoot and determine which GPUs are being used, and if displays are working as intended.-->
		<!-- Debug Logging: Logs local system information with every driver function/event/process. Useful for GitHub Help Tickets.-->
	</options>
</vdd_settings>

Step 4: Configure Sunshine

Add a Do and Undo command in: https://localhost:47990/config

powershell.exe -ExecutionPolicy Bypass -File "FULL_PATH_TO_COMMUNITY_SCRIPTS_DIR\toggle-VDD.ps1"

(Optional) Install Playnite

Install Playnite, then visit the Sunshine app page to add Playnite.FullscreenApp.exe, ex:

Command: "C:\Users\Samuel\AppData\Local\Playnite\Playnite.FullscreenApp.exe"
Working directory: "C:\Users\Samuel\AppData\Local\Playnite"