End of life — September 2026. SolarFlare is no longer maintained and this site is kept for reference only. No further releases, updates, bug fixes, or security patches will be published. Users are encouraged to migrate to Slipstream, the successor project, which remains actively maintained.

On this page
Getting StartedHow-to

Operator Guides

Curated LAN baseline, low-latency, headless, multi-GPU, HDR, per-client, webhook, and logging how-tos.

9 min readUpdated September 2026

LAN streaming baseline#

Goal: stable 1080p120 or 4K60 on a wired LAN with default fork settings. Install with ./scripts/linux-install.sh and enable the user service. Wire the host with Ethernet. Leave fork defaults enabled (cpu_pinning, enet_4mib_buffer, busy_poll_us, dscp_qos). In Moonlight set bitrate to ~80% of measured iPerf throughput. Run iperf3 per the Troubleshooting network test.

Tip

If the host NIC is 2.5 GbE but the client is 1 GbE, set rate_cap_pct = 80 or lower to avoid buffer overruns.

Competitive low-latency profile#

Add to ~/.config/sunshine/sunshine.conf, plus per-game NVENC override in apps.json. Disable V-Sync in-game; cap Moonlight bitrate only if packet loss appears.

Warning

latency_mode = aggressive trades some visual quality on software scaling paths. Test before using in single-player titles.

ini
latency_mode = aggressive
busy_poll_us = 75
pipewire_latency_ms = 4
cpu_pinning = true
nvenc_tuning_preset = 0

Headless and SSH access#

Path 1 — virtual display (fork): headless_virtual_display = true with headless_width/headless_height/headless_refresh. Path 2 — dummy plug for NVIDIA stable modes with a normal graphical session. Path 3 — SSH into an existing X11 session: ssh user@host 'export DISPLAY=:0; sunshine'.

Caution

Do not run two sunshine instances. Stop the systemd user service before foreground debugging.

Multi-GPU workstations#

StepAction
1Identify GPUs: lspci | grep -E 'VGA|3D' and nvidia-smi
2Plug the monitor (or dummy) into the GPU you want to capture
3Launch games on that GPU (DRI_PRIME=1, prime-run, or BIOS mux)
4In Web UI, set display adapter / output if multiple heads are visible
5Enable gpu_governor = true for AMD; install redesign nvidia-clock-lock for NVIDIA

HDR on Linux (experimental)#

Requires KMS capture, an HDR compositor (KDE Plasma 6, Gamescope), HEVC Main 10 or AV1 10-bit encoder (VAAPI on AMD/Intel), HDR enabled in host OS and Moonlight client, and an EDID emulator or HDR-capable display on host.

Per-client household profiles#

Use client_profile_<identifier> in sunshine.conf. The identifier matches the paired client name from the Web UI PIN / clients list.

ini
client_profile_living-room-tv = {"max_bitrate": 150000, "hevc_mode": 1}
client_profile_phone = {"max_bitrate": 20000, "width": 1280, "height": 720}

Webhooks and structured logging#

Notify Home Assistant or Discord on stream start/stop with webhook_secret + webhook_url_0, verifying X-Solarflare-Signature. For observability: SUNSHINE_LOG_JSON=1 systemctl --user restart app-dev.lizardbyte.app.Sunshine.service, then journalctl --user -u app-dev.lizardbyte.app.Sunshine.service -f.

ini
webhook_secret = your-hmac-secret
webhook_url_0 = https://example.com/hooks/solarflare

Platform support#

Linux x86-64 is primary via ./scripts/linux-install.sh. Other-arch Linux may build but is not release-tested. Windows / macOS / FreeBSD paths install upstream Sunshine unless you build this repository yourself on that platform.

PlatformSolarFlare support
Linux x86-64Primary; ./scripts/linux-install.sh
Linux (other arch)Source may build; not release-tested
Windows / macOSInherited code; use upstream Sunshine releases
FreeBSDInherited upstream packages only

Builder vs runtime images#

scripts/linux_build.sh is a compile-only Docker builder, not a streaming runtime. It validates packaging metadata (appstreamcli, desktop-file-validate) and can emit AppImage artifacts. Runtime containers use the upstream lizardbyte/sunshine images with --ipc=host, /dev/dri (and /dev/uinput for input), the full TCP/UDP port set, and a persisted /config volume. Set PUID/PGID to the config owner and chown -R the volume if IDs change later. Multi-arch manifests cover amd64 and arm64, but SolarFlare release binaries are x86-64 only — arm64 hosts must build from source. Point orchestrator health checks at GET /api/health.

Moonlight client picks#

ClientPlatformsNotes
Moonlight Desktop (Qt)Windows, macOS, LinuxRecommended; full codec and HDR set
Moonlight AndroidAndroid, Android TVManual host add when mDNS is blocked
Moonlight iOS / tvOSiPhone, iPad, Apple TVHDR needs host + client capable
Moonlight EmbeddedRaspberry Pi, embedded LinuxHost must be a separate machine
Moonlight WebChrome, EdgeBrowser client; smaller feature surface