Cross-platform launcher and auto-updater for the MuMain game client. It keeps a player's client files in sync with a patch server over HTTP(S), then starts the client.
Preview of the default theme. Everything you see — colours, background, name, size — is configurable; see Branding.
- The launcher downloads a manifest (
version.json) from the patch server. The manifest lists every client file with its SHA-256 hash and size. - It compares each file against the local copy and downloads only what is new or changed, verifying the hash of every download.
- It launches the client — directly on Windows, via Wine on Linux.
The launcher never deletes local files; it only adds and updates. Files such as
config.ini, logs and caches are therefore left untouched.
On Linux the player chooses once, in the launcher, between the native client
(Main + .so, from version-linux.json) run directly and the Windows client
via Wine (from version.json). The two share their Data/ assets, so switching
re-downloads only the differing binaries. See the Player guide.
| Project | Role |
|---|---|
PatchManifest |
Console tool: scans a release directory and writes version.json. |
Launcher.Core |
UI-free core: manifest parsing, diffing, downloading, verification. |
Launcher.App |
Avalonia GUI: progress window and client launch. |
You only need Docker on the build machine (no local .NET SDK). For a Windows
host, use Docker Desktop and run build.sh from Git Bash/WSL.
# 1. Point the launcher at your patch host (one-time edit)
# src/Launcher.Core/LauncherConfig.cs → ManifestUrl, LauncherManifestUrl
# 2. (optional) Brand it — colours, background, name/logo, size
# src/Launcher.App/Branding/Branding.axaml + src/Launcher.App/Assets/
# 3. Build the launcher binaries (file name defaults to MumainLauncher;
# brand it per server with LAUNCHER_NAME, e.g. LAUNCHER_NAME=MyServer ./build.sh publish 2026.06.10)
./build.sh publish 2026.06.10
# 4. Take the binaries out of ./out/launcher/ (named after LAUNCHER_NAME)
# MumainLauncher.exe → Windows players
# MumainLauncher → Linux players
# launcher.json → upload to the patch host for self-update
# 5. Generate the client manifest over your built client and upload everything
./build.sh manifest --input /path/to/clientFull walkthrough: Building & extracting.
- Building & extracting — Docker setup, every
build.shcommand, where the output lands and which file to ship, plus a local test recipe. - Branding — change colours, background, fonts, a text title or logo, window size and the frame — all from one file.
- Releasing updates — admin workflow: patch URLs, publishing a client update, publishing a new launcher, server directory layout.
- Manifest format — reference for
version.json,version-linux.jsonandlauncher.json. - Player guide — how an end player installs and runs it.
- Troubleshooting — native client, Wine, Linux and packaging gotchas.
See docs/ROADMAP.md for status and optional future work.
MIT — see LICENSE. Use, modify and redistribute it freely; just keep the copyright and licence notice in copies and forks.
Original author: nolt.
