Cross-platform notes
The launcher is in the middle of a Windows → Avalonia cross-platform port (xplat-launcher stream). It targets net10.0 with RIDs linux-x64 and win-x64; WPF has been fully replaced by Avalonia 12. This file lists the code paths that still behave differently per OS and what the remaining gaps are.
Executable shape
| Platform | Game Studio file | How it is started |
|---|---|---|
| Windows | Stride.GameStudio.Avalonia.Desktop.exe (with fallback to Stride.GameStudio.exe) |
Process.Start(exe, args) |
| Linux | Stride.GameStudio.Avalonia.Desktop.dll |
Process.Start("dotnet", $"{dll} {args}") |
The choice is in StrideVersionViewModel.UpdateAvailableEditors and DotNetHostSelector.NativeStartInfo, which invokes dotnet when there is no apphost next to the dll.
Windows-only code paths
Searching for OperatingSystem.IsWindows() in the launcher shows the remaining divergences.
Prerequisites installer
StrideStoreVersionViewModel.RunPrerequisitesInstaller runs {InstallPath}/Bin/Prerequisites/install-prerequisites.exe. That binary is a Windows installer — it is simply skipped on non-Windows since the DirectX / .NET prerequisites it ships don't apply.
Visual Studio integration
VsixVersionViewModel relies on Stride.Core.CodeEditorSupport.VisualStudio.VisualStudioVersions to find installed VS instances. This uses vswhere internally and returns nothing on Linux/macOS, so the VSIX entries are effectively hidden. The code does not branch explicitly — it just finds no targets and the command stays disabled.
Installers
Advanced Installer projects (Prerequisites/, Setup/) are Windows-only by construction. The MSBuild PackageInstaller target silently skips when AdvancedInstaller.com is not on PATH. On Linux/macOS, distribute the launcher via dotnet publish -r {rid} --self-contained. See packaging.md.
Telemetry and privacy policy
Both Stride.Metrics / MetricsClient (telemetry) and PrivacyPolicyHelper (first-run consent prompt, uninstall-time revoke) have been intentionally and permanently removed from the launcher. They will not be ported. No cleanup of legacy privacy-policy state is performed on uninstall — telemetry was removed, so any residual registry keys or settings files from the old WPF launcher are harmless orphans and do not need to be scrubbed.
Launcher ↔ GameStudio IPC
When AutoCloseLauncher is on, the launcher passes IPC information to Game Studio via a CLI argument so Game Studio can signal back once it has started.
| Platform | Argument | Mechanism |
|---|---|---|
| Windows | /LauncherWindowHandle <hwnd> |
Game Studio sends a Win32 WM_CLOSE message to the launcher's HWND. MainWindow.OnOpened captures the HWND via TryGetPlatformHandle(). |
| Linux (and other non-Windows) | /LauncherPipe <pipeName> |
The launcher starts a NamedPipeServerStream and waits for a connection (up to 2 minutes). Game Studio connects via NamedPipeClientStream once its main window is loaded and writes one byte. The launcher raises CloseRequested and the window closes gracefully. |
Both paths are implemented:
- Launcher side:
MainViewModel.StartStudio— branches onOperatingSystem.IsWindows(). Non-Windows path startsWaitForGameStudioPipeSignalAsyncand injects/LauncherPipe <name>.MainWindow.axaml.cswiresCloseRequested → OnClosingAsync. - Game Studio side:
Program.ParseLauncherArgs(inStride.GameStudio.Avalonia.Desktop) parses both argument styles and setsApp.LauncherNotifier.MainWindow.OnLoadedfires it once.
Settings paths
All config paths go through EditorPath (linked file from Stride.Core.Assets.Editor). EditorPath.UserDataPath resolves to:
%LocalAppData%\Stride\on Windows$XDG_DATA_HOME/Stride/(or~/.local/share/Stride/) on Linux~/Library/Application Support/Stride/on macOS
The launcher writes LauncherSettings.conf and the launcher.lock single-instance marker under these paths. No OS-specific branching is needed.
Icons
Window icons (Launcher.ico) are served through Avalonia's resource system. The .ico format is used on every platform; Avalonia picks the best-matching size at runtime.
Recent-project "Show in Explorer"
RecentProjectViewModel.Explore reveals the selected recent project in the platform's native file manager:
- Windows:
explorer.exe /select,{path}(unchanged from master). - macOS:
open -R {path}— reveals the file in Finder. - Linux:
dbus-sendinvocation oforg.freedesktop.FileManager1.ShowItemson the session bus (implemented by GNOME Nautilus, KDE Dolphin, Cinnamon Nemo, XFCE Thunar, LXDE PCManFM, and others). Falls back toxdg-open {parent-dir}when the DBus call fails — e.g. on minimal WMs without anorg.freedesktop.FileManager1implementer, or headless environments without a session bus.
All failures are swallowed silently (no dialog, no crash) since they are not actionable from inside the launcher.
Testing surface
When exercising changes, run the launcher on both Windows and Linux. Known gaps that will not reproduce on Linux:
- Self-update through a reinstall (
reinstall-below: downloads aStrideSetup.exe, Windows only). - First-install VSIX prompt (no VS instances).
- Prerequisites installer on first run.
Conversely, on Windows the dotnet launch path (the .dll branch in StartStudio) is unreachable unless a Linux-built package is opened.