# sirdiabo/githublauncher architecture

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

- Interactive diagram: https://gitdiagram.com/sirdiabo/githublauncher
- Repository: https://github.com/sirdiabo/githublauncher
- Video tour (about a minute): https://gitdiagram.com/sirdiabo/githublauncher/video

## Overview

Github Launcher is a desktop and command-line application for managing GitHub-hosted apps. Users browse a configured app library, check release status, download or update an app, then launch it; the launcher also supports uninstalling apps and updating itself. The GUI adds settings, app visibility and presentation controls, gamepad navigation, and desktop or Steam shortcuts. The README documents GitHub release integration and an editable apps.json catalog. Some links are omitted because excerpts are partial; the Core library’s internal behavior is not sampled.

Main entry points: [`Models/GameInfo.cs`](https://github.com/sirdiabo/githublauncher/blob/main/Models/GameInfo.cs) (App lifecycle), [`Services/GameManager.cs`](https://github.com/sirdiabo/githublauncher/blob/main/Services/GameManager.cs) (App catalog manager), [`MainWindow.axaml.cs`](https://github.com/sirdiabo/githublauncher/blob/main/MainWindow.axaml.cs) (Library interface), [`Services/CLIHandler.cs`](https://github.com/sirdiabo/githublauncher/blob/main/Services/CLIHandler.cs) (CLI commands)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User entry points"]
  node_program["Application entry<br/>[Program.cs]"]
  node_main_window["Library interface"]
  node_input_service["Gamepad navigation<br/>[InputService.cs]"]
  node_cli_handler["CLI commands<br/>[CLIHandler.cs]"]
end

subgraph group_catalog["App library"]
  node_game_manager["App catalog manager<br/>[GameManager.cs]"]
  node_game_info["App lifecycle<br/>[GameInfo.cs]"]
  node_core["GitHub core library"]
  node_settings["User settings<br/>[AppSettings.cs]"]
  node_config_files["Catalog and settings files"]
end

subgraph group_runtime["Install and launch"]
  node_app_files["Installed apps and cache"]
  node_shortcut_helper["Shortcut integration<br/>[ShortcutHelper.cs]"]
end

subgraph group_launcher["Launcher features"]
  node_app_runtime["Desktop application startup<br/>[App.axaml.cs]"]
  node_launcher_files["Launcher update files"]
end

node_gui_user(("Desktop user"))
node_cli_user(("CLI user"))
node_github{{"GitHub releases"}}
node_app_process["Launched app process"]
node_desktop_steam["Desktop and Steam"]

node_gui_user -->|"starts GUI"| node_program
node_cli_user -->|"runs command"| node_program
node_program -->|"starts desktop UI"| node_main_window
node_program -->|"dispatches CLI"| node_cli_handler
node_main_window -->|"manages library"| node_game_manager
node_main_window -->|"loads and saves"| node_settings
node_main_window -->|"handles navigation"| node_input_service
node_cli_handler -->|"uses catalog"| node_game_manager
node_game_manager -->|"reads and writes"| node_config_files
node_game_manager -->|"loads app entries"| node_game_info
node_game_manager -->|"initializes API cache"| node_core
node_game_manager -->|"checks app status"| node_game_info
node_game_info -->|"uses GitHub services"| node_core
node_game_info -->|"checks and downloads releases"| node_github
node_game_info -->|"installs and caches"| node_app_files
node_game_info -->|"launches app"| node_app_process
node_cli_handler -->|"performs app actions"| node_game_info
node_cli_handler -->|"checks launcher release"| node_github
node_main_window -->|"creates shortcuts"| node_shortcut_helper
node_shortcut_helper -->|"updates shortcuts"| node_desktop_steam
node_app_runtime -->|"checks and downloads updates"| node_github
node_app_runtime -->|"reads update token"| node_settings
node_app_runtime -->|"extracts and applies update"| node_launcher_files

click node_program "https://github.com/sirdiabo/githublauncher/blob/main/Program.cs"
click node_main_window "https://github.com/sirdiabo/githublauncher/blob/main/MainWindow.axaml.cs"
click node_input_service "https://github.com/sirdiabo/githublauncher/blob/main/Services/InputService.cs"
click node_cli_handler "https://github.com/sirdiabo/githublauncher/blob/main/Services/CLIHandler.cs"
click node_game_manager "https://github.com/sirdiabo/githublauncher/blob/main/Services/GameManager.cs"
click node_game_info "https://github.com/sirdiabo/githublauncher/blob/main/Models/GameInfo.cs"
click node_core "https://github.com/sirdiabo/githublauncher/blob/main/lib/GitHubLauncher.Core"
click node_settings "https://github.com/sirdiabo/githublauncher/blob/main/Services/AppSettings.cs"
click node_shortcut_helper "https://github.com/sirdiabo/githublauncher/blob/main/Services/ShortcutHelper.cs"
click node_app_runtime "https://github.com/sirdiabo/githublauncher/blob/main/App.axaml.cs"

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_program,node_main_window,node_input_service,node_cli_handler,node_gui_user,node_cli_user toneBlue
class node_game_manager,node_game_info,node_core,node_settings,node_config_files toneAmber
class node_app_files,node_shortcut_helper toneMint
class node_app_runtime,node_launcher_files toneRose
class node_github,node_app_process,node_desktop_steam toneIndigo
```

## Components

### User entry points

- [Application entry](https://github.com/sirdiabo/githublauncher/blob/main/Program.cs): `Program.cs`
- [Library interface](https://github.com/sirdiabo/githublauncher/blob/main/MainWindow.axaml.cs): `MainWindow.axaml.cs`
- [Gamepad navigation](https://github.com/sirdiabo/githublauncher/blob/main/Services/InputService.cs): `Services/InputService.cs`
- [CLI commands](https://github.com/sirdiabo/githublauncher/blob/main/Services/CLIHandler.cs): `Services/CLIHandler.cs`

### App library

- [App catalog manager](https://github.com/sirdiabo/githublauncher/blob/main/Services/GameManager.cs): `Services/GameManager.cs`
- [App lifecycle](https://github.com/sirdiabo/githublauncher/blob/main/Models/GameInfo.cs): `Models/GameInfo.cs`
- [GitHub core library](https://github.com/sirdiabo/githublauncher/blob/main/lib/GitHubLauncher.Core): `lib/GitHubLauncher.Core`
- [User settings](https://github.com/sirdiabo/githublauncher/blob/main/Services/AppSettings.cs): `Services/AppSettings.cs`
- **Catalog and settings files**

### Install and launch

- **Installed apps and cache**
- [Shortcut integration](https://github.com/sirdiabo/githublauncher/blob/main/Services/ShortcutHelper.cs): `Services/ShortcutHelper.cs`

### Launcher features

- [Desktop application startup](https://github.com/sirdiabo/githublauncher/blob/main/App.axaml.cs): `App.axaml.cs`
- **Launcher update files**

### Other components

- **Desktop user**
- **CLI user**
- **GitHub releases**
- **Launched app process**
- **Desktop and Steam**

## Connections

- Desktop user → Application entry: starts GUI
- CLI user → Application entry: runs command
- Application entry → Library interface: starts desktop UI
- Application entry → CLI commands: dispatches CLI
- Library interface → App catalog manager: manages library
- Library interface → User settings: loads and saves
- Library interface → Gamepad navigation: handles navigation
- CLI commands → App catalog manager: uses catalog
- App catalog manager → Catalog and settings files: reads and writes
- App catalog manager → App lifecycle: loads app entries
- App catalog manager → GitHub core library: initializes API cache
- App catalog manager → App lifecycle: checks app status
- App lifecycle → GitHub core library: uses GitHub services
- App lifecycle → GitHub releases: checks and downloads releases
- App lifecycle → Installed apps and cache: installs and caches
- App lifecycle → Launched app process: launches app
- CLI commands → App lifecycle: performs app actions
- CLI commands → GitHub releases: checks launcher release
- Library interface → Shortcut integration: creates shortcuts
- Shortcut integration → Desktop and Steam: updates shortcuts
- Desktop application startup → GitHub releases: checks and downloads updates
- Desktop application startup → User settings: reads update token
- Desktop application startup → Launcher update files: extracts and applies update
