Sobre el proyecto
itch es la aplicación de escritorio para jugar a juegos de itch.io. Su objetivo declarado es permitir a los usuarios descargar y ejecutar juegos, recibir notificaciones de actualizaciones y mantener los juegos actualizados, sin reemplazar el propio sitio web de itch.io.
Arquitectura
La aplicación es una aplicación Electron con un diseño multiproceso. El proceso principal (Node.js) gestiona el estado con Redux, la lógica de negocio y la coordinación con componentes complementarios; utiliza un patrón de "reactor" para los efectos secundarios de las acciones de Redux. El proceso de renderizado es una interfaz de usuario basada en React cuyo estado se sincroniza desde el proceso principal mediante electron-redux.
Dos componentes complementarios en Go la respaldan:
- butler: un daemon que gestiona las descargas, instalaciones, actualizaciones y el lanzamiento de juegos, mantiene una base de datos SQLite con datos de instalación y se comunica con la aplicación mediante RPC basado en TCP. Se lanza como proceso hijo vinculado al ciclo de vida de la aplicación.
- itch-setup: un ejecutable que gestiona la instalación inicial en todas las plataformas y administra las comprobaciones de autoactualización y los reinicios.
Gestión de versiones (broth)
La aplicación gestiona las versiones de butler y itch-setup mediante un sistema llamado broth, un servicio que actúa como proxy de la API de itch.io para proporcionar URL de descarga fijas para binarios y recursos. Los binarios se alojan en broth.itch.zone con identificadores de plataforma como linux-amd64, darwin-arm64 y windows-386. Localmente, las versiones se almacenan en un directorio broth (por ejemplo, ~/.config/itch/broth/ en Linux), con binarios extraídos, descargas temporales y un marcador .chosen-version.
La selección de versión utiliza restricciones semver definidas en src/main/broth/formulas.ts (butler ^15.20.0, itch-setup ^1.8.0). La aplicación consulta un endpoint /versions y elige la versión más reciente que cumpla la restricción; las compilaciones canary usan canales -head sin restricciones. Al iniciarse, valida la versión elegida, comprueba si hay nuevas versiones de componentes cuando la versión de la aplicación ha cambiado, descarga y extrae con verificación CRC32, ejecuta una comprobación de sanidad y luego actualiza el marcador y limpia las versiones antiguas. Una anulación de desarrollo (BROTH_USE_LOCAL=butler) permite usar un butler compilado localmente.
Enlaces de butlerd
La comunicación con butler utiliza un protocolo JSON-RPC 2.0 llamado butlerd. Las definiciones de TypeScript para solicitudes, notificaciones y tipos de datos se encuentran en src/common/butlerd/messages.ts y se generan automáticamente a partir de definiciones de tipos de Go mediante una herramienta llamada generous. El código generado depende del paquete npm @itchio/butlerd, que proporciona el entorno de ejecución para lanzar el daemon, conectarse por TCP e intercambiar mensajes JSON-RPC. Los enlaces se pueden regenerar con npm run sync-butler cuando el repositorio de butler está clonado como directorio hermano.
itch frente a kitch
El código base admite dos variantes: itch (estable) y kitch (canary), instalables en paralelo. La variante se determina por la etiqueta git en el momento de la compilación: una etiqueta que termina en -canary produce kitch; de lo contrario, itch. El desarrollo local siempre se ejecuta como kitch porque el nombre de package.json es "kitch" de forma predeterminada; el empaquetado de producción lo sobrescribe a "itch" para las compilaciones que no son canary. Las diferencias incluyen los protocolos de URL (itchio:// e itch:// frente a kitchio:// y kitch://), los canales de broth (normal frente a -head), las restricciones semver (presentes frente a ninguna), los identificadores de paquete de macOS, los iconos de bandeja/ventana y los nombres de artefactos.
Desarrollo y pruebas
El desarrollo requiere npm install y luego npm start para ejecutarse en modo de desarrollo con vigilancia y recompilación. Otros scripts incluyen npm run ts-check para la comprobación de tipos y npm run compile para compilar recursos. Las pruebas de integración utilizan ChromeDriver para controlar la aplicación Electron y ejercitar flujos como iniciar sesión, instalar juegos y navegar por la interfaz de usuario. Requieren Go (el ejecutor de pruebas está escrito en Go), un display (xvfb en CI de Linux) y una clave de API de itch.io de una cuenta de prueba. La versión de ChromeDriver debe coincidir con la versión de Electron; cuando la versión de Electron en package.json cambia, integration-tests/versions.go debe actualizarse en consecuencia. Las pruebas pueden ejecutarse contra una compilación empaquetada (npm run integration-tests) o la versión de desarrollo (node release/test.js --test-dev).
Licencia y proyectos relacionados
itch se publica bajo la Licencia MIT. El README también menciona Mitch, un cliente para Android iniciado por otros desarrolladores.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.