Files

2.2 KiB

Main Process Architecture

This document breaks down how the Electron main process is structured and what happens when the app launches.

Startup Flow

When a user opens Scoreko, the app goes through a precise sequence to ensure NodeCG starts reliably:

  1. Configuration: src/main/main.ts kicks things off by loading appConfig via config/runtime-config.ts.
  2. Runtime Provisioning: The app checks the user's AppData directory. If the packaged NodeCG runtime is missing or outdated, it extracts a fresh copy (nodecg/runtime-provisioner.ts).
  3. Window Creation: The initial windows (like the loading screen) are instantiated via windows/window-factory.ts.
  4. NodeCG Boot: nodecg/process-manager.ts spawns the NodeCG process in the background.
  5. Readiness Check: The app continuously polls NodeCG until the HTTP server responds. Once ready, it transitions the UI from the loading screen to the main dashboard.
  6. Update Check: If updates are enabled, the app checks the configured Gitea endpoint in the background to see if a newer version is available.
  7. Graceful Shutdown: When the user closes the app, it triggers a unified teardown sequence to cleanly kill the NodeCG child process, preventing zombie processes from lingering in the background.

Core Modules

Here is where the heavy lifting happens:

  • config/runtime-config.ts: Handles environment variables and defaults.
  • nodecg/runtime-provisioner.ts: Manages copying the NodeCG runtime out of the read-only Electron package into the writable user data folder.
  • nodecg/process-manager.ts: Handles starting, polling, and killing the NodeCG server. It also validates ports and permissions before launching.
  • updates/update-manager.ts: Coordinates the Gitea update flow (checking versions, downloading installers, prompting the user).
  • windows/window-factory.ts: Centralizes window configuration and security defaults.
  • windows/navigation-security.ts: Intercepts navigation events to block unauthorized domains and safely hand off external links (like docs or emails) to the user's default browser.
  • errors/error-presenter.ts & errors/logger.ts: Manages structured logging (electron-log) and displaying the fallback error screen if boot fails.