Sunshine is a self-hosted game stream host for Moonlight. Offering 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.
LizardByte has the full documentation hosted on Read the Docs
This fork extends Sunshine with generic multi-session window capture. A
session group is the isolation boundary (one capture thread, and one RTSP
port in per-group-port mode) and holds one or more sessions. A session
is one independent stream picture: the set of windows it matches (the main
window plus its menus/dialogs) is composited, by real Z-order, into that
session's own frame. The session id is the Moonlight appid, which is how a
client selects which application to stream.
Feature additions (step by step):
| Step | Addition |
|---|---|
| 6.4-1 | GPU window capture backend — window frames stay in video memory and feed NVENC directly (no GPU→CPU round trip). Software encoders use the RAM backend. |
| 6.4-2 | Port modes — single-port (all groups share RTSP port 47989, routed by group name) or per-group-port (one dedicated RTSP port per group, allocated from a port_range), plus a configurable default group. |
| 6.4-3 | Popup composition — the backend binds to the process owning the matched window and composites all its visible top-level windows (menus, dialogs, tooltips) into one frame, so the full application appears in the stream. |
| 6.4-4 | GPU popup composition — the GPU-backed (hardware) window backend composites popups on the GPU, drawing them onto the capture texture after the anchor frame (no CPU round trip); falls back to CPU composition if GPU composition fails. |
| 6.4r-1 | Session model rework — a group now holds sessions[], each session carrying its own window matching rules and aux_exclude list. This is the first step of the rework that replaces the per-group "matched process" capture with per-session window-set composition and session-id (appid) routing. |
The
6.4-1…6.4-4rows predate the session model rework. The capture backend now composes, for each session, the windows matching that session's rules (regardless of the owning process); a client selects its session byappid.
Session groups are configured with a JSON file (session-groups.json) or
command-line options (--port-mode, --port-range, --default-group,
--group, --process, --title, --class, ...). The command line overrides
the file. The configuration is only a preset template: groups and sessions
can also be created and changed at runtime through the control channel.
For the full configuration reference, see docs/session_groups.md.
| Feature | FreeBSD | Linux | macOS | Windows |
|---|---|---|---|---|
|
What type of gamepads can be emulated on the host. Clients may support other gamepads. |
||||
| Generic | 🟡1 | ✅ | ❌ | ✅ |
| DualShock / DS4 (PlayStation 4) | 🟡1 | ✅ | ❌ | ✅ |
| DualSense / DS5 (PlayStation 5) | 🟡1 | ✅ | ❌ | ✅ |
| Nintendo Switch Pro | 🟡1 | ✅ | ❌ | ✅ |
| Xbox 360 | 🟡1 | ✅ | ❌ | ✅ |
| Xbox One | 🟡1 | ✅ | ❌ | ✅ |
| Xbox Series | 🟡1 | ✅ | ❌ | ✅ |
Note
1 Missing motion, touchpad input, battery state, RGB LEDs, adaptive triggers, and raw HID output reports.
| Encoding API | GPU Vendor | FreeBSD | Linux | macOS | Windows |
|---|---|---|---|---|---|
| AMF | AMD | ➖ | ➖ | ➖ | ✅ |
| Media Foundation | Qualcomm | ➖ | ➖ | ➖ | ✅ |
| NVENC | NVIDIA | ➖ | ✅ | ➖ | ✅ |
| QuickSync | Intel | ➖ | ➖ | ➖ | ✅ |
| VAAPI | AMD | ✅ | ✅ | ➖ | ➖ |
| Intel | ✅ | ✅ | ➖ | ➖ | |
| NVIDIA | ➖ | ✅ | ➖ | ➖ | |
| Video Toolbox | Apple | ➖ | ➖ | ✅ | ➖ |
| Intel | ➖ | ➖ | ✅ | ➖ | |
| Vulkan Video | AMD | 🟡 | ✅ | ➖ | ➖ |
| Intel | 🟡 | 🟡 | ➖ | ➖ | |
| NVIDIA | ➖ | 🟡 | ➖ | ➖ | |
| Software | Any | ✅ | ✅ | ✅ | ✅ |
| Capture Method | FreeBSD | Linux | macOS | Windows |
|---|---|---|---|---|
| DXGI Desktop Duplication | ➖ | ➖ | ➖ | ✅ |
| KMS/DRM | ✅ | ✅ | ➖ | ➖ |
| NvFBC (X11 only) | ➖ | ✅ | ➖ | ➖ |
| ScreenCaptureKit | ➖ | ➖ | ✅ | ➖ |
| Wayland (wlroots) | ✅ | ✅ | ➖ | ➖ |
| Windows.Graphics.Capture | ➖ | ➖ | ➖ | 🟡 |
| ↳ Portable | ➖ | ➖ | ➖ | ✅ |
| ↳ Service | ➖ | ➖ | ➖ | ❌ |
| X11 | ✅ | ✅ | ➖ | ➖ |
| XDG Desktop Portal | ✅ | ✅ | ➖ | ➖ |
| KWin Screencast | ✅ | ✅ | ➖ | ➖ |
| Capture Method | VAAPI | Vulkan Video | NVENC (CUDA) | Software |
|---|---|---|---|---|
| KMS/DRM | ✅ | ✅ | ✅ | ✅ |
| NvFBC | ❌ | ❌ | ✅ | ❌ |
| Wayland (wlroots) | ✅ | ❌ | ✅ | ✅ |
| X11 | ✅ | ❌ | ✅ | ✅ |
| XDG Desktop Portal | ✅ | ✅ | ✅ | ✅ |
| KWin Screencast | ✅ | ✅ | ✅ | ✅ |
Legend: ✅ Supported | 🟡 Partial Support | ❌ Not Yet Supported | ➖ Not Applicable
Warning
These tables are a work in progress. Do not purchase hardware based on this information.
| Component | Requirement |
|---|---|
| GPU | AMD: VCE 1.0 or higher, see: obs-amd hardware support |
|
Intel: FreeBSD/Linux: VAAPI-compatible, see: VAAPI hardware support Windows: Skylake or newer with QuickSync encoding support |
|
| Nvidia: NVENC enabled cards, see: nvenc support matrix | |
| CPU | AMD: Ryzen 3 or higher |
| Intel: Core i3 or higher | |
| RAM | 4GB or more |
| OS | FreeBSD: 15.1+ |
| Linux/Debian: 13+ (trixie) | |
| Linux/Fedora: 43+ | |
| Linux/Ubuntu: 22.04+ (jammy) | |
| macOS: 14.2+ | |
| Windows: 11+ | |
| Network | Host: 5GHz, 802.11ac |
| Client: 5GHz, 802.11ac |
| Component | Requirement |
|---|---|
| GPU | AMD: Video Coding Engine 3.1 or higher |
|
Intel: FreeBSD/Linux: HD Graphics 510 or higher Windows: Skylake or newer with QuickSync encoding support |
|
|
Nvidia: FreeBSD/Linux: GeForce RTX 2000 series or higher Windows: Geforce GTX 1080 or higher |
|
| CPU | AMD: Ryzen 5 or higher |
| Intel: Core i5 or higher | |
| Network | Host: CAT5e ethernet or better |
| Client: CAT5e ethernet or better |
| Component | Requirement |
|---|---|
| GPU | AMD: Video Coding Engine 3.4 or higher |
| Intel: HD Graphics 730 or higher | |
| Nvidia: Pascal-based GPU (GTX 10-series) or higher | |
| CPU | AMD: Ryzen 5 or higher |
| Intel: Core i5 or higher | |
| Network | Host: CAT5e ethernet or better |
| Client: CAT5e ethernet or better |
Our support methods are listed in our LizardByte Docs.
Thank you to all the contributors who have helped make Sunshine better!
| Previous | Next |
|---|---|
| Getting Started |