Rusty XR Companion

Windows and Android companion utilities for public Quest development workflows.

Release Workflow

The release lane is portable and does not commit APK payloads. The app source tree carries catalog metadata only. During release packaging, the workflow downloads the public Rusty XR Quest camera composite-layer and broker APKs from release assets and copies them into the portable app payload beside the default catalog. Published release installs and local dev installs are intentionally separate.

The GitHub workflow:

1. builds and tests the .NET solution 2. builds the GitHub Pages site 3. publishes the WPF app as a self-contained win-x64 app 4. publishes the CLI as a self-contained win-x64 app 5. publishes the MCP stdio server as a self-contained win-x64 app 6. downloads and validates the public Rusty XR composite-layer and broker APKs 7. copies those APKs into artifacts/app-win-x64/catalogs/apks 8. publishes the guided setup helper 9. signs the setup helper when signing secrets are configured 10. copies the setup helper into the app payload as RustyXrCompanion-Uninstall.exe 11. validates the copied uninstall helper with the same signing check when a preview certificate is configured 12. creates app, CLI, and MCP zips 13. writes RELEASE_MANIFEST.json 14. writes SHA256SUMS.txt 15. uploads release assets

The published WPF app and CLI receive the release version during `dotnet publish`. Release-channel installs compare that version to the latest GitHub Release tag on startup and update from RustyXrCompanion-win-x64.zip only after a release is published.

The portable app zip includes RustyXrCompanion-Uninstall.exe, copied from the guided setup helper after signing. That keeps Windows Settings uninstall on the same validated preview certificate path as the guided installer without adding a separate binary asset.

The portable app zip also includes:

The CLI and MCP zips include the same agent-onboarding/ folder so a local agent can start from command-line-only or MCP-only release assets too.

The app, CLI, and MCP zips include LICENSE and THIRD_PARTY_NOTICES.md. The GitHub release also uploads RELEASE_MANIFEST.json, THIRD_PARTY_NOTICES.md, and SHA256SUMS.txt beside the executable assets. The manifest records the release commit/tag, asset hashes, bundled public APK metadata, and the managed-tool download sources/license summaries.

The optional FFmpeg media runtime follows the same explicit managed-tool pattern as scrcpy: it is not bundled into the app or CLI zip, but users can install it into LocalAppData through tooling install-media or the desktop Install / Update Media Runtime button. The installer selects a Windows x64 LGPL shared FFmpeg build, verifies SHA-256, records source/version/hash/license metadata, and classifies ffmpeg -version for GPL/nonfree flags.

The WPF app auto-loads this catalog on startup and defaults to the accepted camera-stereo-gpu-composite runtime profile. The catalog also includes fast direct and broker H.264 stereo projection profiles for renderer-parity checks, OSC listener profiles that exercise the headset diagnostic HUD, and a no-overlay profile for HUD cost isolation. It also includes the Rusty XR broker app and broker runtime profiles used by the OSC, WebSocket, LSL, and bio-simulation diagnostics. The composite APK URL comes from the workflow dispatch composite_apk_url input, the RUSTY_XR_COMPOSITE_APK_URL repository variable, or the default latest Rusty XR release asset URL, in that order. The broker APK URL follows the same order with broker_apk_url, RUSTY_XR_BROKER_APK_URL, and the latest Rusty XR broker release asset.

For public releases, prefer a versioned Rusty XR release asset URL in composite_apk_url and broker_apk_url. The packaging step writes metadata files beside both APKs with the source URL, SHA-256, signing mode, native libraries, permissions, and debuggable status.

Signing Secrets

Optional secrets:


WINDOWS_PREVIEW_SETUP_CERTIFICATE_BASE64
WINDOWS_PREVIEW_SETUP_CERTIFICATE_PASSWORD

Optional variable:


WINDOWS_PREVIEW_SETUP_TIMESTAMP_URL
RUSTY_XR_COMPOSITE_APK_URL
RUSTY_XR_BROKER_APK_URL

Generate or export a certificate with:


powershell -ExecutionPolicy Bypass -File .\tools\app\New-Preview-SigningCertificate.ps1

Do not commit PFX files or passwords.

Why Portable First

This version does not need Windows package identity. Portable release assets keep the public setup simple while still allowing a generated public example APK payload to ship with the installed app.

Future MSIX support can reuse the same public docs structure and signing posture when package identity becomes useful.

Dev Channel

Use a separate local dev install for feature work:


powershell -ExecutionPolicy Bypass -File .\tools\app\Install-DevDesktopApp.ps1 -Launch

This writes to %LOCALAPPDATA%\Programs\RustyXrCompanionDev, creates a Rusty XR Companion Dev shortcut, and disables public release auto-updates.