VR-first GameStream client for Meta Quest and Linux PCVR.
Stream your PC games into a virtual living room - repositionable screens, stereoscopic 3D, passthrough, and AI depth estimation, all built native on Godot 4.7 and OpenXR.
Features · Why Nightfall · Usage · Building · Donate · License
- VR-native streaming - floating screen in 3D space with grab bars, corner resize, and curvature options
- HEVC hardware decoding - NDK MediaCodec pipeline for low-latency H.265 on Quest 3/3S; VAAPI HEVC decode on Linux
- AI Stereoscopic 3D - real-time AI depth conversion via MiDaS turns any 2D game into stereoscopic 3D, no server-side setup required (Quest only)
- SBS support - Stretch and Crop modes for native side-by-side 3D content
- Shader smoothing & sharpening - Gaussian blur plus CAS adaptive sharpening on the stream
- Flexible stream configuration - resolution presets (720p–4K including 4:3 and 21:9), 30–120 FPS, auto or manual bitrate, auto display refresh rate matching
- Touch-style pointer - laser pointer with trigger-to-click, grip for right-click, thumbstick scroll; circle or arrow cursor
- Passthrough - see your real room with the stream floating in front of you
- Curved screen - toggle curvature from the menu; flat, slight curve, or full wrap with optional bezel
- Quest Touch Plus models - real controller models instead of placeholder boxes (Quest only)
- Linux PCVR - AppImage release for WiVRn/Monado with passthrough, composition layers, and SBS support
- Compatibility - works with any GameStream-compatible server
- Ease of use - pair and connect in seconds; AI 3D requires no additional server-side configuration
There is no native Moonlight client on the Quest. Existing options like Moonlight Android and Artemis run as flat Android apps - they work inside a 2D window, not in XR/VR space. This means you can't use Quest-native features like stereoscopic SBS rendering, AI-powered 3D depth conversion, or passthrough while streaming. You're staring at a flat panel in a flat app, same as any phone screen.
Nightfall is built from scratch as a native OpenXR application. The stream lives in 3D space - you can grab it, curve it, resize it, and place it wherever you want. AI depth estimation turns any 2D game into stereoscopic 3D in real-time, something flat clients simply cannot do because they don't have per-eye rendering access.
Beyond gaming there is potential for Nightfall to become a useful streaming client for productivity too. With compatibility as it's strength, any server - Windows, Mac, or Linux - becomes a serious desktop streaming tool. Pull up your IDE, terminal, or browser on a massive virtual screen with passthrough so you can still see your desk.
- Stream quality improvements - higher fidelity at lower bandwidth through optimized encoding and rendering pipelines
- Stream performance improvements - reduce latency and overhead throughout the capture, encode, decode, and display chain
- Wide mode for SBS - when dynamic virtual desktop creation is supported, create a double-width desktop so SBS content renders at full per-eye resolution
- SBS auto-detection - automatically detect side-by-side content and switch modes, then restore previous setting when SBS ends
- SBS mouse tracking - resolve pointer positioning in SBS mode; evaluate ReShade filter integration or build a native solution
- Hand-tracked input devices - use Quest hand tracking to track physical keyboard and mouse position; upload controller/keyboard/mouse 3D models for visual representation
- Keyboard layout templates - pre-built keyboard layouts for common configurations; a keyboard is a keyboard, same as a mouse
- Additional environments - new background scenes beyond the default
- SBS game menu - an in-VR game launcher for SBS content, paired with a companion PC app for managing game shortcuts
- Server processing layer - a companion app running on the Sunshine server that offloads processing from the headset, similar to WiVRn's architecture; potential for significant quality and performance gains
- Fake gamepad - controller input emulation for scenarios where gamepad input is preferred over mouse/keyboard
Nightfall streams from any GameStream-compatible server on your local network:
- Sunshine - open source GameStream host (recommended)
- Apollo - Sunshine fork with virtual display and extra features
- Polaris - lightweight GameStream server for macOS and Linux
Setup:
- Install and configure Sunshine on your PC
- Open the Sunshine web UI at
https://<your-pc-ip>:47990 - Create a username and password
- Add your games/apps to the Sunshine library
- Sideload Nightfall onto your Quest 3 or 3S (via SideQuest, ADB, or Obtainium)
- Launch the app - you'll see the welcome screen
- Select a server from auto-discovered hosts, or press Select Server to enter an IP address manually
- Press Connect to pair and start the stream
- Enter the displayed PIN in your server's web UI
- The stream starts automatically
- Download the
Nightfall-x86_64.AppImagefrom the latest release - Ensure WiVRn is running on your PC with your headset connected
- Run
chmod +x Nightfall-x86_64.AppImage && ./Nightfall-x86_64.AppImage - The app launches into VR via WiVRn/Monado OpenXR runtime
- Controls and streaming work the same as Quest (AI 3D not available on Linux yet)
| Input | Action |
|---|---|
| Trigger | Left-click / interact |
| Grip | Right-click |
| Right thumbstick Y | Scroll |
| B button | Toggle menu |
| A button | Toggle keyboard |
| Grab bars | Drag to reposition screen/menu |
| Corner handles | Resize screen (locked 16:9) |
See BUILD.md for full build instructions including:
- GDExtension compilation (cmake + ninja, not manual clang++)
- vcpkg dependency setup
- Android APK export via Godot headless
- Linux binary and AppImage export
- Quest deployment via ADB
Quick start (Android):
# 1. Build the GDExtension
cd addons/nightfall-stream
cmake --preset android
ninja -C build/android
# 2. Export the APK
./build.sh --debug
# 3. Install to Quest
adb install -r Nightfall-Android-arm64-v8a-debug.apkQuick start (Linux AppImage):
# 1. Build the GDExtension
cd addons/nightfall-stream
VCPKG_ROOT=~/Development/Personal/vcpkg VCPKG_DEFAULT_TRIPLET=x64-linux \
cmake --preset linux -DCMAKE_BUILD_TYPE=Release
ninja -C build/linux-release
# 2. Export the AppImage
./build.sh --appimageWarning
Always use cmake + ninja to build the GDExtension. Manual clang++ compilation produces .so files
that depend on libc++_shared.so, which isn't in the APK and causes UnsatisfiedLinkError crashes.
Nightfall is a spare-time project built to make VR game streaming feel native instead of bolted on. If it becomes part of your setup, that alone makes my day. Donations help keep the coffee flowing and the commits coming.
Nightfall is licensed under the GNU General Public License v3.0. See LICENSE for the full text.
Special thanks to the Moonlight-Godot project, which served as a reference implementation, and to Janyger for AI 3D contributions to Artemis. Compatible with Apollo, Sunshine, and Polaris.
