You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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.
Arquitectura
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.
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
Frontend
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.
Decisiones clave
Errores serializados: Todos los errores Rust se serializan como {"code":"...", "params":{...}} para display i18n en el frontend via showErrorParsed().
ablage como 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.