初始化

This commit is contained in:
2026-06-19 23:50:40 +08:00
commit 8ce58263be
99 changed files with 13996 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
# koring-launcher
Minecraft launcher built with Tauri 2 + React 19 + TypeScript + Sidecar (Node.js/@xmcl).
## Quick commands
```bash
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>.exe` must exist. In debug mode it's skipped automatically (`#[cfg(debug_assertions)]` in `lib.rs:setup`).
- **Sidecar compile**: `cd sidecar && pnpm compile` (requires `bun`). Default target is ARM64 Windows. Use `pnpm compile:x64` for x86_64.
- **@xmcl packages are Node.js only**: `@xmcl/core`, `@xmcl/installer` require `fs`/`child_process`. Only `@xmcl/user`, `@xmcl/modrinth`, `@xmcl/curseforge` work in browser.
- **Path alias**: `@/` maps to `src/` (configured in `vite.config.ts` and `tsconfig.json`).
- **Tauri commands**: All Rust commands are in `src-tauri/src/commands/mod.rs`. They forward to sidecar via `SidecarManager`.
- **State management**: Zustand stores in `src/stores/` (install, auth, launch, mods, instance).
## Build & bundle
```bash
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 commands
- `src-tauri/src/sidecar.rs`: `SidecarManager` — spawns sidecar, reads stdout, emits Tauri events
- `src-tauri/src/commands/mod.rs`: all `#[tauri::command]` handlers
- `uuid` crate used for request IDs