Skip to content

vindeckyy/Solar-Flare

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3,491 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SolarFlare logo

SolarFlare

A precision game-streaming host for Moonlight.

Linux & AMD-first capture, transport, and host control engineered for predictable local-network latency.

Latest release GPL-3.0 license Moonlight client Primary target Linux x86-64

Install · Interface · Architecture · Configuration · Build · Changelog

SolarFlare host observatory


Overview

SolarFlare is a self-hosted game-streaming server for Moonlight clients. It combines a low-latency Linux data path with an original observatory-style Web UI for pairing devices, managing applications, tuning the host, and diagnosing the complete streaming pipeline.

Primary use High-quality game and desktop streaming across a trusted local network
Host focus Linux x86-64, with native tuning for modern AMD and Intel CPUs
Client protocol Moonlight / NVIDIA GameStream-compatible transport
Control plane Responsive HTTPS interface at https://localhost:47990
Current release v2026.718.5-solarflare

Important

SolarFlare preserves the executable name, service identifier, ports, state format, and configuration directory used by Sunshine so existing Moonlight pairings remain compatible. User-facing product identity is SolarFlare; compatibility identifiers such as sunshine, SUNSHINE_CLIENT_*, and ~/.config/sunshine intentionally remain unchanged.

What sets SolarFlare apart

System SolarFlare approach
Host control A purpose-built observatory interface with persistent desktop navigation, compact mobile controls, command search, and unified diagnostics
Network path Link-aware pacing, optional busy polling, expanded ENet buffers, DSCP tagging, and adaptive bitrate controls
Scheduling Capture-thread affinity, controlled real-time scheduling, native CPU tuning, and optional boot-time performance services
Video NVENC tuning profiles, per-application encoder overrides, headless display paths, and hardware-aware capture selection
Audio Low-latency PipeWire hints plus optional AGC, voice activity detection, ducking, noise gating, and Opus controls
Operations Scoped API tokens, trusted-subnet pairing, local client catalog, structured logs, and focused regression coverage

SolarFlare exposes these capabilities as individual controls. Defaults are chosen for compatibility, and each tuning path can be disabled independently when comparing behavior on a particular host.

Control surface

The interface is designed as a host instrument panel rather than a collection of generic settings pages. Motion is reserved for interaction and state changes; there are no ambient looping effects.

Pair a client
Focused PIN entry with clear host state.

SolarFlare PIN pairing
Manage applications
Launch definitions, artwork, and import tools.

SolarFlare application catalog
Discover clients
A curated local catalog with no third-party runtime fetch.

SolarFlare featured client catalog
Tune the host
Dense configuration surfaces with consistent hierarchy.

SolarFlare configuration console
Inspect the pipeline
Logs, diagnostics, and recovery actions in one place.

SolarFlare troubleshooting console
Monitor the host
Connection state, release status, and direct actions.

SolarFlare host overview

Performance architecture

flowchart LR
    ML["Moonlight client"] <-->|"encrypted GameStream transport"| NET["SolarFlare network path"]
    CAP["Display capture"] --> ENC["Hardware / software encoder"] --> NET
    AUD["Audio capture + optional FX"] --> NET
    UI["Observatory Web UI"] --> CFG["Host configuration"]
    CFG --> CAP
    CFG --> ENC
    CFG --> AUD
    CFG --> NET
Loading

The fork-specific path is concentrated in four areas:

  1. Capture: X11, KMS, PipeWire/portal, headless compositor, and optional Hermes-KMS paths are selected according to the build and host environment.
  2. Encode: NVENC presets and per-application overrides tune latency, lookahead, adaptive quantization, and frame structure without changing the Moonlight protocol.
  3. Transport: Link-speed detection, pacing, socket buffers, busy polling, QoS marking, and adaptive bitrate respond to local-network conditions.
  4. Control: The HTTPS UI, API scopes, pairing rules, and diagnostics expose host state without placing cloud services in the streaming path.

See SolarFlare configuration for fork controls and the complete configuration reference for inherited host options.

Install

Supported release profile

The published sunshine-x86_64 asset is a stripped Linux x86-64 executable. It is intended for updating an existing SolarFlare source installation, where /usr/local/assets and the user service are already present. A fresh machine should use the source installer so the Web UI, desktop files, shaders, udev rules, and service unit are installed with the binary.

The source tree retains inherited cross-platform code, but the SolarFlare release and performance profile documented here are maintained for Linux.

Fresh source installation

git clone --recursive https://github.com/vindeckyy/Solar-Flare.git
cd Solar-Flare
./scripts/cachyos-build.sh
systemctl --user enable --now app-dev.lizardbyte.app.Sunshine.service

The installer detects Arch/CachyOS, Debian/Ubuntu, Fedora-family, openSUSE, and Bazzite hosts. Read the porting guide before using an unsupported distribution or building a portable binary.

Update an existing installation with the release binary

systemctl --user stop app-dev.lizardbyte.app.Sunshine.service
sudo curl --fail --location \
  --output /usr/local/bin/sunshine \
  https://github.com/vindeckyy/Solar-Flare/releases/latest/download/sunshine-x86_64
sudo chmod 0755 /usr/local/bin/sunshine
sudo setcap 'cap_sys_admin,cap_net_bind_service,cap_net_raw,cap_dac_read_search+ep' \
  /usr/local/bin/sunshine
systemctl --user start app-dev.lizardbyte.app.Sunshine.service

Then open https://localhost:47990, accept the host-local certificate, and pair a Moonlight client using its PIN.

Verify the host

systemctl --user --no-pager status app-dev.lizardbyte.app.Sunshine.service
getcap /usr/local/bin/sunshine
journalctl --user -u app-dev.lizardbyte.app.Sunshine.service -n 50 --no-pager
curl --insecure --output /dev/null --write-out '%{http_code}\n' \
  https://localhost:47990/

An unauthenticated curl request should return 401; the browser login page becomes available after credentials are configured.

Configuration

Configuration remains at ~/.config/sunshine/sunshine.conf, with application definitions in ~/.config/sunshine/apps.json.

Area Representative controls Documentation
Network busy_poll_us, rate_cap_pct, enet_4mib_buffer, dscp_qos Fork controls
Scheduling cpu_pinning, gpu_governor Scheduling behavior
Capture headless_virtual_display, skip_wayland_correlation Capture controls
Video nvenc_tuning_preset, adaptive bitrate, codec and quality controls Complete reference
Audio pipewire_latency_ms, sf_audio_*, sf_opus_* Audio FX
Access Scoped API tokens, trusted subnets, pairing, origin policy API · Security

For a minimal per-application encoder override:

{
  "name": "Competitive profile",
  "cmd": "steam steam://rungameid/730",
  "encoder-preset": 0
}

Preset values are -1 for the host default, 0 for latency, 1 for balanced, and 2 for quality.

Build and test

The project uses CMake, Ninja, Vite, and GoogleTest. Keep build directories under the cmake-build- prefix.

git submodule update --init --recursive

cmake -S . -B cmake-build-release -G Ninja \
  -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_DOCS=OFF \
  -DBUILD_TESTS=OFF
cmake --build cmake-build-release --target sunshine web-ui -j2

To run the test suite:

cmake -S . -B cmake-build-tests -G Ninja \
  -DCMAKE_BUILD_TYPE=Debug \
  -DBUILD_TESTS=ON \
  -DBUILD_DOCS=OFF
cmake --build cmake-build-tests --target test_sunshine -j2
./cmake-build-tests/tests/test_sunshine --gtest_brief=1

Platform-specific dependencies and compiler requirements are documented in Building and Porting SolarFlare.

Repository map

Path Purpose
src/ Streaming host, transport, capture, encode, audio, and configuration
src_assets/common/assets/web/ SolarFlare observatory interface
tests/ Unit, integration, regression, and documentation contracts
packaging/ Platform packaging and optional Linux performance services
scripts/ Build, release, screenshot, and maintenance tooling
docs/ User, operator, developer, and inherited configuration references

Documentation

Document Use it for
Getting started Inherited platform background and client prerequisites
SolarFlare configuration Fork-specific network, scheduling, audio, and capture controls
Complete configuration Every inherited host option
Porting Distribution packages, toolchains, and manual builds
Troubleshooting Capture, encoder, audio, networking, and input diagnostics
API Automation and scoped host access
Security Supported versions and private vulnerability reporting
SolarFlare changelog Fork release and implementation history

Project policy

  • Security: report SolarFlare-specific vulnerabilities privately through GitHub Security Advisories.
  • Contributions: read CONTRIBUTING.md and the development guide before opening changes.
  • License: SolarFlare is distributed under GPL-3.0-only.
  • Upstream: the GameStream foundation and inherited platform work come from LizardByte/Sunshine. Internal compatibility names are retained where changing them would break clients, configuration, packaging, or update paths.

SolarFlare
Own the host. Instrument the path. Stream without the cloud.

About

A precision, Linux and AMD-first game-streaming host for Moonlight, with an observatory-style Web UI, low-latency transport tuning, and advanced host controls.

Topics

Resources

License

Contributing

Security policy

Stars

32 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages

  • C++ 74.8%
  • CMake 4.5%
  • HTML 4.3%
  • Vue 3.9%
  • Shell 3.0%
  • CSS 2.9%
  • Other 6.6%