# paulsenecal/applauncher architecture

> Architecture diagram of the GitHub repository paulsenecal/applauncher, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/paulsenecal/applauncher
- Repository: https://github.com/paulsenecal/applauncher

## Overview

A Qt desktop launcher that selects among games, checks authenticated per-game manifests, applies incremental updates, and launches installed games. The main workflow runs from catalog selection through update check and changelog review to staged download, installation, and launch. The README documents parallel downloads, integrity checks, offline launch, platform-specific paths, and external game links. Some wiring is based on README and headers because implementation excerpts are partial; uncertain internal calls are omitted.

Main entry points: [`src/core/GameManager.cpp`](https://github.com/paulsenecal/applauncher/blob/master/src/core/GameManager.cpp) (Game lifecycle), [`src/ui/MainWindow.cpp`](https://github.com/paulsenecal/applauncher/blob/master/src/ui/MainWindow.cpp) (Main window), [`src/core/NetworkClient.cpp`](https://github.com/paulsenecal/applauncher/blob/master/src/core/NetworkClient.cpp) (HTTP client), [`src/core/Catalog.cpp`](https://github.com/paulsenecal/applauncher/blob/master/src/core/Catalog.cpp) (Game catalog)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Launcher UI"]
  node_window["Main window<br/>[MainWindow.cpp]"]
  node_changelog["Changelog review"]
end

subgraph group_update["Update workflow"]
  node_manager["Game lifecycle<br/>[GameManager.cpp]"]
  node_manifest["Manifest and diff<br/>[GameManifest.cpp]"]
end

subgraph group_support["Core services"]
  node_catalog["Game catalog<br/>[Catalog.cpp]"]
  node_gameinfo["Game metadata<br/>[GameInfo.h]"]
  node_auth["HMAC verification"]
  node_network["HTTP client<br/>[NetworkClient.cpp]"]
  node_platform["Platform utilities<br/>[PlatformUtils.h]"]
end

subgraph group_runtime["Local runtime"]
  node_install[("Installed games<br/>[GameManager.cpp]")]
  node_staging[("Update staging<br/>[GameManager.cpp]")]
  node_game["Game process"]
end

node_player(("Player"))
node_updateserver["Static update host"]
node_externalpages["Game web pages"]

node_player -->|"selects game"| node_window
node_window -->|"fetches catalog"| node_catalog
node_catalog -->|"requests catalog"| node_network
node_network -->|"GET requests"| node_updateserver
node_catalog -->|"returns entries"| node_gameinfo
node_window -->|"checks update"| node_manager
node_manager -->|"fetches manifest"| node_network
node_manager -->|"verifies tag"| node_auth
node_manager -->|"parses and diffs"| node_manifest
node_manager -->|"reads local state"| node_install
node_window -->|"presents changes"| node_changelog
node_player -->|"approves update"| node_window
node_manager -->|"downloads files"| node_network
node_manager -->|"retrieves game files"| node_updateserver
node_manager -->|"writes verified files"| node_staging
node_manager -->|"swaps and prunes files"| node_install
node_manager -->|"resolves paths"| node_platform
node_manager -->|"starts executable"| node_game
node_manager -->|"locks during launch"| node_install
node_window -.->|"opens game links"| node_externalpages

click node_window "https://github.com/paulsenecal/applauncher/blob/master/src/ui/MainWindow.cpp"
click node_changelog "https://github.com/paulsenecal/applauncher/blob/master/src/ui/ChangelogDialog.cpp"
click node_catalog "https://github.com/paulsenecal/applauncher/blob/master/src/core/Catalog.cpp"
click node_gameinfo "https://github.com/paulsenecal/applauncher/blob/master/src/core/GameInfo.h"
click node_manager "https://github.com/paulsenecal/applauncher/blob/master/src/core/GameManager.cpp"
click node_manifest "https://github.com/paulsenecal/applauncher/blob/master/src/core/GameManifest.cpp"
click node_auth "https://github.com/paulsenecal/applauncher/blob/master/src/core/ManifestAuthenticator.cpp"
click node_network "https://github.com/paulsenecal/applauncher/blob/master/src/core/NetworkClient.cpp"
click node_platform "https://github.com/paulsenecal/applauncher/blob/master/src/core/PlatformUtils.h"
click node_install "https://github.com/paulsenecal/applauncher/blob/master/src/core/GameManager.cpp"
click node_staging "https://github.com/paulsenecal/applauncher/blob/master/src/core/GameManager.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_window,node_changelog toneBlue
class node_manager,node_manifest toneAmber
class node_catalog,node_gameinfo,node_auth,node_network,node_platform toneMint
class node_install,node_staging,node_game toneRose
class node_player,node_updateserver,node_externalpages toneIndigo
```

## Components

### Launcher UI

- [Main window](https://github.com/paulsenecal/applauncher/blob/master/src/ui/MainWindow.cpp): `src/ui/MainWindow.cpp`
- [Changelog review](https://github.com/paulsenecal/applauncher/blob/master/src/ui/ChangelogDialog.cpp): `src/ui/ChangelogDialog.cpp`

### Update workflow

- [Game lifecycle](https://github.com/paulsenecal/applauncher/blob/master/src/core/GameManager.cpp): `src/core/GameManager.cpp`
- [Manifest and diff](https://github.com/paulsenecal/applauncher/blob/master/src/core/GameManifest.cpp): `src/core/GameManifest.cpp`

### Core services

- [Game catalog](https://github.com/paulsenecal/applauncher/blob/master/src/core/Catalog.cpp): `src/core/Catalog.cpp`
- [Game metadata](https://github.com/paulsenecal/applauncher/blob/master/src/core/GameInfo.h): `src/core/GameInfo.h`
- [HMAC verification](https://github.com/paulsenecal/applauncher/blob/master/src/core/ManifestAuthenticator.cpp): `src/core/ManifestAuthenticator.cpp`
- [HTTP client](https://github.com/paulsenecal/applauncher/blob/master/src/core/NetworkClient.cpp): `src/core/NetworkClient.cpp`
- [Platform utilities](https://github.com/paulsenecal/applauncher/blob/master/src/core/PlatformUtils.h): `src/core/PlatformUtils.h`

### Local runtime

- [Installed games](https://github.com/paulsenecal/applauncher/blob/master/src/core/GameManager.cpp): `src/core/GameManager.cpp`
- [Update staging](https://github.com/paulsenecal/applauncher/blob/master/src/core/GameManager.cpp): `src/core/GameManager.cpp`
- **Game process**

### Other components

- **Player**
- **Static update host**
- **Game web pages**

## Connections

- Player → Main window: selects game
- Main window → Game catalog: fetches catalog
- Game catalog → HTTP client: requests catalog
- HTTP client → Static update host: GET requests
- Game catalog → Game metadata: returns entries
- Main window → Game lifecycle: checks update
- Game lifecycle → HTTP client: fetches manifest
- Game lifecycle → HMAC verification: verifies tag
- Game lifecycle → Manifest and diff: parses and diffs
- Game lifecycle → Installed games: reads local state
- Main window → Changelog review: presents changes
- Player → Main window: approves update
- Game lifecycle → HTTP client: downloads files
- Game lifecycle → Static update host: retrieves game files
- Game lifecycle → Update staging: writes verified files
- Game lifecycle → Installed games: swaps and prunes files
- Game lifecycle → Platform utilities: resolves paths
- Game lifecycle → Game process: starts executable
- Game lifecycle → Installed games: locks during launch
- Main window → Game web pages: opens game links
