Releases: vindeckyy/Solar-Flare
Release list
v2026.718.5-solarflare
SolarFlare v2026.718.5-solarflare
Built from the clean tag at commit 3d9e083c18e262b7f2c9cf19b159190b2d0bcb38.
Highlights:
- Completely redesigned responsive observatory Web UI with desktop navigation rail and compact mobile controls.
- SolarFlare branding across localized presentation copy while retaining protocol compatibility.
- Local featured Moonlight client catalog with no third-party runtime fetch.
- Six current UI screenshots on the main README and a reproducible all-tab capture script.
- Focused Web UI contract coverage: 16 tests passed.
Asset:
sunshine-x86_64— clean, stripped Linux x86_64 Release ELF built with X11 and NVENC/CUDA support.- Embedded version:
2026.718.5-0-g3d9e083c(no dirty suffix). - SHA-256:
ba07fabdeaddcfedd6d03609b8fc9080695b872f82a057d4632c584597b4ad8a.
Diff since v2026.708.4-solarflare: v2026.708.4-solarflare...v2026.718.5-solarflare
v2026.708.4-solarflare
SolarFlare v2026.708.4-solarflare
Built from 506b3506 on master. Includes the portal stability fixes from #17 (closes #14 and #16):
- Portal D-Bus wait now bounded by a 15 s GLib timeout so a stalled portal fails fast instead of wedging the HTTPS control plane.
cursor_mode = EMBEDDEDrequested when the portal'sAvailableCursorModesadvertises it (fixes invisible cursor on KDE).verify_and_update_display_parameters()falls back to logical / stream resolution whenwl_outputreports 0x0 (KWin quirk), so absolute mouse input works.dbus_response_tgained a destructor: signal subscription + timeout source + response variant are released together (same bug class as 75c83f9).- Signal pre-subscription before the proxy call, returned-path verification: closes the race where a fast response terminated the wait with the wrong subscription.
- Build fix:
src/stream.cppnow includesnanors/rs.hso the restored nanors parity-override compiles.
Asset
sunshine-x86_64 — Linux x86_64 stripped ELF (binary only). Note: the web UI is served from an assets/web directory on disk, not embedded in the binary. Building from source always ships the current UI (the web-ui CMake target runs npm run build); if you install the prebuilt binary, deploy assets/web alongside it (or build from master) so the config interface reflects your changes.
Build: cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_DOCS=OFF -DSUNSHINE_ENABLE_TRAY=OFF; stripped with strip.
Source: https://github.com/vindeckyy/Solar-Flare/tree/v2026.708.4-solarflare
Diff since v2026.708.3: v2026.708.3-solarflare...v2026.708.4-solarflare
v2026.708.3-solarflare
Security sweep:
- src/stream.cpp: bound length-prefixed parse in IDX_INPUT_DATA and IDX_LOSS_STATS handlers (M-1)
- src/crypto.cpp: PEM_read_bio_X509 / PEM_read_bio_PrivateKey return values now checked (M-2)
- src/nvhttp.cpp: cap concurrent TLS handshakes at 64 (M-3)
- src/httpcommon.cpp + src/confighttp.cpp: password min length 12 + per-IP login rate limit 10/30s (M-4)
- src/confighttp.cpp: cover-upload path traversal guard, API token log-injection guard (L-1, L-2)
- src/httpcommon.cpp: download_file TLS verify + HTTPS-only + timeout (L-3)
- cmake/packaging/linux.cmake: install(CODE) hook applies setcap on local builds
v2026.708.2-solarflare
v2026.708.2-solarflare
19 commits since v2026.708.1-solarflare.
Build system
- ccache + mold — CMAKE_CXX_COMPILER_LAUNCHER/CMAKE_C_COMPILER_LAUNCHER wired, -fuse-ld=mold, 17s cold rebuild
- Submodule stub fix — check_not_empty now detects .git stub files in uninitialized submodules (fresh clones no longer skip git submodule update --init)
- OOM guard — cap -j6 on 16GB machines
- GEN_WAYLAND hardening — wayland-protocols submodule fetched before cmake configure
- CI — ci-copr.yml removed (source of release-time failure emails)
Fixes
- capture — verify_kwin() guarded + X11 window_system forced when skip_wayland_correlation is set
- rate_cap_pct — link detection cache cleared on config change (stale links no longer persist)
- docs — */ break sequence in set_thread_cpu_pinning doxygen comment
- test coverage — skip_wayland_correlation, sf_opus, sf_audio keys added to internal options skip set
Docs & changelog
- README: visual polish, corrected numbers, badge updates
- CHANGELOG-SolarFlare.md: restructured chronological, full 95-commit index appended
- Morning sweep patches (audio FX, KMS, config consistency)
Removed
- Windows port code and documentation scrapped
v2026.708.1-solarflare
SolarFlare 2026-07-08 patch release
Fixes the long-standing "I have to re-pair every time Sunshine restarts" bug.
Highlights since v2026.708.0-solarflare:
-
fix(certs): adopt existing pkey/cert on restart instead of generating (7fde0ef)
Every restart was creating a new server cert because the user's
sunshine.confhas nopkey=/cert=lines, so the empty-config
branch inhttp::init()generated a random unique_id on every
start. The new cert invalidated every paired Moonlight client and
forced re-pair. Fix: scanappdata/credentials/for existing
pkey-*files and adopt the newest by mtime. On Hayden's box
this stops the accumulation of 2266+ cert/pkey pairs from previous
restarts. One re-pair required after this update (the existing
paired client certs insunshine_state.jsondon't match the
adopted server cert). After that, every restart preserves the cert. -
feat(error): SUN_ERR tagged error log + process-wide counters (5d113c3, 6cd3046, 718fb65)
Newsrc/error.hwitherror_category_e,encode_error_e, and the
SUN_ERR(cat, tag, msg)macro. Every error log line is now
self-correlated with file:line:func + category tag + per-category
atomic counter.encode()andencode_nvenc()return
std::optional<encode_error_e>so call sites can branch on the
specific cause (EMPTY_PACKET, FRAME_INDEX_MISMATCH,
UNSUPPORTED_SESSION) instead of the previous generic "Could not
encode video packet" message. NewGET /api/errorsendpoint
(LOGS_GET scope) returns the counter snapshot for the Web UI. -
test(error): standalone runner
tests/run_test_error.shbypasses the cmake test target (which
OOMs the 16GB box on full test_sunshine link). Compiles only
src/error.cpp+tests/unit/test_error.cpp+gtest_main.ccin
~5s, ~300MB peak. 4 unit tests pass on the host.
Upgrade notes:
- Pull and rebuild:
cd ~/Desktop/Solar-Flare && git pull --rebase && cmake --build cmake-build-test --target sunshine -j4 - Install:
sudo cp cmake-build-test/sunshine /usr/local/bin/sunshine && sudo setcap "cap_dac_override,cap_sys_admin,cap_sys_nice+ep" /usr/local/bin/sunshine - Restart:
systemctl --user restart sunshine - Re-pair ONE TIME in Moonlight (forced because the adopted server cert doesn't match the certs currently in
sunshine_state.json) - Optional cleanup:
rm ~/.config/sunshine/credentials/pkey-*to remove the 2265 orphan pairs
After step 4, every subsequent restart preserves the cert. No more forced re-pair.
v2026.708.0-solarflare
SolarFlare 2026-07-08 release
Highlights since v2026.999.2-solarflare:
- cert: persist TLS cert/key in appdata/credentials/, survive reboots (fixes pairing after reboot)
- cert: empty nvhttp.cert defaults; remove blocking set_options (fixes TLS handshake hang)
- stream: align stream ports with Moonlight clients https_port+offset math
- stream: give audio its own UDP port instead of colliding with control (fixes 48015 EADDRINUSE)
- proc: keep detached app sessions alive indefinitely (fixes 5s timeout disconnect loop)
- x11: remove INPUT_PROP_DIRECT from uinput touch device (fixes X11 game input)
- niri: add niri (Smithay) Wayland compositor support
- niri: 6 unit tests for niri auto-detect + set_backend round-trips
Build version: 86-ab0efcc
Tests: 474 passed / 12 skipped
Commits since v2026.999.2-solarflare: 33
Commit count since fork (upstream..HEAD): 86