mirror of
https://github.com/dream-pep/koring-launcher.git
synced 2026-09-12 05:45:18 +08:00
2.1 KiB
2.1 KiB
koring-launcher
Minecraft launcher built with Tauri 2 + React 19 + TypeScript + Sidecar (Node.js/@xmcl).
Quick commands
pnpm tauri dev # full app dev (frontend + Rust + sidecar skip)
pnpm dev # frontend only (vite, port 1420)
cd sidecar && pnpm dev # sidecar dev (tsx)
Architecture
- Frontend (
src/): React 19 + Vite 7 + Tailwind v4 + shadcn/ui + Zustand stores - Backend (
src-tauri/): Rust/Tauri 2, manages sidecar process via stdin/stdout JSON - Sidecar (
sidecar/): Node.js/TypeScript, wraps @xmcl/* packages (MC install/launch/auth/mods) - IPC: Frontend →
invoke()→ Rust commands → sidecar stdin → sidecar stdout → Tauri events → Frontend
Key gotchas
- Sidecar binary required:
src-tauri/binaries/koring-sidecar-<target-triple>.exemust exist. In debug mode it's skipped automatically (#[cfg(debug_assertions)]inlib.rs:setup). - Sidecar compile:
cd sidecar && pnpm compile(requiresbun). Default target is ARM64 Windows. Usepnpm compile:x64for x86_64. - @xmcl packages are Node.js only:
@xmcl/core,@xmcl/installerrequirefs/child_process. Only@xmcl/user,@xmcl/modrinth,@xmcl/curseforgework in browser. - Path alias:
@/maps tosrc/(configured invite.config.tsandtsconfig.json). - Tauri commands: All Rust commands are in
src-tauri/src/commands/mod.rs. They forward to sidecar viaSidecarManager. - State management: Zustand stores in
src/stores/(install, auth, launch, mods, instance).
Build & bundle
pnpm tauri build # production build (requires sidecar binary in binaries/)
cd sidecar && pnpm compile # compile sidecar to exe first
The externalBin in tauri.conf.json expects binaries/koring-sidecar-<target-triple>.exe.
Rust notes
src-tauri/src/lib.rs: app entry, registers plugins and commandssrc-tauri/src/sidecar.rs:SidecarManager— spawns sidecar, reads stdout, emits Tauri eventssrc-tauri/src/commands/mod.rs: all#[tauri::command]handlersuuidcrate used for request IDs