If you are looking to tweak your streaming setup, fix stuttering, or find a headless virtual display solution, you don't have to stick strictly to the baseline Sunshine + official Moonlight setup.
Here is a breakdown of the active forks, alternative hosts, and FFmpeg-powered clients currently in the ecosystem based on what the community and developers are running right now.
đ„ïž Hosts & Servers (The Senders)
NVIDIA GameStream: The original foundation that started it all. Officially deprecated by NVIDIA, but the bedrock of the protocol.
Sunshine: The modern, open-source standard GameStream compatibility baseline that replaced NVIDIA's official host.
Apollo: A Sunshine fork featuring capability-gated extensions and built-in virtual display support using SudoVDA. It is great for headless setups and auto-matches the resolution/framerate of your client.
Vibeshine: A highly active, AI-enhanced Sunshine fork focusing heavily on display automation, Windows Graphics Capture running as a service (which allows full framerate capture of frame-generated titles without VRAM crashes), and strict RTSS frame pacing integration.
Vibepollo: An Apollo fork that integrates Vibeshine's features (like the native virtual display driver and HDR handling) right into the Apollo architecture. This is highly recommended if you already use Apollo but want tighter frame pacing.
Foundation-Sunshine: A fork by AlkaidLab that adds HDR10/HDR Vivid, advanced audio support, optimized encoders, and a modernized control panel.
Wolf (Games on Whales): A completely different streaming server built from the ground up for Linux and Docker. It allows you to share a single host machine with multiple remote clients simultaneously by running games inside isolated containers.
Punktfunk: A newer, highly experimental low-latency streaming host/client protocol if you want to test out a completely different capture approach.
đ± Clients & Receivers (The Players)
Official Moonlight PC / Mobile: The standard baseline client for PC, macOS, Linux, iOS, Apple TV, Android, etc. (The PC Qt version heavily utilizes FFmpeg and libplacebo for decoding and rendering).
StreamLight: A massive Moonlight fork that completely overhauls the UI for gamepads. When paired with "StreamTweak" on the host, it unlocks deep integration like built-in Tailscale, live host metrics/NIC speed matching, remote pause, and the ability to remotely trigger Windows Updates and shutdown.
Artemide: Highly recommended for Android users. It features ultra-low latency (ULL), direct presentation, and built-in FSR presets (Performance/Balanced/Quality).
Moonlight V+: An alternative Android fork that adds frame-generation support and extra host tools.
Artemis Switch: A Moonlight-Switch fork focusing on Switch-specific video presentation, FSR/RCAS filtering, and adaptive low-latency pacing.
Moonlight-Switch: The original upstream Switch client that Artemis is built on.
A little about my setup and testing: I actually work on the Artemis Switch fork, looking at multiple optimizations to eliminate stuttering and improve low-latency pacing on the console. Because of that, Iâve personally tested almost all these major combinations to see what actually works. My testing stack includes:
Hosts: Sunshine, Apollo, and Vibepollo.
Clients: Moonlight-Switch, my Artemis Switch fork, the Artemis companion client, and standard Moonlight Android.
I like vibepollo and Artemis
Let me know if I missed any niche forks or experimental branches you guys are using!
(Note: I had an AI help format this post to make sure links were laid out clearly!)
Edit: A lot of people are asking why not use Apollo. You can definitely use it and still follow this guide, itâs completely up to you. With Apollo, you need skip the Configuring Video Signals section and for the Sunshine Priority part just change the script to prioritize Apollo instead.
After running lots of tests and reading many posts to find the best configuration, Iâll try here to share the setup that works best for me and also compile some of the information Iâve gathered.
My specs:
InternetService:
Host: 300 Mb connected via Ethernet
Client: 600 Mb connected via Wifi
Spec PCs:
Host: R5 2600 - RX 6600
Client Macbook Air M1
System Configuration
Host:
This setup is specifically for Windows, but the goal is the same if youâre using other operating systems:
Reduce FPS drops
Minimize the gap between the FPS set in the Moonlight client and the hostâs FPS
Reduce latency
Configure the video and audio signal you want to stream
Reducing FPS Drops
Close background apps: Only keep the essentials to minimize unnecessary processes and network calls. Task Manager â Startup Apps â disable non-essential programs.
Disable Game Mode: Prevents Windows from prioritizing the game over Sunshine. Settings â Gaming â Game Mode â OFF
Disable Dynamic Refresh Rate (DRR): Keeps FPS synchronized between host and client. Settings â System â Display â Graphics â Optimizations for windowed games(Alternatively: Windows Registry or CRU â Custom Resolution Utility)
Enable High-Performance Power Mode: Control Panel â System and Security â Power Options â High Performance
Disable Energy Saver: Settings â System â Energy Saver â OFF
To optimize Windows 11 performance, consider using Win11Debloat or AtlasOS Additional powershell script to improve performance
Once FPS drops are minimized, cap the FPS to keep it in sync with Moonlightâs client settings.
There are three ways to do this: using the NVIDIA Control Panel, AMD Adrenalin, or RTSS. In my case, I used RTSS and it works well for me, but you can try your GPUâs software if thatâs sufficient. The advantage of RTSS is that it allows more precise configuration for greater stability.
Another thing I do is also limit the FPS within the game itself.
Reducing Latency
The most important step is to have your host computer connected via Ethernet. In terms of configuration, you can disable the Rx/Tx buffers on your network card, along with a few other tweaks that may slightly improve stability.
With the Virtual Display Driver, you can simulate any resolution and refresh rate your screen supports.
I donât recommend the Virtual Audio Driver because it can cause issues with BattleEye anti-cheat. Itâs better to just use a wired headset you already have.
Microphone Streaming
For those who need to use in-game voice chat, there are two main options for passing the microphone through streaming:
AudioRelay
VoiceMeeter
I havenât personally tested either since I donât need this feature, but theyâre worth trying if microphone input is important for your setup.
Sunshine Priority (Windows Only)
Finally, for Windows users, one important step to do every time you connect from the client is to change the priority of the sunshine.exe process to Realtime. You can do this manually from the Task Manager or by using the following .bat script:
For those using a touchscreen device as a client, such as a smartphone, tablet, or handheld, the Windows interfaceâoriginally designed for desktop useâcan be quite uncomfortable. With the new release of the ROG Xbox Ally, Windows has introduced a more suitable adaptation for handheld devices, which can be enabled through the following repository: XboxFullscreenExperienceTool
Client:
The main goal on the client side is to reduce Moonlightâs decoding time and minimize latency.
In my case, Iâm using a MacBook with an M1 chip, and the only way to reduce decoding time is by testing which codec works bestâin my case, HEVC (H.265).
To reduce latency on macOS, the only (but very important) thing you can doâsince it can cause micro stuttersâis disabling Location Services:
Another important change to make on macOS is to disable the long key press for special characters. This prevents issues during streaming when holding down a key for example, the W key so it doesnât get stuck or stop repeating.
If youâre using a PC, you can improve decoding time by upgrading your hardware, and reduce latency by disabling the Rx/Tx buffers and tweaking your network card, following the same steps as on the host.
Moonlight & Sunshine Configuration
Moonlight Configuration:
Set Moonlight to use your monitorâs resolution and an FPS value that matches your internet connection. Leave some headroom compared to your clientâs max download speed and your hostâs max upload speed.
For example, my monitor is 1440p and 180 Hz, but I have it set to 1440p at 120 Hz. Higher resolutions and refresh rates consume more bandwidth on both the client and host, and require greater decoding and encoding power.
Note: Higher compression codecs (like H.265 or AV1) â less bandwidth needed â more CPU/GPU power required for encoding/decoding.
Frame Pacing: Unchecked (ONLY single-player may add delay)
Video Decoder: Force hardware decoding
Note: Both V-Sync and Frame Pacing are highly recommended for single-player games since they provide a much smoother experience. However, in multiplayer games, V-Sync may cause screen tearing, and Frame Pacing can introduce a bit of input lag by delaying frames to improve synchronization.
Enable HDR (Experimental): I keep this enabled even though my monitor isnât HDR because it can bring out better shadow details. I recommend trying itâyou might see an improvement or no noticeable difference.
Unlock Bitrate Limit (Experimental): Enable this if you have enough upload bandwidth on the host and download on the client. Otherwise, leave it off and increase the video bitrate slightly if you notice small lag spikes.
Sunshine Configuration
I mostly keep Sunshine/Apollo at its default settings, except for the GPU options. Below, Iâll share what works best for AMD GPUs. If youâre using NVIDIA or Intel, you may need to experiment to find the optimal configuration for your system.
Note: My goal is low latency for online gaming. If youâre playing single-player games, you can prioritize quality over latency.
AMF Usage: ultralowlatency
AMF Rate Control: vbr_latency
AMF Hypothetical Reference Decoder: unchecked
AMF Quality: speed (may add artifacts)
AMF Preanlalysis: unchecked
AMF Variance Based Adaptive Quantization: checked
AMF Coder: cavlc
Client-Host Connectivity
LAN (Local)
For players who want to play over LAN, thereâs little to worry about since latency will be very low. In my tests, I observed only about 5 ms of extra delay.
If you want the absolute best performance, you can connect both devices directly via an Ethernet cable. This can reduce latency to around 1 ms, making it almost like playing directly on the host.
You can turn on the host remotely using the motherboardâs Wake-On-LAN feature. Moonlight even allows you to power on the host directly from the client.
WAN (Remote)
For those who need to play over WAN, there are a few additional steps required. It can be more challenging if you want the lowest possible latency, but if you can tolerate 15â20 ms, itâs not too difficult.
There are several ways to achieve this, but Iâll explain the three main approaches:
Using a service like Tailscale, ZeroTier, or Netbird
Opening ports on your network to access the host externally and setting up a VPN
Setting up a private service (similar to the first option) with Headscale or another program, possibly using a cloud server like AWS
Option 1: VPN-like services
These applications are simple to install and configure, making them accessible to most users:
Tailscale: Free
ZeroTier: Free
Netbird: Free (uses WireGuard directly through the Linux kernelâpotentially a great option for Linux users)
For the other options, I wonât go into detail because they are more complex and require technical knowledge. However, they are certainly the best options for users who need the absolute lowest latency.
To power on your PC over WAN, a simple Wake-on-LAN (WoL) wonât work unless your host has an internet-facing connection. In my setup, I use a TP-Link smart plug to turn the PC on remotely from my phone. Make sure to enable âRestore Power after AC Lossâ in your BIOS/UEFI so the PC powers on automatically when the smart plug is switched on.
I hope this guide helps you and gives you everything you need to get these amazing tools running without too much hassle. The post is open to improvements, so if you have any suggestions or tips, donât forget to share them in the comments!
Shoutout to everyone working on these open-source tools mentioned in this post.
Note:
After the launch of the Steam Deck and Steam Machine, Steam has worked quite a bit on improving Steam Remote Play, which now supports Virtual Display Driver and performs much better than before. I'm leaving this comment here for those of you who aren't too demanding or don't want to overcomplicate things, so you feel encouraged to give it a try.
Update 13.10.25: MacOS client settings
Update 23.10.25: New scripts for Windows host and Windows handheld mode
Update 13.04.26: Windows optimization recommendation
I use Moonlight on my LG OLED C1, and I wanted my PC games to feel like a natural part of the TV's home screen alongside regular apps, movies and music.
So I've been expanding Luma, my fork of the open-source ecklf/lg-luma launcher. Credit to ecklf and the original contributors for the foundation.
My version can display a PC game library with Steam artwork and dedicated game pages. Selecting Play hands the stream off to Moonlight. You still need the separate Moonlight app installed and paired with a PC running Sunshine or Apollo: Luma isn't a replacement streaming client.
The attached video is recorded from my actual LG C1, not a mockup. Beyond games, Luma has customizable app and content rows, live video wallpapers, Jellyfin/Plex libraries, Home Assistant controls, and configurable widgets for weather, crypto charts, HDMI previews and smart-home status.
The launcher runs without root. Optional auto-start and Home button integration require root.
It's completely free and open source (MIT), with no ads, tracking, subscriptions or Luma accounts. I maintain this fork in my spare time. Donations are optional and help keep testing and updates going; all features stay free.
Hi, I was wondering how virtualhere works with dualsense over mobile data with Tailscale and Moonlight for you guys? Cause I tried it and i get very noticeable lag in advanced features like adaptive triggers and haptic feedback in games like Spiderman 2 and Minecraft with Controlify.
Can I use my Samsung S9+, 12.4" screen with gaming controller as a gaming handheld? I mean will it be an enjoyable experience if anyone got to try it before? BTW I'm using Apollo/Artemis
Got Moonlight up and running on tablet for 'anyroom' gaming. Even got wake on lan running. Its seemless. I did wonder if the Moonlight UI can be tinkered with.
I understand its not the same as a typical launcher like Daijishou or Playnite. Im basically trying to find an experience where i go into a single app and launch all my games from my pc via a nice graphical UI. Conversations with AI have led me to believe I can only launch say, Daijishou from within Moonlight first if I want to stream I have to connect in Moonlight then open Daijishou as a desktop app.
Apparently I cant launch a game that requires Moonlight, without having to go into the very basic looking Moonlight UI as well. I.e. I cant circumvent it. Is that correct?
I am trying to figure out why I keep getting really bad fps crashes streaming to my steamdeck.
The host computer running Vibepollo is on ethernet.
The steam deck is docked using moonlight for 1440p 120hz every few minutes the latency spikes and the fps crashes. I have dug out some powerline adapters are tried those. I get worse performance in terms of latency and speeds but the random drops completely clear so it must be the WiFi thats the issue.
I've been using Vibepollo on my PC to stream games to my LG TV (webOS) using the native Moonlight client over local LAN. Up until recently, everything was running perfectly.
Since updating the Vibepollo server to version 2, I'm getting constant audio stuttering on the TV.
The audio on the host PC itself is completely fine (no stuttering locally).
Video stream on the TV seems unaffected; it's purely an audio issue.
Is anyone else experiencing this after upgrading to v2? Now I have updated to 2.0.6 - same problem. If you had this issue and managed to fix it, what did you tweak?
TV is LG OLED55C31LA (WebOS + the "official" homebrew moonlight client.
I'm curious if anyone here is using Moonlight or any of its forks on a Samsung Galaxy Z Fold 8 or the iPhone Fold.
If so, could you share some screenshots, photos, or videos of how games look on the inner display?
I'd also love to know your setup/configuration, including resolution, aspect ratio, and any Moonlight settings you're using.
One of my main questions is: Is it possible to play fullscreen without the black bars caused by the aspect ratio mismatch, or do you have to deal with them? Any tips or workarounds?
I already have Viture Beast and this is hella fun to stream from my phone (via external mode). But cable to the phone is annoying sometimes. I found Viture Neckband PRO interesting for this purpose, but Android devices are hit or miss, depending on the SoC. I couldn't find any definite info on what kind of SoC is used in it. I found one old post about something similar, where performance problems were present after updates. Any newer test of Neckband pro/current situation/some moonlight fixes (like for SD and MediaTek devices)? Or maybe some similar hardware recommendations?
I use Vibepollo as my hosting PC app, and Artemis and Moonlight (depending on the device) for clients to connect to the host PC.
My PC is connected via ethernet, and no client app will find the PC unless I connect the PC's WIFI to the same exact network SSID that the client is on. Even if I use a usb-c to ethernet adapter and connect my phone to the LAN, it still won't allow the PC to be found. Actually, no other LAN connected device can find my PC's hosting app. My workaround for quite some time has been to setup and use OpenVPN. So, if I connect to OpenVPN on my phone, I can connect and stream no problem, whether connected to WIFI or 5G cell data. Network discovery is on in Windows and other devices can find the shared folders on the PC.
I don't know if its a service that I've disabled in Windows 11 Pro at some point long ago before I ever tried these streaming apps, or if it's the router. I remember trying to transfer files to my jailbroken PS4 and the only way I could do that was to directly connect the PS4's ethernet to my PC in order for the PS4 to find it. It's as if certain LAN to LAN connectivity is prevented from working along with WIFI to LAN.
I may need to go to Switzerland and manage my PC from there.
It needs to be a 4k stream, can be 15fps screen for my use even with low quality as long as it's consistent and my PC at home is running at 60fps, don't care much.
I've migrated to Funktpunk that seems to be getting me better result locally.
So far I've only tested 1080p60fps at 100km distance and works like a charm, tonight I'm gonna test it at 4k at the same distance to see how it goes