# socialhummingbird/sts2-launcher-overhaul architecture

> Architecture diagram of the GitHub repository socialhummingbird/sts2-launcher-overhaul, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/socialhummingbird/sts2-launcher-overhaul
- Repository: https://github.com/socialhummingbird/sts2-launcher-overhaul

## Overview

StS2 Launcher is an Android app for downloading and launching a Steam-owned Slay the Spire 2 installation. The central workflow is Steam sign-in, game-version selection and installation, then launch; the app also supports Workshop mods, save synchronization, updates, and diagnostics. The graph shows the launcher’s controller/model/view layer, Android startup handoff, and game patching. Some capability paths are inferred from the tree and README; arrows are included only where the supplied index, excerpts, or README supports the relationship.

Main entry points: [`src/STS2Mobile/Launcher/LauncherController.cs`](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherController.cs) (UI controller), [`src/STS2Mobile/Launcher/LauncherView.cs`](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherView.cs) (Launcher UI), [`android/src/com/game/sts2launcher/LauncherActivity.java`](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/android/src/com/game/sts2launcher/LauncherActivity.java) (Launcher activity), [`android/src/com/game/sts2launcher/AndroidBootTransitionController.java`](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/android/src/com/game/sts2launcher/AndroidBootTransitionController.java) (Boot transition)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_android["Android startup"]
  node_activity["Launcher activity"]
  node_boot["Boot transition"]
  node_godot["Godot app<br/>[GodotApp.java]"]
end

subgraph group_launcher["Launcher workflow"]
  node_view["Launcher UI<br/>[LauncherView.cs]"]
  node_controller["UI controller"]
  node_model["Launcher model<br/>[LauncherModel.cs]"]
  node_session["Steam session"]
  node_download["Game downloads"]
  node_branches["Branch selection"]
  node_launch["Launch coordinator"]
  node_mods["Mod launch plan"]
  node_modstate["Mod selection"]
  node_modpresentation["Mod status"]
  node_savecontroller["Save controls"]
  node_updater["App updates"]
  node_diagnostics["Diagnostics"]
end

subgraph group_game["Game runtime"]
  node_startup["Game startup"]
  node_patches["Game patches"]
end

subgraph group_services["Steam and services"]
  node_workshop["Workshop sync"]
  node_savesync["Save sync<br/>[SaveSyncService.cs]"]
  node_steam["Steam services"]
  node_gamefiles[("Installed game files")]
end

node_user(("Player"))

node_user -->|"opens app"| node_activity
node_activity -->|"starts transition"| node_boot
node_boot -.->|"waits for readiness"| node_view
node_controller -->|"updates"| node_view
node_controller -->|"coordinates"| node_model
node_user -->|"chooses actions"| node_view
node_controller -->|"starts session"| node_session
node_session -->|"authenticates"| node_steam
node_controller -->|"coordinates downloads"| node_download
node_controller -->|"switches branches"| node_branches
node_download -->|"installs version"| node_gamefiles
node_branches -->|"selects version"| node_gamefiles
node_controller -->|"coordinates launch"| node_launch
node_launch -.->|"starts game"| node_startup
node_startup -->|"applies patches"| node_patches
node_controller -.->|"syncs subscriptions"| node_workshop
node_workshop -->|"fetches items"| node_steam
node_controller -->|"prepares mod launch"| node_mods
node_mods -->|"uses selection"| node_modstate
node_controller -->|"refreshes status"| node_modpresentation
node_savecontroller -->|"syncs saves"| node_savesync
node_savesync -->|"transfers saves"| node_steam
node_controller -->|"coordinates updates"| node_updater
node_updater -->|"checks releases"| node_steam
node_controller -->|"routes reports"| node_diagnostics
node_diagnostics -->|"presents report"| node_user

click node_activity "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/android/src/com/game/sts2launcher/LauncherActivity.java"
click node_boot "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/android/src/com/game/sts2launcher/AndroidBootTransitionController.java"
click node_godot "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/android/src/com/game/sts2launcher/GodotApp.java"
click node_view "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherView.cs"
click node_controller "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherController.cs"
click node_model "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherModel.cs"
click node_session "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherSessionCoordinator.cs"
click node_download "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherDownloadCoordinator.cs"
click node_branches "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherBranchSwitchCoordinator.cs"
click node_launch "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherLaunchCoordinator.cs"
click node_startup "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherStartupFlow.cs"
click node_patches "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Startup/StartupPatchOrchestrator.cs"
click node_workshop "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Steam/Workshop/SteamWorkshopSyncService.cs"
click node_mods "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherModLaunchPlan.cs"
click node_modstate "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherModSelectionState.cs"
click node_modpresentation "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherModsPresentation.cs"
click node_savecontroller "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherController.Saves.cs"
click node_savesync "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Steam/SaveSyncService.cs"
click node_updater "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherUpdateCoordinator.cs"
click node_diagnostics "https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherDiagnosticsCoordinator.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_activity,node_boot,node_godot toneBlue
class node_view,node_controller,node_model,node_session,node_download,node_branches,node_launch,node_mods,node_modstate,node_modpresentation,node_savecontroller,node_updater,node_diagnostics toneAmber
class node_startup,node_patches toneMint
class node_workshop,node_savesync,node_steam,node_gamefiles toneRose
class node_user toneIndigo
```

## Components

### Android startup

- [Launcher activity](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/android/src/com/game/sts2launcher/LauncherActivity.java): `android/src/com/game/sts2launcher/LauncherActivity.java`
- [Boot transition](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/android/src/com/game/sts2launcher/AndroidBootTransitionController.java): `android/src/com/game/sts2launcher/AndroidBootTransitionController.java`
- [Godot app](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/android/src/com/game/sts2launcher/GodotApp.java): `android/src/com/game/sts2launcher/GodotApp.java`

### Launcher workflow

- [Launcher UI](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherView.cs): `src/STS2Mobile/Launcher/LauncherView.cs`
- [UI controller](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherController.cs): `src/STS2Mobile/Launcher/LauncherController.cs`
- [Launcher model](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherModel.cs): `src/STS2Mobile/Launcher/LauncherModel.cs`
- [Steam session](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherSessionCoordinator.cs): `src/STS2Mobile/Launcher/LauncherSessionCoordinator.cs`
- [Game downloads](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherDownloadCoordinator.cs): `src/STS2Mobile/Launcher/LauncherDownloadCoordinator.cs`
- [Branch selection](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherBranchSwitchCoordinator.cs): `src/STS2Mobile/Launcher/LauncherBranchSwitchCoordinator.cs`
- [Launch coordinator](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherLaunchCoordinator.cs): `src/STS2Mobile/Launcher/LauncherLaunchCoordinator.cs`
- [Mod launch plan](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherModLaunchPlan.cs): `src/STS2Mobile/Launcher/LauncherModLaunchPlan.cs`
- [Mod selection](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherModSelectionState.cs): `src/STS2Mobile/Launcher/LauncherModSelectionState.cs`
- [Mod status](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherModsPresentation.cs): `src/STS2Mobile/Launcher/LauncherModsPresentation.cs`
- [Save controls](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherController.Saves.cs): `src/STS2Mobile/Launcher/LauncherController.Saves.cs`
- [App updates](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherUpdateCoordinator.cs): `src/STS2Mobile/Launcher/LauncherUpdateCoordinator.cs`
- [Diagnostics](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherDiagnosticsCoordinator.cs): `src/STS2Mobile/Launcher/LauncherDiagnosticsCoordinator.cs`

### Game runtime

- [Game startup](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Launcher/LauncherStartupFlow.cs): `src/STS2Mobile/Launcher/LauncherStartupFlow.cs`
- [Game patches](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Startup/StartupPatchOrchestrator.cs): `src/STS2Mobile/Startup/StartupPatchOrchestrator.cs`

### Steam and services

- [Workshop sync](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Steam/Workshop/SteamWorkshopSyncService.cs): `src/STS2Mobile/Steam/Workshop/SteamWorkshopSyncService.cs`
- [Save sync](https://github.com/socialhummingbird/sts2-launcher-overhaul/blob/main/src/STS2Mobile/Steam/SaveSyncService.cs): `src/STS2Mobile/Steam/SaveSyncService.cs`
- **Steam services**
- **Installed game files**

### Other components

- **Player**

## Connections

- Player → Launcher activity: opens app (evidence: `README.md`)
- Launcher activity → Boot transition: starts transition (evidence: `android/src/com/game/sts2launcher/AndroidBootTransitionController.java`)
- Boot transition → Launcher UI: waits for readiness
- UI controller → Launcher UI: updates (evidence: `src/STS2Mobile/Launcher/LauncherController.cs`)
- UI controller → Launcher model: coordinates (evidence: `src/STS2Mobile/Launcher/LauncherController.cs`)
- Player → Launcher UI: chooses actions (evidence: `README.md`)
- UI controller → Steam session: starts session (evidence: `src/STS2Mobile/Launcher/LauncherController.cs`)
- Steam session → Steam services: authenticates (evidence: `README.md`)
- UI controller → Game downloads: coordinates downloads (evidence: `src/STS2Mobile/Launcher/LauncherController.cs`)
- UI controller → Branch selection: switches branches (evidence: `src/STS2Mobile/Launcher/LauncherController.cs`)
- Game downloads → Installed game files: installs version (evidence: `README.md`)
- Branch selection → Installed game files: selects version (evidence: `README.md`)
- UI controller → Launch coordinator: coordinates launch (evidence: `src/STS2Mobile/Launcher/LauncherController.cs`)
- Launch coordinator → Game startup: starts game
- Game startup → Game patches: applies patches
- UI controller → Workshop sync: syncs subscriptions
- Workshop sync → Steam services: fetches items (evidence: `src/STS2Mobile/Steam/Workshop/SteamWorkshopSyncService.cs`)
- UI controller → Mod launch plan: prepares mod launch
- Mod launch plan → Mod selection: uses selection (evidence: `src/STS2Mobile/Launcher/LauncherModsPresentation.cs`)
- UI controller → Mod status: refreshes status (evidence: `src/STS2Mobile/Launcher/LauncherController.cs`)
- Save controls → Save sync: syncs saves (evidence: `src/STS2Mobile/Launcher/LauncherController.Saves.cs`)
- Save sync → Steam services: transfers saves (evidence: `README.md`)
- UI controller → App updates: coordinates updates (evidence: `src/STS2Mobile/Launcher/LauncherController.cs`)
- App updates → Steam services: checks releases (evidence: `README.md`)
- UI controller → Diagnostics: routes reports (evidence: `src/STS2Mobile/Launcher/LauncherController.cs`)
- Diagnostics → Player: presents report (evidence: `README.md`)
