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.
This test was conducted from a distance of 550 km (341 miles)
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
After trying out multiple handhelds and tablets. I finally found my endgame. This Lenovo Y700 Infinite is the ultimate entertainment machine. It can handle everything from native gaming to eye popping pc streaming with the oled screen.
Havenât seen people reviewing/posting this tablet. Feel free to drop your questions if you have.
The recent developments in punktfunk is honestly awesome im never going above 2-3ms of host processing latency
Tho the client for punktfunk is a little glitchy at times streamlight is a decent alternative for it but the native client only supports pyrowave and hdr.
Either way im happy with these results itâs the closest to being native.
Any tips or advice or anything i can do better is much appreciated always looking to improve
ChloroFrame is an almost mac native swift based sunshine client. The 1.6 release adds experimental support for PyroWave, (Themaister's intra-only wavelet codec built for very low latency ) because why not
Details
GPU decode in about 1.3 ms (4:2:0) to 2.4 ms (4:4:4) on an M4 Pro at 3024x1890.
4:4:4 chroma and 10-bit HDR10.
a lost frame recovers on the very next one, and frames missing a few packets are still shown. This means that if a frame is lost the prior frame is repeated and the stream recovers after on its own since all frames arive as keyframes
Uses about 280 to 400 Mbps, so it's LAN only.
PyroWave does not work with Sunshine and Apollo. This will only work for hosts that advertise PyroWave like VibeShine.
Setup
Run a Vibeshine host with PyroWave enabled, ideally on Ethernet. Read the vibeshine guide on pyrowave first.
Use an M1 or later Mac, on Ethernet (or you can try 5/6 GHz Wi-Fi but be warned there will be a few lost frames)
Install ChloroFrame, pair the host, then pick PyroWave in Settings.
Click "Test network" in the app list, then launch.
Things to keep in Mind:
This is Experimental still! and needs a lot of testing! There is room for a lot of refinement in ChloroFrame. The codec itself is very young. So keep this in mind when using PyroWave
Expect a few lost frames per minute on Wi-Fi. "Test network" option often flags jitter on Wi-Fi even when the stream looks fine.
H.264, HEVC and AV1 are unchanged.
Ethernet testers especially if you can provide some feedback that would be awesome
Using steam deck/steam machines as clients 99% of the time, both wired into 1gbps Ethernet. I read that the newest beta update of pyrowave allows up to 1gbps bit rate, but I've also read that 4k 60fps hdr 4:4:4 is a minimum requirement of 740mbps and easily spikes to 1.5gbps.. Rendering my 1gbps as the bottleneck.
Whereas I run av1 on the steam deck at 150mbps no 4:4:4, hdr, because any higher bit rate tends to overwhelm the VCN on amd and cause stutters and packet loss here and there.
Latency is zero concern here, I am already at like 9ms total on my moonlight setup but I would love to have 4:4:4 on amd hardware because I do notice the softness on text.
Is it pointless if I don't have a 2.5gbps Lan setup end to end?
Seems like it's only beneficial for 1440p or less.
As usual, I started with Sunshine, then Apollo for a while (for the virtual display), and I finally just learned about Vibepollo.
Guys, it's absolutely cracked.
More HDR controls
For years Sunshine & Apollo were capping me at 400 nits. I can now properly configure a 1400 nit HDR stream. It's like getting a brand-new TV!
Custom controller driver
When shooting in the game, I noticed my Xbox controller trigger rumble started working with Vibepollo. I didn't even know my controller had that feature!
RTX HDR pass-through
Lossless Scaling integration
RTSS automatic frame limiting
Steam library integration
Pyrowave support
Bunch of other features like VRR, honestly too many to count
Actively developed
Ironically much more stable streaming than Apollo
Yeah the name is a bit ridiculous, but my goodness does it deliver.
EDIT: You can pick your flavour of Vibeshine/Vibepollo, both have all of the above features and both use virtual displays. They are maintained by the same dev (95% the same codebase). Vibepollo just has a few Apollo-specific features like per-client commands and Artemis client support.
Basically I do not want to run an ethernet cable 100 feet for wired connection. Am I able to buy some router and create a LAN for streaming at the same time? If so any advice on what router to purchase & how does the host PC distinguish between WiFi and the ethernet plugged into it? Iâm able to stream using WiFi but the resolution isnât the best so Iâm hopeful I can do this.
Hello i've been playing NBA2K27 using apollo and moonlight, are there any ways to reduce input latency? I've already tried turning VSync off in NBA2K27 but still the shot meter timing for the input is still off, I've also made the host lan cable but still the same.
Any recommendations will be appreciated, thank you!
I've been using moonlight for a while now, and I've always messed around with the host side of streaming, landing on Vibepollo that I've been using the most.
I was wondering, are there any alternatives/ forks for the client side? Anything that people think is better than the standard Moonlight, maybe some little helpful features etc.
Any suggestions are greatly appreciated. I'm mainly referring to windows. But also open to Android suggestions as well although I don't use my phone or tablet for streaming much.
So i built a new PC and doing a fresh windows install. On my old PC i ran apollo because when I set up game streaming for the first time i was told it was alot simplier to get everything working, I installed it and connected it to my client and everything just worked. I went with Apollo because of this reason. Ive been intrigued by VibePollo/VibeShine and was curious which one to install on my new set. I've read VibeShine is the Dev's main focus and Vibepollo exists mainly to allow people on Apollo to simply install it over there current Apollo install. Since im doing a completely fresh install should I go with VibeShine or is there a specific benefit of going with VibePollo.
I never ran Sunshine before - Apollo was the one I started with and I never tweaked the settings outside of getting HDR working.
I'm on CachyOS for 3 days and so far I'm loving it - it's very slick, the hermes agent works much faster than on Windows and games performance is top notch.
I'm having a little problem though - on Windows I used to stream from Vibepollo to Moonlight on the TV. I've tried installing Pollaris but unfortunately the TV was not able to install Nova as a client - it's a pretty old LG TV.
I've installed Vibepollo in the meantime but IDK if i've done something wrong but this app is very persistent in staying in my system. I've tried stopping the process with sudo but all I'm getting is the error saying that the process cannot be stopped safely. Because of that, I cannot install sunshine as it's being marked as incompatible.
(1/4) Safely stopping Vibepollo before package replacement error: could not safely quiesce the existing Vibepollo host (failed step: vibepollo_select_upgrade_kill_mode); package replacement is blocked. error: the old host was not stopped; admission may be closed. Retry the upgrade after fixing the failed step, or reboot to clear runtime fences.
My host is on CachyOS with Polaris in Host Virtual Display mode. I'm on Bazzite for my client and using the flatpak version of Moonlight and it's a pretty old laptop with an Nvidia Quadro m1000, so h.264 is the only codec available. The host is wired and the client is the only device connected to my wireless access point, running on a clean channel. The maximum latency I was seeing in 6.1.0 was 4-7 ms.
Since I updated to 6.2.0 the frame queue delay skyrocketed, somewhere in the ballpark of 7-20 ms and I'm assuming that's causing more microstutters which are being attributed to network jitter. VSync and frame pacing are off.
Has anyone else noticed this? I see most people are pretty happy with the new changes in 6.2.0 but I haven't been able to see what others are. I decided to move back to the appimage of 6.1.0 and will stay there if it works for my setup, not a big deal. I was just curious if others were running into this, too.
I have an LG C2 tv that weâve been using for years. In light of all the spyware news, I was hoping to turn it into a dumb tv and use some âboxâ for our app needs and being able to use Moonlight reliably.
I was waiting for the new release of Apple TV but theyâve really dropped the ball with it. 60Hz, no audio pass-through, and now also a listening shitty AI machine.
Anyone have recommendations on what I could use? Something that plugs into my TV, allows me to use my surround system, and controller(s).
We got PS5 games playing through Moonlight, with the host running on the PS5
What if your PS5 appeared in Moonlight as a host? Youâd select it, see the game youâre already playing on another screen, hear the game audio, and use a controller to play.
Thatâs what weâre building with PS5Stream, an experimental Sunshine-style host for the PS5.
In a watched test, we played FC 27 through stock Moonlight on an Nvidia Shield Pro for three minutes. The gameplay kept moving, the sound stayed live, an Xbox controller connected to the Shield controlled the game, and local DualSense control returned afterward. Weâve also had a five-minute Crash Bandicoot 4 session with moving picture and sound throughout.
The moment that made this feel real was picking up the XBox controller and playing a PS5 game through Moonlight. The PS5 was hosting the stream; Moonlight was the way into the game.
PS5Stream is still a prototype for a jailbroken PS5, not something ready for public release. Weâre continuing to improve reliability and controller feel, and we havenât measured client-rendered frame rate or input latency. But the core experience is working in our Shield tests: PS5 gameplay, sound and controls through Moonlight.
This is a proof of concept using a JB PS5, and injecting PS5Stream.elf the Nvida Shield Pro is running the Android version of Moonlight, and for temporary measures, PC is being used to input the pin, but work on the full PS5App and UI is starting and the PIN will be generated by the PS5.
Possible other features, include Tailscale intergration to connect to the PS5 remotely whilst not in the house, also by running USBHere we beleive it will be possioble for you to play a friend over the internet in a two player game. Exciting times ....
I purchased a onn 4k pro (google tv) and when I use the moonlight from the AppStore I canât use any other codec besides h.264 my iPad lets my use HECV. Is it just the default apps fault or is it the Onn 4k pro?
What's a good choice of laptop to record 1080p60fps at 15-25k bitrate (or stream at 8k bitrate) while connecting with moonlight to my gaming/editing server locally via ethernet (or wifi when on the go) and other homeserver stuff (like navidrome) on top of some basic web browsing + discord on the side?
Having USB-C charging would be amazing, OLED would be HUGE but even if not I will be connecting a second monitor at home that's OLED if the main screen isn't. Solid battery life is a huge plus and a camera is a must for zoom calls.
Currently have a thinkpad t480 which is decently close to what I need but it can't handle the recording portion of things (at least when i have it running with fedora). Closest it gets is 720p60fps and even then it struggles quite hard.
Hey so I like to stream my games from my home pc to my iPad using moonlight and sunshine. It always worked ok for all of the games cause most of my games were from steam. Recently I bought a few games from gog and added them to steam but when I run the game the controller does not work properly, I can not select anything the selection just keeps going down and down. The games i used it with were a plague tale innocence and blood of dawnwalker did not work on both, although the controller is working correctly on other games like witcher 3 and control that I bought at the same time please help me to fix the issue. I really really appreciate you taking time reading this.
Client
Asus Ally X (Non-Xbox) Inside of a USB C Ugreen Dock which has 1000mbps ethernet connected
(Been using it for 4K 120fps HDR)
I have the nightly build version 2.0.2
(I had what I think was a different stuttering issue when on the release build so I did a full uninstall and tried the nightly build.)
With the Moonlight fork which has Pyrowave in it 6.1.0 (The fork linked on Vibepollo's github)
If you need any additional information let me know! Thank you for your time!
Can anyone confirm this? I bought a Kishi V3 Pro XL a few months ago but I was disappointed that there was no rumble support and this would make me buy it again if it works đ
The PC is connected via Ethernet. (7600X + 9060 XT)
The streaming device is an Onn 4K Pro (2026 model) with Artemis, connected with ethernet. (Set to AV1 codec, 1440p, 60fps)
I took the path others have taken... Sunshine, to Apollo, to Vibepollo. Those all work great, better and better.
But with Rubylight, default settings, I was met with momentary freezes and a message "Slow Connection to PC, Reduce your bitrate."
In a more indie game, I was able to get it running fine at ~25 Mbps. But for somewhat AAA games, I was getting the "Slow connection..." message, freezes, black screen.
For AAA games, I'm not sure how low exactly, I did 5Mbps just to see and it runs smooth.
However, I see on a recent version it has an "adaptive bitrate" setting, and that seems to work. Smooth. BUT... according the stats, its running at 3M/s
Meanwhile, I switch back over to Vibepollo, and I simply set the bitrate to 40Mbps, and when I enter the AAA game, I see it running smoothly and at about 11M/s
So it's a bit odd to me, vibepollo is running really well. Hop over to Rubylight, which I thought would cater to my 9060 XT better, and it hasn't been a smooth experience.
Other experiences seem to be an improvement but at 1440p, I can't get it working right. 1080p, it seems I can just the bitrate to whaetever and it works. But 1440 seems to want more than whatever its threshold is that 1080p doesn't hit.
I have a Thinkpad with Intel Core Ultra 258v, and in moonlight I have 4:4:4 color enabled, but when I connect from my mac I get a message saying "your pc doesn't support 4:4:4 encode", and core ultra integrated graphics should support it.