Moonlight PC is an open source PC client for NVIDIA GameStream, as used by the NVIDIA Shield.
Moonlight also has mobile versions for Android and iOS.
You can follow development on our Discord server and help translate Moonlight into your language on Weblate.
- Hardware accelerated video decoding on Windows, Mac, and Linux
- Supports streaming at up to 120 FPS (high refresh rate monitor recommended)
- Supports streaming at 720p, 1080p, 1440p, 4K, and the client PC's native screen resolution
- HDR streaming support
- 7.1 surround sound audio support
- Support for both pointer capture (for games) and direct mouse control (for remote desktop)
- Support for passing system-wide keyboard shortcuts like Alt Tab to the host
- Direct touchscreen mouse control
- HEVC support for better image quality at reduced bandwidth
- Gamepad support with force feedback for up to 4 players
- Windows, macOS, and Steam Link
- Snap (for Ubuntu-based Linux distros)
- Flatpak (for other Linux distros)
- AppImage
- Raspberry Pi 4
- NVIDIA Jetson and Nintendo Switch (Ubuntu L4T)
Hosting for Moonlight's Raspberry Pi and L4T package repositories is graciously provided for free by Cloudsmith.
- Qt 5.15 SDK or later
- Windows 7 or later
- Visual Studio 2019 (Community edition is fine)
- Select MSVC 2019 option during Qt installation. MinGW is not supported.
- 7-Zip (only if building installers for non-development PCs)
- Qt 6.2 SDK or later
- macOS Mojave (10.14) or later
- Xcode 13
- create-dmg (only if building DMGs for use on non-development Macs)
- Qt 5.9 SDK or later
- GCC or Clang
- Install the required packages:
- Debian/Ubuntu:
libegl1-mesa-dev libgl1-mesa-dev libopus-dev libqt5svg5-dev libsdl2-dev libsdl2-ttf-dev libssl-dev libavcodec-dev libva-dev libvdpau-dev libxkbcommon-dev qtwayland5 qt5-qmake qtbase5-dev qtdeclarative5-dev qtquickcontrols2-5-dev wayland-protocols qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qtquick-window2 qml-module-qtquick2
- RedHat/Fedora:
openssl-devel SDL2-devel SDL2_ttf-devel ffmpeg-devel qt5-qtsvg-devel qt5-qtquickcontrols2-devel libva-devel libvdpau-devel opus-devel pulseaudio-libs-devel alsa-lib-devel
- Debian/Ubuntu:
- FFmpeg 4.0 is required to build. If your distro doesn't package FFmpeg 4.0 or later, you can build and install it from source on https://ffmpeg.org/
- Steam Link SDK cloned on your build system
- STEAMLINK_SDK_PATH environment variable set to the Steam Link SDK path
- Install the latest Qt SDK (and optionally, the Qt Creator IDE) from https://www.qt.io/download
- You can install Qt via Homebrew on macOS, but you will need to use
brew install qt --with-debug
to be able to create debug builds of Moonlight. - You may also use your Linux distro's package manager for the Qt SDK as long as the packages are Qt 5.9 or later.
- This step is not required for building on Steam Link, because the Steam Link SDK includes Qt 5.9.
- You can install Qt via Homebrew on macOS, but you will need to use
- Run
git submodule update --init --recursive
from withinmoonlight-qt/
- Open the project in Qt Creator or build from qmake on the command line.
- To build a binary for use on non-development machines, use the scripts in the
scripts
folder.- For Windows builds, use
scripts\build-arch.bat
andscripts\generate-bundle.bat
. Execute these scripts from the root of the repository within a Qt command prompt. Ensure 7-Zip binary directory is on your%PATH%
. - For macOS builds, use
scripts/generate-dmg.sh
. Execute this script from the root of the repository and ensure Qt'sbin
folder is in your$PATH
. - For Steam Link builds, run
scripts/build-steamlink-app.sh
from the root of the repository.
- For Windows builds, use
- To build from the command line for development use on macOS or Linux, run
qmake moonlight-qt.pro
thenmake debug
ormake release
- To create an embedded build for a single-purpose device, use
qmake "CONFIG =embedded" moonlight-qt.pro
and build normally.- This build will lack windowed mode, Discord/Help links, and other features that don't make sense on an embedded device.
- For platforms with poor GL performance, add
"CONFIG =glslow"
to prefer direct KMSDRM rendering over EGL/GLES renderers. Direct KMSDRM rendering can use dedicated YUV/RGB conversion and scaling hardware rather than slower GPU shaders for these operations.
- To build a binary for use on non-development machines, use the scripts in the
- Fork us
- Write code
- Send Pull Requests
Check out our website for project links and information.