Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
e64b521
fix: retarget web release checks to Nimbus
ywkuno May 21, 2026
82eae64
docs: add Nimbus UI identity plan
ywkuno May 21, 2026
ce9ec7a
fix: rebrand visible web shell to Nimbus
ywkuno May 21, 2026
fe7b742
fix: retarget Windows visible branding to Nimbus
ywkuno May 21, 2026
f14d443
fix: harden Windows web package npm invocation
ywkuno May 21, 2026
bea06db
docs: record Windows package revalidation blocker
ywkuno May 21, 2026
2ab4bf9
fix: rebrand hardcoded web copy to Nimbus
ywkuno May 21, 2026
5bdc078
feat: apply Nimbus web identity tokens
ywkuno May 21, 2026
3d8197a
fix: rebrand Windows status messages to Nimbus
ywkuno May 21, 2026
6383784
docs: record UI identity revalidation
ywkuno May 21, 2026
79de18b
fix: rebrand static onboarding surfaces
ywkuno May 21, 2026
1ff4cfb
docs: include static onboarding validation
ywkuno May 21, 2026
0b4966f
docs: refresh first alpha release notes
ywkuno May 21, 2026
b5bba63
docs: record current Windows package validation
ywkuno May 21, 2026
57d0187
fix: retarget remaining visible host branding
ywkuno May 21, 2026
619d88c
docs: refresh package validation artifacts
ywkuno May 21, 2026
a0439c6
docs: update installer fixture candidate
ywkuno May 21, 2026
1bab053
ci: pause automatic issue closures
ywkuno May 21, 2026
0af1f3b
fix: make uninstaller quick tips mode-aware
ywkuno May 21, 2026
50cad79
docs: refresh quick tip package candidate
ywkuno May 21, 2026
c26adb5
docs: record partial Windows fixture evidence
ywkuno May 21, 2026
0ca31ee
fix: retarget English session tooltips
ywkuno May 21, 2026
4f3411b
fix: show manual update check feedback
ywkuno May 21, 2026
8ebf1ea
docs: refresh Windows package candidate
ywkuno May 21, 2026
37fd357
docs: clarify alpha version display policy
ywkuno May 21, 2026
9b7636a
docs: record update check fixture pass
ywkuno May 21, 2026
6914f6e
fix: deep link pairing notification
ywkuno May 21, 2026
a777e40
fix: retarget runtime display helper branding
ywkuno May 21, 2026
4b9379e
fix: clean visible inherited naming
ywkuno May 21, 2026
8cc62a2
docs: define setup intelligence roadmap
ywkuno May 22, 2026
2f47bb8
fix(nvenc): preserve legacy bit-depth layout for API 12.1
Nonary May 19, 2026
1af84e4
fix(stream): preserve 10-bit HDR and SDR setup
Nonary May 19, 2026
e2ecd62
fix(display): prefer golden restore after stream end
Nonary May 20, 2026
52d010d
fix(display): validate snapshots and output overrides
Nonary May 20, 2026
40ef134
fix(display-helper): preserve unconfirmed restores across reconnect
Nonary Apr 25, 2026
51d7eaf
docs: record upstream sync tracker context
ywkuno May 22, 2026
17b2ad2
docs: add streaming recipe fixtures
ywkuno May 22, 2026
52a6578
fix(security): reject untrusted client certificates
ReenigneArcher May 8, 2026
10ed2c3
docs: add Apollo switch readiness path
ywkuno May 23, 2026
682cdc1
docs: record switch-test package candidate
ywkuno May 23, 2026
bdce9c7
fix: detect drive-root Apollo configs
ywkuno May 24, 2026
213e2ff
chore: ignore local switch bundles
ywkuno May 24, 2026
c5eb66a
feat: add Nimbus icon identity
ywkuno May 24, 2026
bace82a
fix: keep Nimbus installs out of legacy paths
ywkuno May 24, 2026
38b0c4e
fix: rewrite Apollo cover paths on Nimbus import
ywkuno May 24, 2026
35f8438
docs: refresh upstream issue radar
ywkuno May 27, 2026
d1f6b4f
fix: preserve user files during Nimbus updates
ywkuno May 27, 2026
63daba1
test: add upgrade preservation fixture helper
ywkuno May 27, 2026
9b33d8f
docs: record upgrade preservation package fixture
ywkuno May 27, 2026
5444797
feat: show app covers in applications list
ywkuno May 27, 2026
330de5a
fix: warn before risky local WebRTC display switch
ywkuno May 27, 2026
668fd49
fix: replace offline overlay branding
ywkuno May 27, 2026
1205faf
fix: focus clients pairing from tray
ywkuno May 27, 2026
07d8507
feat: add tray audio restore action
ywkuno May 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 53 additions & 2 deletions .github/ISSUE_TEMPLATE/bug-report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,25 @@ body:
validations:
required: true

- type: dropdown
id: issue-area
attributes:
label: Issue Area
description: Select the closest area. Pick the most visible symptom if more than one applies.
options:
- Pairing / client connection
- Display / virtual display / HDR
- Frame pacing / stutter / bitrate
- Audio / channel layout / delay
- Controller / gamepad / input
- Cursor / mouse visibility
- Playnite / app launch / app exit
- Installer / upgrade / uninstall
- Web UI / API
- Other
validations:
required: true

- type: dropdown
id: host-os
attributes:
Expand All @@ -37,18 +56,50 @@ body:
id: host-gpu
attributes:
label: Host GPU and Driver
description: Example: RTX 4080, NVIDIA 576.xx.
description: "Example: RTX 4080, NVIDIA 576.xx."
validations:
required: true

- type: input
id: client
attributes:
label: Client Device and App
description: Example: NVIDIA Shield TV Pro, Artemis v20.2.6, 4K 120 Hz HEVC HDR.
description: "Example: NVIDIA Shield TV Pro, Artemis v20.2.6, 4K 120 Hz HEVC HDR."
validations:
required: true

- type: input
id: stream-settings
attributes:
label: Stream Settings
description: "Example: 3840x2160, 60 FPS, HEVC, HDR off, 80 Mbps."
validations:
required: false

- type: input
id: display-setup
attributes:
label: Host Display Setup
description: "Example: physical LG OLED, SudoVDA virtual display, dummy plug, headless VM."
validations:
required: false

- type: input
id: network-path
attributes:
label: Network Path
description: "Example: wired LAN, Wi-Fi 6, Tailscale direct, Tailscale relay, WireGuard, WAN."
validations:
required: false

- type: textarea
id: input-audio
attributes:
label: Input And Audio Notes
description: Mention gamepads, mouse/cursor behavior, audio sink, stereo/5.1/7.1, Bluetooth, eARC, or soundbar details if relevant.
validations:
required: false

- type: textarea
id: reproduction
attributes:
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/environment-specific-closure.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@ on:
jobs:
close:
name: Close Environment-Specific Issue
# Disabled during Nimbus bootstrap. Re-enable only after the public support
# policy clearly defines when maintainers close environment-specific issues.
if: >-
false &&
github.event.action == 'labeled' &&
github.event.label.name == 'environment-specific' &&
github.event.issue.state == 'open' &&
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/logs-needed-closure.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ concurrency:

jobs:
close:
# Disabled during Nimbus bootstrap. Re-enable only after the issue-support
# policy, labels, and maintainer response expectations are Nimbus-owned.
if: false
runs-on: ubuntu-latest
permissions:
issues: write
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@
# VSCode IDE
.vscode/

# Local switch/export bundles may contain credentials, certificates, and keys.
nimbus-switch-bundles/

# build directories
build/
cmake-*/
Expand Down
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,15 @@ Early Nimbus work is focused on:
- Preparing the future Lucent client track.

See [ROADMAP.md](ROADMAP.md) for the current maintainer roadmap.
See [docs/community-research.md](docs/community-research.md) for the community
setup research behind Setup Doctor, Client Profiles, and future fixture work.
See [docs/streaming-recipes.md](docs/streaming-recipes.md) and
[docs/fixture-matrix.md](docs/fixture-matrix.md) for the first repeatable
testing surfaces.
See [docs/apollo-to-nimbus-switch.md](docs/apollo-to-nimbus-switch.md) before
testing Nimbus on a host that already runs Apollo.
See [docs/ui-identity-plan.md](docs/ui-identity-plan.md) for the staged Nimbus
Web UI identity direction.

## Building

Expand Down
5 changes: 4 additions & 1 deletion ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ Goal: build maintainer credibility through user-visible stability work.

- Prioritize Windows 11, NVIDIA Shield TV Pro, Android TV, and Moonlight/Artemis
compatibility reports.
- Turn community setup pain into guided diagnostics, starting with Setup Doctor,
Client Profiles, Cursor Doctor, and a fixture matrix.
- Improve logs and diagnostics before changing capture behavior.
- Create reproducible issue templates for frame pacing, WGC, virtual display,
HDR, audio, controller, and Playnite issues.
Expand Down Expand Up @@ -72,7 +74,8 @@ The next engineering pass should validate the package-branding slice from
`docs/packaging-identity-plan.md` before any branded Nimbus release:

1. Use `docs/release-build-audit.md` as the release automation baseline.
2. Use `docs/upstream-issue-radar.md` to choose the first reliability issue.
2. Use `docs/community-research.md` and `docs/upstream-issue-radar.md` to choose
the first reliability issue.
3. Confirm runtime identifiers remained unchanged unless the packaging identity
plan says the migration has a test path.
4. Produce a local Nimbus-named installer and inspect install, upgrade, and
Expand Down
2 changes: 1 addition & 1 deletion cmake/compile_definitions/linux.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ if(${SUNSHINE_ENABLE_TRAY})
if(${SUNSHINE_BUILD_FLATPAK})
set(SUNSHINE_TRAY_PREFIX "${PROJECT_FQDN}")
else()
set(SUNSHINE_TRAY_PREFIX "apollo")
set(SUNSHINE_TRAY_PREFIX "nimbus")
endif()
list(APPEND SUNSHINE_DEFINITIONS SUNSHINE_TRAY_PREFIX="${SUNSHINE_TRAY_PREFIX}")
else()
Expand Down
4 changes: 2 additions & 2 deletions cmake/compile_definitions/windows.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ file(GLOB NVPREFS_FILES CONFIGURE_DEPENDS
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/third-party/ViGEmClient/include")
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/third-party/sudovda")

# apollo icon
# Nimbus icon
if(NOT DEFINED PROJECT_ICON_PATH)
set(PROJECT_ICON_PATH "${CMAKE_SOURCE_DIR}/apollo.ico")
set(PROJECT_ICON_PATH "${CMAKE_SOURCE_DIR}/nimbus.ico")
endif()

list(APPEND SUNSHINE_DEFINITIONS PROJECT_APP_USER_MODEL_ID="${WINDOWS_APP_USER_MODEL_ID}")
Expand Down
2 changes: 1 addition & 1 deletion cmake/packaging/common.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ set(CPACK_PACKAGE_CONTACT "https://github.com/kunolabs/Nimbus/issues")
set(CPACK_PACKAGE_DESCRIPTION ${CMAKE_PROJECT_DESCRIPTION})
set(CPACK_PACKAGE_HOMEPAGE_URL ${CMAKE_PROJECT_HOMEPAGE_URL})
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE)
set(CPACK_PACKAGE_ICON ${PROJECT_SOURCE_DIR}/sunshine.png)
set(CPACK_PACKAGE_ICON ${PROJECT_SOURCE_DIR}/nimbus.png)
# Ensure the generated installer filename uses the branded name
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}")
set(CPACK_STRIP_FILES YES)
Expand Down
22 changes: 11 additions & 11 deletions cmake/packaging/linux.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -98,38 +98,38 @@ set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OFF)

# application icon
if(NOT ${SUNSHINE_BUILD_FLATPAK})
install(FILES "${CMAKE_SOURCE_DIR}/apollo.svg"
install(FILES "${CMAKE_SOURCE_DIR}/nimbus.svg"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/apps")
else()
install(FILES "${CMAKE_SOURCE_DIR}/apollo.svg"
install(FILES "${CMAKE_SOURCE_DIR}/nimbus.svg"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/apps"
RENAME "${PROJECT_FQDN}.svg")
endif()

# tray icon
if(${SUNSHINE_TRAY} STREQUAL 1)
if(NOT ${SUNSHINE_BUILD_FLATPAK})
install(FILES "${CMAKE_SOURCE_DIR}/apollo.svg"
install(FILES "${CMAKE_SOURCE_DIR}/nimbus.svg"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/status"
RENAME "apollo-tray.svg")
install(FILES "${SUNSHINE_SOURCE_ASSETS_DIR}/common/assets/web/public/images/apollo-playing.svg"
RENAME "nimbus-tray.svg")
install(FILES "${SUNSHINE_SOURCE_ASSETS_DIR}/common/assets/web/public/images/nimbus-playing.svg"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/status")
install(FILES "${SUNSHINE_SOURCE_ASSETS_DIR}/common/assets/web/public/images/apollo-pausing.svg"
install(FILES "${SUNSHINE_SOURCE_ASSETS_DIR}/common/assets/web/public/images/nimbus-pausing.svg"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/status")
install(FILES "${SUNSHINE_SOURCE_ASSETS_DIR}/common/assets/web/public/images/apollo-locked.svg"
install(FILES "${SUNSHINE_SOURCE_ASSETS_DIR}/common/assets/web/public/images/nimbus-locked.svg"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/status")
else()
# flatpak icons must be prefixed with the app id or they will not be included in the flatpak
install(FILES "${CMAKE_SOURCE_DIR}/apollo.svg"
install(FILES "${CMAKE_SOURCE_DIR}/nimbus.svg"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/status"
RENAME "${PROJECT_FQDN}-tray.svg")
install(FILES "${SUNSHINE_SOURCE_ASSETS_DIR}/common/assets/web/public/images/apollo-playing.svg"
install(FILES "${SUNSHINE_SOURCE_ASSETS_DIR}/common/assets/web/public/images/nimbus-playing.svg"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/status"
RENAME "${PROJECT_FQDN}-playing.svg")
install(FILES "${SUNSHINE_SOURCE_ASSETS_DIR}/common/assets/web/public/images/apollo-pausing.svg"
install(FILES "${SUNSHINE_SOURCE_ASSETS_DIR}/common/assets/web/public/images/nimbus-pausing.svg"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/status"
RENAME "${PROJECT_FQDN}-pausing.svg")
install(FILES "${SUNSHINE_SOURCE_ASSETS_DIR}/common/assets/web/public/images/apollo-locked.svg"
install(FILES "${SUNSHINE_SOURCE_ASSETS_DIR}/common/assets/web/public/images/nimbus-locked.svg"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/status"
RENAME "${PROJECT_FQDN}-locked.svg")
endif()
Expand Down
5 changes: 2 additions & 3 deletions cmake/packaging/windows.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -116,11 +116,10 @@ if(NOT EXISTS "${CMAKE_BINARY_DIR}/assets/shaders")
execute_process(COMMAND cmd.exe /c mklink /J "${shaders_in_build_dest_native}" "${shaders_in_build_src_native}")
endif()

set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}\\\\apollo.ico")
set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}\\\\nimbus.ico")

# The name of the directory that will be created in C:/Program Files/
# Match the legacy NSIS layout by installing under Apollo
set(CPACK_PACKAGE_INSTALL_DIRECTORY "Apollo")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "Nimbus")

# Setting components groups and dependencies
set(CPACK_COMPONENT_GROUP_CORE_EXPANDED true)
Expand Down
2 changes: 1 addition & 1 deletion cmake/packaging/windows_wix.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
set(CPACK_GENERATOR "WIX")

# Product identity and visuals
set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/src_assets/common/assets/web/public/images/apollo.ico")
set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/src_assets/common/assets/web/public/images/nimbus.ico")
set(CPACK_WIX_PROGRAM_MENU_FOLDER "Nimbus")

# Stable Upgrade GUID to enable in-place upgrades
Expand Down
20 changes: 17 additions & 3 deletions cmake/targets/common.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,18 @@ endif()
# Default layout: ${CMAKE_SOURCE_DIR}/src_assets/common/assets/web
set(WEB_UI_DIR "${SUNSHINE_SOURCE_ASSETS_DIR}/common/assets/web")

#WebUI build
find_program(NPM npm REQUIRED)
# WebUI build. On Windows prefer the Node.js launcher from the standard
# installer; MSYS npm can fail when invoked through cmd.exe during packaging.
if(WIN32)
find_program(NPM npm.cmd
HINTS "$ENV{ProgramFiles}/nodejs"
NO_DEFAULT_PATH)
if(NOT NPM)
find_program(NPM NAMES npm.cmd npm REQUIRED)
endif()
else()
find_program(NPM npm REQUIRED)
endif()

set(NPM_INSTALL_FLAGS
--ignore-scripts
Expand All @@ -69,6 +79,7 @@ set(NPM_INSTALL_FLAGS
if (NPM_OFFLINE)
list(APPEND NPM_INSTALL_FLAGS --offline)
endif()
set(NPM_CACHE_DIR "${CMAKE_BINARY_DIR}/npm-cache")

# Choose web UI build mode based on active CMake configuration.
# In Debug config, build Vite in "debug" mode to enable Vue devtools.
Expand All @@ -83,8 +94,11 @@ set(NPM_BUILD_NODE_OPTIONS "")
add_custom_target(web-ui ALL
WORKING_DIRECTORY "${WEB_UI_DIR}"
COMMENT "Installing NPM dependencies and building the Web UI"
COMMAND "$<$<BOOL:${WIN32}>:cmd;/C>" "${NPM}" ci ${NPM_INSTALL_FLAGS}
COMMAND "${CMAKE_COMMAND}" -E env
"NPM_CONFIG_CACHE=${NPM_CACHE_DIR}"
"$<$<BOOL:${WIN32}>:cmd;/C>" "${NPM}" ci ${NPM_INSTALL_FLAGS}
COMMAND "${CMAKE_COMMAND}" -E env
"NPM_CONFIG_CACHE=${NPM_CACHE_DIR}"
"SUNSHINE_BUILD_HOMEBREW=${NPM_BUILD_HOMEBREW}"
"SUNSHINE_SOURCE_ASSETS_DIR=${NPM_SOURCE_ASSETS_DIR}"
"SUNSHINE_ASSETS_DIR=${NPM_ASSETS_DIR}"
Expand Down
2 changes: 1 addition & 1 deletion cmake/targets/windows.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ add_custom_command(
"${CMAKE_SOURCE_DIR}/packaging/windows/bootstrapper/VibeshineInstaller.cs"
"${CMAKE_SOURCE_DIR}/packaging/windows/bootstrapper/app.manifest"
"${CMAKE_SOURCE_DIR}/LICENSE"
"${CMAKE_SOURCE_DIR}/apollo.ico"
"${CMAKE_SOURCE_DIR}/nimbus.ico"
generate_windows_versioninfo
COMMENT "Building lightweight Nimbus uninstaller UI"
)
Expand Down
Loading
Loading