Skip to content

Cross-platform Stride.Launcher - #3027

Closed
Kryptos-FR wants to merge 6264 commits into
masterfrom
feature/launcher-avalonia-cherrypick
Closed

Cross-platform Stride.Launcher#3027
Kryptos-FR wants to merge 6264 commits into
masterfrom
feature/launcher-avalonia-cherrypick

Conversation

@Kryptos-FR

@Kryptos-FR Kryptos-FR commented Dec 30, 2025

Copy link
Copy Markdown
Member

PR Details

New Launcher using Avalonia instead of WPF. Still needs some love.

Related Issue

#1503

Types of changes

  • Docs change / refactoring / dependency upgrade
  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist

  • My change requires a change to the documentation.
  • I have added tests to cover my changes.
  • All new and existing tests passed.
  • I have built and run the editor to try this change out.

@Kryptos-FR Kryptos-FR added the area-Launcher Stride Launcher label Dec 30, 2025
@Kryptos-FR
Kryptos-FR force-pushed the feature/launcher-avalonia-cherrypick branch 3 times, most recently from 7b72320 to 03f94a4 Compare December 30, 2025 18:49
/// Returns path of Launcher (we can't use Assembly.GetEntryAssembly().Location in .NET Core, especially with self-publish).
/// </summary>
/// <returns></returns>
internal static string? GetExecutablePath() => Environment.ProcessPath;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nitpick: Could this property not be used directly?

@Kryptos-FR Kryptos-FR Jan 5, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I just replaced code from the previous implementation to make it cross-platform without changing the overall structure. We could inline it manually.

On the other hand, the method name is a bit more explicit. It's likely inlined anyway by the compiler, so it's just a matter of preference.

}

// Avalonia configuration, don't remove; also used by visual designer.
public static AppBuilder BuildAvaloniaApp()

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nitpick: This method seems to be unused. It would be great to integrate with RunNewApp somehow

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's used by the Avalonia plugin. It's needed for the designer.

@Kryptos-FR
Kryptos-FR force-pushed the feature/launcher-avalonia-cherrypick branch from 03f94a4 to e96d938 Compare January 7, 2026 20:45
@Kryptos-FR

Kryptos-FR commented Jan 8, 2026

Copy link
Copy Markdown
Member Author

@Jklawreszuk I have merged back master to this PR's branch.

It's mostly working but it would be nice to also support (un-)installing the Stride packages on Linux even if we can't fully use it there yet.

Did you want to contribute to it? The branch is on this repo, so feel free to push commits if you want.

@Jklawreszuk

Jklawreszuk commented Jan 13, 2026

Copy link
Copy Markdown
Collaborator

I am sorry, but it took some time to review all the files.Overall, it looks great! A quite accurate implementation of the original Launcher. However, I have a few comments:

  • The ‘See release notes’ feature does not work - also an empty button is displayed. A hint that might be helpful - MarkdownScrollViewer.Markdown property is always null.
  • It would be nice to implement a custom title bar like in the original, but this can be done in a separate PR.

Other than that I didnt notice nothing unusual 😅

@Jklawreszuk

Copy link
Copy Markdown
Collaborator

@Kryptos-FR Once the changes have been merged, I will try to adapt Launcher to Linux if necessary. But I think that installing/uninstalling packages works correctly, no?

@Kryptos-FR

Copy link
Copy Markdown
Member Author

I don't remember if it does work. I assume since it's restoring packages it should.

I guess we'll know soon.

@Kryptos-FR
Kryptos-FR force-pushed the feature/launcher-avalonia-cherrypick branch from e96d938 to e161999 Compare April 7, 2026 20:55
@xen2
xen2 force-pushed the master branch 2 times, most recently from ab329f3 to 482bd28 Compare April 16, 2026 07:56
@Kryptos-FR
Kryptos-FR force-pushed the feature/launcher-avalonia-cherrypick branch from e161999 to 4950387 Compare April 21, 2026 15:19
@Kryptos-FR
Kryptos-FR marked this pull request as ready for review April 21, 2026 15:20
@Jklawreszuk

Copy link
Copy Markdown
Collaborator

@Kryptos-FR Have you tested it on Windows? It seems to work fine on Linux. They only issue I see is the empty button in the release notes page
image

@Kryptos-FR
Kryptos-FR force-pushed the feature/launcher-avalonia-cherrypick branch from 309b8af to 73d9945 Compare April 25, 2026 05:38
@Kryptos-FR

Copy link
Copy Markdown
Member Author

@Jklawreszuk I have also tested on Linux. I fixed a few minors issues, though the phantom button remains. There are now a few docmentation files about the launcher. If you can review them, that would be nice. One of the document is a tracker for this current porting effort and will be removed once all tasks are completed.

Comment thread .github/workflows/build-launcher.yml Outdated
@Kryptos-FR
Kryptos-FR force-pushed the feature/launcher-avalonia-cherrypick branch from f5ba39f to 9f482bb Compare April 27, 2026 21:22
@xen2

xen2 commented May 15, 2026

Copy link
Copy Markdown
Member

Looking at PR desc:

Still needs some love.

I wasn't sure, Is it ready for review or still WIP?
Otherwise, let me know when it is!

@Kryptos-FR

Copy link
Copy Markdown
Member Author

I would say, it is ready for review and testing on both Windows and Linux. I think I have one or two small fixes to push that I did on another branch.

@Jklawreszuk Jklawreszuk left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would say that LGTM! It's great that you added the documentation - it'll be useful to anyone who wants to revisit the code. As for the Launcher, I haven't noticed any significant visual glitches or anything like that.
What I tested on Linux:

  • Installing/Uninstalling multiple instances of GameStudio - works as intended
  • Including installing xenko versions - works ? (However, xenko is located in .../stride/sources/launcher/Stride.Launcher/bin/Debug/xenko/version/xenko.version.nupkg)
  • Clicking in all the urls, release notes - works

@Kryptos-FR

Copy link
Copy Markdown
Member Author

I'll admit I didn't try to install any Xenko versions. I'll look at it.

@Kryptos-FR

Copy link
Copy Markdown
Member Author

The right question should actually be: do we still want to include any older Xenko versions in the launcher? It's not open-source and very obsolete. cc @xen2

@xen2

xen2 commented May 24, 2026

Copy link
Copy Markdown
Member

I would say, not necessary anymore.
We can get rid of those last vestige from the codebase.

@Kryptos-FR

Copy link
Copy Markdown
Member Author

@xen2 I removed references to Xenko and updated the related documentation (under docs/launcher).

xen2 and others added 20 commits July 4, 2026 14:55
…n the test thread instead of inside the global log handler
…env workaround, deploy via solution config, remove no-op EmbeddedResource Update)
Regenerates shader C# (.sdsl keys / .sdfx effects) for pre-4.4 projects by
restoring the version-matched Stride.VisualStudio.Commands and calling it over
ServiceWire, the way the old VS Custom Tool did. 4.4+ generates it at build.

- New client-side ABI assembly Stride.VisualStudio.Commands.Interfaces so
  ServiceWire's assembly-qualified type keys match the released server.
- 4.0/4.1 spoke ServiceWire 5.3.4 (BinaryFormatter, no compression); read that
  handshake payload with System.Formats.Nrbf since BinaryFormatter is gone.
- Hidden command, listed under 'legacy'; RevealHiddenHelpAction restores --help.
Right-click a solution, project, or .sdsl/.sdfx file in Solution Explorer to
regenerate the shader C# for Stride 4.0-4.3 projects, delegating to the bundled
stride CLI (generate-legacy-shader-code). 4.4+ generates it at build.

Output streams live into a dialog while the CLI runs. Placed on the per-node
"…EXPLORE" context-menu groups (solution/project/item).
…e net8 out-of-process one

Remove the old net472 VSPackage implementation (StridePackage, StrideCommandsProxy,
NShader language service, classifiers, code generators, .vsct/.vsixmanifest) and its
obsolete integration tests, and promote the net8 VisualStudio.Extensibility extension
(built in parallel as Package.New) into its place as Stride.VisualStudio.Package.

Delivery is unchanged: PackageInstall still installs the vsix, and the nuspec/VSIXPlugin
still pack it as tools\Stride.vsix. The nuspec now sources the SDK-built vsix via a
$VsixPath$ token that VSIXPlugin fills from the project's $(OutputPath), so it tracks
$(Configuration)/$(TargetFramework) instead of hardcoding the bin subfolder.
Version the VS package and its delivery nuspec independently of the engine
(VersionPrefix 4.4.0, hand-bumped), with an optional prerelease VersionSuffix
wired through release-vspackage.yml and the nuget pack step; the .vsix manifest
version follows AssemblyVersion (numeric only, suffix stripped).

Fix PackageInstall to uninstall the current extension id (was the stale
Stride.VisualStudio.Package.2022), plus the legacy id for clean upgrades.
…sed)

Generate sdsl.tmLanguage.json from Stride's shader vocabulary (Reserved.cs) via a
.NET 10 file-based generator, so the coloring never drifts from the language.

Not wired into anything yet: the out-of-process extension can't register a TextMate
grammar (needs a classic pkgdef asset). Kept for a future VS Code extension / LSP
baseline; see syntaxes/README.md.
…fx highlighting

The out-of-process extension can't register a TextMate grammar (its generated
manifest can't carry the classic VsPackage/MefComponent assets VS needs). So a
small classic (net472) content-only companion VSIX does just that: it ships the
generated grammar + a companion .tmTheme + a language-configuration, registered via
a pkgdef, giving instant .sdsl/.sdfx coloring in VS.

The grammar and its generator move here from Stride.VisualStudio.Package/syntaxes.
Delivery packs both vsixes into the one NuGet package; PackageInstall installs both
in a single call and uninstalls both.
Modernize the Visual Studio extension (out-of-process) + SDSL syntax highlighting
@Kryptos-FR

Kryptos-FR commented Jul 5, 2026

Copy link
Copy Markdown
Member Author

@xen2 merged master and fixed the conflicts. I wondering if the Launcher should also be optionally installed through the Stride CLI (stride launcher install)? Or in other words, do we still need the custom installer?

@xen2

xen2 commented Jul 8, 2026

Copy link
Copy Markdown
Member

I wondering if the Launcher should also be optionally installed through the Stride CLI (stride launcher install)? Or in other words, do we still need the custom installer?

I was also hesitating about that.
I was thinking we still wanted a proper .msi installer with CLI and an uninstall entry? But not sure about it...

I think first we want to decide how we distribute the launcher in the future:

  • do we want launcher itself to become a dotnet tool?
  • if yes, what does the actual installer do? install a precompiled version in program files (better control over uninstall), or simply get it installed as global dotnet tool in default folder? or dotnet tool with custom location in program files?

@Ethereal77

Copy link
Copy Markdown
Contributor

Imo the Stride CLI is reasonable as a .NET tool, as it is going to be used by programmers used to work with the console. However, the launcher is more oriented towards the general public, and requiring someone that only wants to try Stride to go to the console to write commands is a barrier many people won't pass through.
For those people. the experience of an installer or a bootstrapper is more welcoming.

Another issue some people have (although it is minor imho) is that Stride is not "installed" in the usual sense, but downloaded and referenced from the NuGet cache. I've talked with several people that have used other engines and find this highly confusing (specially if they are not very versed in NuGet).

@xen2

xen2 commented Jul 17, 2026

Copy link
Copy Markdown
Member

👋 About this PR.

It was closed along with a batch of others during a master history rewrite on my side. Unlike most of them, this one is built on commits that the rewrite changed (an ffmpeg cleanup), so its branch has diverged from the current master and can't simply be restored.

If the change is still relevant, the way forward is to rebase onto the latest master and open a fresh PR (your code is intact). Sorry for the hassle! 🙏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-Launcher Stride Launcher

Projects

Status: Recreated - in review

Development

Successfully merging this pull request may close these issues.

7 participants