Add Tauri launcher with Svelte UI

- Accounts: panel login/sign-up, Microsoft device-code sign-in, offline
  play; tokens encrypted with a key kept in the OS credential store
- Home: instance rail, live server status, news feed, social links,
  Play button with download progress, speed and ETA
- Full settings: accounts, memory/resolution/after-launch behaviour,
  Java and GC presets, Minecraft keybind editor applied to options.txt,
  theme overrides, storage manager, self-update via GitHub releases
- Game console, crash dialog with hints, per-instance overrides
- Live admin branding (colours, fonts, backgrounds, custom CSS)
- Online install tests for vanilla/Fabric/Quilt/Forge/NeoForge (CI)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ARcGWxLx21FwXJ3yfGriS
This commit is contained in:
Claude committed 2026-09-28 05:00:30 +00:00
1 parent af9147ec75
commit 50eb1a0cac
60 files changed
+9424 -47

No files matched your search

+6 -5
View File
@@ -268,7 +268,10 @@ fn write_argfile(path: &Path, args: &[String]) -> Result<()> {
Ok(())
}
pub fn spawn(cmd: &Command, java_major: u32) -> Result<tokio::process::Child> {
/// Start the game. With `capture` the game's stdout/stderr are piped back to
/// us (for the console); without it they're discarded, which is required
/// when the launcher exits while the game keeps running.
pub fn spawn(cmd: &Command, java_major: u32, capture: bool) -> Result<tokio::process::Child> {
std::fs::create_dir_all(&cmd.cwd)?;
let mut proc = tokio::process::Command::new(&cmd.java);
let total_len: usize = cmd.args.iter().map(|a| a.len() + 3).sum();
@@ -280,10 +283,8 @@ pub fn spawn(cmd: &Command, java_major: u32) -> Result<tokio::process::Child> {
} else {
proc.args(&cmd.args);
}
proc.current_dir(&cmd.cwd)
.stdin(std::process::Stdio::null())
.stdout(std::process::Stdio::piped())
.stderr(std::process::Stdio::piped());
let out = || if capture { std::process::Stdio::piped() } else { std::process::Stdio::null() };
proc.current_dir(&cmd.cwd).stdin(std::process::Stdio::null()).stdout(out()).stderr(out());
#[cfg(windows)]
proc.creation_flags(0x0800_0000);
proc.spawn().with_context(|| format!("starting {}", cmd.java.display()))