# manewreck/sda-plus-plus architecture

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

- Interactive diagram: https://gitdiagram.com/manewreck/sda-plus-plus
- Repository: https://github.com/manewreck/sda-plus-plus
- Video tour (about a minute): https://gitdiagram.com/manewreck/sda-plus-plus/video

## Overview

SDA++ is a Windows desktop Steam Guard authenticator and account manager. Users load or import accounts, then manage rotating codes, sessions, confirmations, QR login, and account-wide monitoring from the desktop UI. Separate workflows synchronize account files and credentials, restore validated cloud data, and pair with the mobile app. SteamAuth provides the underlying Steam session and authenticator operations. README documents several capabilities whose detailed implementation was not sampled; those are represented at their known module paths, with only documented or evident connections shown.

Main entry points: [`open-source/Steam Desktop Authenticator/MainForm.cs`](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/MainForm.cs) (Main account UI), [`open-source/Steam Desktop Authenticator/Program.cs`](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/Program.cs) (Application startup), [`open-source/lib/SteamAuth/SteamAuth/SteamWeb.cs`](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/lib/SteamAuth/SteamAuth/SteamWeb.cs) (Steam session client), [`open-source/Steam Desktop Authenticator/SilentAccountAuthenticator.cs`](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/SilentAccountAuthenticator.cs) (Session recovery)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop experience"]
  node_program["Application startup<br/>[Program.cs]"]
  node_welcome["First-run setup<br/>[WelcomeForm.cs]"]
  node_main["Main account UI<br/>[MainForm.cs]"]
  node_settings["Settings UI<br/>[SettingsForm.cs]"]
  node_updater["Release update check"]
end

subgraph group_accounts["Account workflows"]
  node_monitor["Account monitoring"]
  node_qrlogin["QR login"]
  node_authenticator["Steam Guard accounts"]
  node_confirmations["Trade confirmations<br/>[Confirmation.cs]"]
  node_recovery["Session recovery"]
  node_credentials["Credentials vault<br/>[FileEncryptor.cs]"]
  node_manifest[("Account manifest<br/>[Manifest.cs]")]
end

subgraph group_cloud["Cloud and pairing"]
  node_cloudsync["Cloud restore and sync"]
  node_providers["Cloud storage providers"]
  node_webdav["WebDAV synchronization"]
  node_pairingflow["Mobile pairing workflow"]
  node_pairing["Local and relay pairing"]
end

subgraph group_steam["Steam integration"]
  node_steamlib["Steam session client<br/>[SteamWeb.cs]"]
  node_session["Session data<br/>[SessionData.cs]"]
end

node_user(("Desktop user"))
node_mobile(("SDA++ Mobile"))
node_relay["HTTPS pairing relay"]
node_steamweb["Steam web services"]
node_github["GitHub releases"]

node_user -->|"launches"| node_program
node_program -->|"loads"| node_manifest
node_program -->|"opens first run"| node_welcome
node_program -->|"opens account UI"| node_main
node_user -->|"manages accounts"| node_main
node_main -->|"shows codes"| node_authenticator
node_main -->|"starts QR login"| node_qrlogin
node_main -->|"opens monitoring"| node_monitor
node_main -->|"opens confirmations"| node_confirmations
node_main -->|"starts recovery"| node_recovery
node_recovery -->|"reads credentials"| node_credentials
node_main -->|"starts cloud pull"| node_cloudsync
node_cloudsync -->|"transfers files"| node_providers
node_cloudsync -->|"validates and commits"| node_manifest
node_settings -->|"configures sync"| node_webdav
node_webdav -->|"uses storage"| node_providers
node_main -->|"starts pairing"| node_pairingflow
node_pairingflow -->|"creates session"| node_pairing
node_pairing -->|"exchanges encrypted data"| node_mobile
node_pairing -.->|"falls back to relay"| node_relay
node_monitor -->|"reads public data"| node_steamweb
node_qrlogin -->|"authenticates QR session"| node_steamweb
node_authenticator -->|"uses Steam operations"| node_steamlib
node_confirmations -->|"loads confirmations"| node_steamlib
node_recovery -->|"restores sessions"| node_steamlib
node_steamlib -->|"maintains tokens"| node_session
node_steamlib -->|"sends Steam requests"| node_steamweb
node_program -->|"starts checks"| node_updater
node_updater -->|"checks releases"| node_github

click node_program "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/Program.cs"
click node_welcome "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/WelcomeForm.cs"
click node_main "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/MainForm.cs"
click node_settings "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/SettingsForm.cs"
click node_monitor "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/AccountMonitoringService.cs"
click node_qrlogin "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/SteamQrLoginService.cs"
click node_authenticator "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/lib/SteamAuth/SteamAuth/SteamGuardAccount.cs"
click node_confirmations "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/lib/SteamAuth/SteamAuth/Confirmation.cs"
click node_recovery "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/SilentAccountAuthenticator.cs"
click node_credentials "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/FileEncryptor.cs"
click node_manifest "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/Manifest.cs"
click node_cloudsync "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/CloudSyncService.cs"
click node_providers "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/CloudStorageProviders.cs"
click node_webdav "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/WebDavSyncService.cs"
click node_pairingflow "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/CloudPairingWorkflow.cs"
click node_pairing "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/LocalCloudPairingService.cs"
click node_steamlib "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/lib/SteamAuth/SteamAuth/SteamWeb.cs"
click node_session "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/lib/SteamAuth/SteamAuth/SessionData.cs"
click node_updater "https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/UpdateCheckService.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_welcome,node_main,node_settings,node_updater,node_user toneBlue
class node_monitor,node_qrlogin,node_authenticator,node_confirmations,node_recovery,node_credentials,node_manifest toneAmber
class node_cloudsync,node_providers,node_webdav,node_pairingflow,node_pairing toneMint
class node_steamlib,node_session toneRose
class node_mobile,node_relay,node_steamweb,node_github toneIndigo
```

## Components

### Desktop experience

- [Application startup](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/Program.cs): `open-source/Steam Desktop Authenticator/Program.cs`
- [First-run setup](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/WelcomeForm.cs): `open-source/Steam Desktop Authenticator/WelcomeForm.cs`
- [Main account UI](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/MainForm.cs): `open-source/Steam Desktop Authenticator/MainForm.cs`
- [Settings UI](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/SettingsForm.cs): `open-source/Steam Desktop Authenticator/SettingsForm.cs`
- [Release update check](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/UpdateCheckService.cs): `open-source/Steam Desktop Authenticator/UpdateCheckService.cs`

### Account workflows

- [Account monitoring](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/AccountMonitoringService.cs): `open-source/Steam Desktop Authenticator/AccountMonitoringService.cs`
- [QR login](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/SteamQrLoginService.cs): `open-source/Steam Desktop Authenticator/SteamQrLoginService.cs`
- [Steam Guard accounts](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/lib/SteamAuth/SteamAuth/SteamGuardAccount.cs): `open-source/lib/SteamAuth/SteamAuth/SteamGuardAccount.cs`
- [Trade confirmations](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/lib/SteamAuth/SteamAuth/Confirmation.cs): `open-source/lib/SteamAuth/SteamAuth/Confirmation.cs`
- [Session recovery](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/SilentAccountAuthenticator.cs): `open-source/Steam Desktop Authenticator/SilentAccountAuthenticator.cs`
- [Credentials vault](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/FileEncryptor.cs): `open-source/Steam Desktop Authenticator/FileEncryptor.cs`
- [Account manifest](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/Manifest.cs): `open-source/Steam Desktop Authenticator/Manifest.cs`

### Cloud and pairing

- [Cloud restore and sync](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/CloudSyncService.cs): `open-source/Steam Desktop Authenticator/CloudSyncService.cs`
- [Cloud storage providers](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/CloudStorageProviders.cs): `open-source/Steam Desktop Authenticator/CloudStorageProviders.cs`
- [WebDAV synchronization](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/WebDavSyncService.cs): `open-source/Steam Desktop Authenticator/WebDavSyncService.cs`
- [Mobile pairing workflow](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/CloudPairingWorkflow.cs): `open-source/Steam Desktop Authenticator/CloudPairingWorkflow.cs`
- [Local and relay pairing](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/Steam%20Desktop%20Authenticator/LocalCloudPairingService.cs): `open-source/Steam Desktop Authenticator/LocalCloudPairingService.cs`

### Steam integration

- [Steam session client](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/lib/SteamAuth/SteamAuth/SteamWeb.cs): `open-source/lib/SteamAuth/SteamAuth/SteamWeb.cs`
- [Session data](https://github.com/manewreck/sda-plus-plus/blob/main/open-source/lib/SteamAuth/SteamAuth/SessionData.cs): `open-source/lib/SteamAuth/SteamAuth/SessionData.cs`

### Other components

- **Desktop user**
- **SDA++ Mobile**
- **HTTPS pairing relay**
- **Steam web services**
- **GitHub releases**

## Connections

- Desktop user → Application startup: launches
- Application startup → Account manifest: loads
- Application startup → First-run setup: opens first run
- Application startup → Main account UI: opens account UI
- Desktop user → Main account UI: manages accounts
- Main account UI → Steam Guard accounts: shows codes
- Main account UI → QR login: starts QR login
- Main account UI → Account monitoring: opens monitoring
- Main account UI → Trade confirmations: opens confirmations
- Main account UI → Session recovery: starts recovery
- Session recovery → Credentials vault: reads credentials
- Main account UI → Cloud restore and sync: starts cloud pull
- Cloud restore and sync → Cloud storage providers: transfers files
- Cloud restore and sync → Account manifest: validates and commits
- Settings UI → WebDAV synchronization: configures sync
- WebDAV synchronization → Cloud storage providers: uses storage
- Main account UI → Mobile pairing workflow: starts pairing
- Mobile pairing workflow → Local and relay pairing: creates session
- Local and relay pairing → SDA++ Mobile: exchanges encrypted data
- Local and relay pairing → HTTPS pairing relay: falls back to relay
- Account monitoring → Steam web services: reads public data
- QR login → Steam web services: authenticates QR session
- Steam Guard accounts → Steam session client: uses Steam operations
- Trade confirmations → Steam session client: loads confirmations
- Session recovery → Steam session client: restores sessions
- Steam session client → Session data: maintains tokens
- Steam session client → Steam web services: sends Steam requests
- Application startup → Release update check: starts checks
- Release update check → GitHub releases: checks releases
