CubicLauncher es un launcher de Minecraft multiplataforma construido sobre Tauri v2 + SvelteKit (frontend) y Rust (backend nativo). Gestiona instancias aisladas de Minecraft con soporte para múltiples versiones, loaders de mods (Vanilla, Fabric, Forge, NeoForge), autenticación OAuth 2.0 (Microsoft) y Yggdrasil, y un sistema modular de crates Rust con caché binario.
| Capa | Tecnología |
|---|---|
| Shell nativo | Tauri v2 + Rust |
| Frontend | Svelte 5 + SvelteKit + TypeScript |
| Bundler | Vite 6 |
| Backend | Rust (edition 2024) |
| Runtime JS | Bun |
| Auth | OAuth 2.0 (Microsoft device-code), Yggdrasil, Cracked |
| Addons | Modrinth + CurseForge API |
| UI | Componentes nativos Svelte 5 (sin framework CSS) |
| Crate | Descripción |
|---|---|
| zellkern | Modelo de datos de Minecraft. Define manifiestos de versiones, resolución de librerías, classpath, perfiles de instalación de Forge, extracción de nativos y el enum Loader (Vanilla/Fabric/Forge/NeoForge/Quilt). Crate base del que dependen todos los demás. |
| aqua | Motor de descargas y gestor JRE. DownloadManager con tipos batch (MinecraftBatch, FabricBatch, ForgeBatch, GenericBatch), reporte de progreso, e instalación de JREs vía la API de Azul Zulu. |
| launchwerk | Orquestador de lanzamiento. Construye el comando completo (classpaths, JVM args, tokens de auth, env vars, quick-play), spawne el proceso Minecraft, maneja stdout/stderr via broadcast channels, y soporta auto-refresh de tokens Microsoft/Yggdrasil (con aes-gcm para cifrado en disco). |
| cubrinth | Soporte de modpacks. Parsea archivos .mrpack (Modrinth), resuelve dependencias e instala mods en directorios de instancia. |
| communicator | Discord Rich Presence. Implementa el protocolo Discord IPC para mostrar estado de juego ("Idle" / "Playing {instance}") en Discord. |
| ablage | Caché binario en disco. Formato custom con CRC32, escrituras atómicas (temp+rename+fsync), y un índice ordenado para búsquedas rápidas. Usado para cachear manifiestos de Mojang, versiones de Fabric/Forge y metadata de mods. |
El frontend se comunica con el backend mediante 77 Tauri Commands (IPC). El backend emite eventos via un event bus (app-event con 11 tipos de evento) que el frontend consume reactivamente.
| Módulo | Función |
|---|---|
commands/ |
12 módulos, ~77 comandos IPC: instance CRUD, launch/kill, mods, screenshots, download, auth, settings, themes, modrinth, forge, discord, java, log window |
services/ |
Lógica de negocio: SettingsManager (auto-save con debounce), Launcher (proceso Java), DownloadQueue (worker async con eventos de progreso), InstanceManager (CRUD + persistencia), JavaManager (JREs bundled 8/17/21/25), AddonManager (metadata de mods con caché 500 entries) |
core/ |
Infraestructura: PathManager (resolución de directorios ~/.cubic/), EventBus (wrapper de Tauri emit), HttpClient (reqwest singleton), errors/ (jerarquía de errores con serialización JSON para i18n: {"code":"ERROR_CODE","params":{...}}) |
theme_watcher/ |
File watcher (notify crate) del directorio de temas del usuario, emite ThemeChanged para edición en vivo |
| Módulo | Función |
|---|---|
api/cubicApi.ts |
Wrapper central de IPC. Todas las llamadas invoke() con error handling. Búsqueda de mods vía fetch() directo a Modrinth/CurseForge APIs (en el browser). |
api/launcherService.ts |
Hub de event listeners. Suscribe a app-event y actualiza launcherStore reactivamente. Helpers: getActiveUser(), saveSettings(), killInst(), deleteInst(). |
api/themeManager.ts |
Motor de temas. Carga temas vía IPC, aplica CSS custom properties, background images (lazy loading), font-face injection. |
state/state.svelte.ts |
Estado global reactivo con $state de Svelte 5. Un solo launcherStore con: instances, settings, notifications, update state. |
types/types.ts |
Tipos TypeScript compartidos: InstanceDto, Settings, MinecraftUser, AppEvent (discriminated union que espeja el enum Rust). |
i18n/ |
Internacionalización: es, en, de, fr. |
- Errores serializados: Todos los errores Rust se serializan como
{"code":"...", "params":{...}}para display i18n en el frontend viashowErrorParsed(). ablagecomo base de caché: Formato binario más eficiente que JSON para datasets grandes (manifiestos, versiones, metadata de mods).- Auth multi-cuenta: Microsoft OAuth (device-code flow), Yggdrasil (con authlib-injector), Cracked. Tokens encriptados en disco, auto-refresh antes del launch.
- Mod search en browser: Búsqueda de mods se hace directamente en el frontend; la descarga/instalación se delega a Rust via IPC.
- Forge + Java bump: Auto-detecta Forge >= 36.2.26 y bumpa Java 8 a Java 17 para compatibilidad con ModLauncher 8.1.3+.
- Log streaming: stdout/stderr capturado via
tokio::sync::broadcast, batcheado a 80ms, almacenado en ring buffers de 5000 líneas por instancia.
- Bun ≥ 1.x
- Rust ≥ 1.85 (edition 2024)
- Tauri CLI v2
git clone https://github.com/CubicLauncher/CubicLauncher.git
cd CubicLauncher
bun install| Comando | Descripción |
|---|---|
bun run dev |
Servidor de desarrollo Vite (solo frontend) |
bun run build |
Build de producción del frontend |
bun run check |
Type-check con svelte-check |
bun run tauri dev |
Entorno de desarrollo Tauri (frontend + Rust) |
bun run tauri build |
Build completo de la aplicación Tauri |
bun run tauri buildEl binario se genera en src-tauri/target/release/. Consulta la documentación oficial para builds específicos por plataforma.
Descargá solo el PKGBUILD y compilá (clona el repo automáticamente):
mkdir cubiclauncher-build && cd cubiclauncher-build
wget https://raw.githubusercontent.com/CubicLauncher/CubicLauncher/main/dist/arch/PKGBUILD
makepkg -si
⚠️ Compilar localmente es obligatorio. Los binarios de CI (Ubuntu) pueden no ser compatibles con Arch Linux por su modelo rolling release.
⚠️ Inestable — Revisádist/arch/IMPORTANTE.md.
| Plataforma | URL |
|---|---|
| Discord | https://discord.gg/7VaqSrPukm |
Distribuido bajo GNU General Public License v3.0.