# guillaume-wlt/minecraft-launcher architecture

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

- Interactive diagram: https://gitdiagram.com/guillaume-wlt/minecraft-launcher
- Repository: https://github.com/guillaume-wlt/minecraft-launcher

## Overview

This is a Swing Minecraft launcher whose main workflow is: initialize launcher state, fetch Mojang version metadata, let the user choose a version and username, download and interpret the selected game’s client, libraries, assets and Java runtime, prepare native libraries/classpath, then start Minecraft. The README documents these workflow phases and the GUI, settings, console and media-background capabilities. Several detailed download/interpret steps are represented by their source directories because their individual implementations were not sampled; edges reflect documented sequencing or shown calls.

Main entry points: [`src/main/java/fr/guillaumewlt/workflow/WorkflowRunner.java`](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/workflow/WorkflowRunner.java) (Workflow runner), [`src/main/java/fr/guillaumewlt/processing/interpret/InterpretVersionJSONProcess.java`](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/interpret/InterpretVersionJSONProcess.java) (Version interpretation), [`src/main/java/fr/guillaumewlt/ui/eventhandler/ButtonsListener.java`](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/ui/eventhandler/ButtonsListener.java) (User actions), [`src/main/java/fr/guillaumewlt/processing/steps/StartingClientProcess.java`](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/steps/StartingClientProcess.java) (Minecraft process)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Launcher interface"]
  node_ui["Main launcher UI<br/>[MainWindow.java]"]
  node_buttons["User actions"]
  node_background["Video background"]
  node_console["Launcher console<br/>[ConsoleWindow.java]"]
  node_settings["Settings window"]
  node_settingsparser["Settings persistence"]
end

subgraph group_workflow["Workflow control"]
  node_main["Application entry<br/>[Main.java]"]
  node_runner["Workflow runner"]
  node_context["Launcher context"]
  node_processes["Process base<br/>[Processes.java]"]
  node_init["Initialization steps<br/>[InitProcess.java]"]
end

subgraph group_metadata["Metadata and downloads"]
  node_metadata["Version metadata"]
  node_version["Version interpretation"]
  node_client["Client JAR"]
  node_libraries["Libraries"]
  node_assets["Game assets"]
  node_runtime["Java runtime"]
  node_download["Verified download engine"]
end

subgraph group_launch["Game preparation and launch"]
  node_natives["Native extraction"]
  node_classpath["Classpath assembly"]
  node_start["Minecraft process"]
end

node_user(("Player"))
node_mojang["Mojang API"]
node_game["Minecraft client"]

node_user -->|"uses"| node_ui
node_ui -.->|"registers actions"| node_buttons
node_buttons -->|"updates selection"| node_context
node_buttons -->|"releases workflow"| node_runner
node_main -->|"starts"| node_runner
node_runner -->|"runs steps"| node_init
node_runner -->|"runs phase"| node_metadata
node_metadata -->|"fetches manifest"| node_mojang
node_runner -->|"shows selection UI"| node_ui
node_runner -->|"runs selected-version phase"| node_version
node_version -->|"precedes download"| node_client
node_version -->|"interprets and downloads"| node_libraries
node_version -->|"interprets and downloads"| node_assets
node_version -->|"resolves and downloads"| node_runtime
node_client -->|"uses"| node_download
node_assets -->|"uses"| node_download
node_runner -->|"runs preparation"| node_natives
node_runner -->|"runs preparation"| node_classpath
node_runner -->|"launches client step"| node_start
node_start -->|"starts process"| node_game
node_start -->|"redirects game output"| node_console
node_settings -->|"reads settings"| node_settingsparser
node_background -->|"loads settings"| node_settingsparser
node_background -->|"shares controls"| node_buttons
node_runner -.->|"shares workflow state"| node_context
node_processes -->|"holds reference"| node_context

click node_main "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/Main.java"
click node_runner "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/workflow/WorkflowRunner.java"
click node_context "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/workflow/LauncherContext.java"
click node_processes "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/Processes.java"
click node_init "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/steps/InitProcess.java"
click node_ui "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/ui/MainWindow.java"
click node_buttons "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/ui/eventhandler/ButtonsListener.java"
click node_background "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/ui/panels/BackgroundPanel.java"
click node_console "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/ui/windows/ConsoleWindow.java"
click node_settings "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/ui/windows/SettingsWindow.java"
click node_settingsparser "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/parser/SettingsJSONParser.java"
click node_metadata "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/download/DownloadManifestProcess.java"
click node_version "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/interpret/InterpretVersionJSONProcess.java"
click node_client "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/download/DownloadClientJarProcess.java"
click node_libraries "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/download/DownloadLibrariesProcess.java"
click node_assets "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/download/DownloadClientAssetsProcess.java"
click node_runtime "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/download/DownloadJREFilesProcess.java"
click node_download "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/download/DownloadProcess.java"
click node_natives "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/extractor/NativesLibsExtract.java"
click node_classpath "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/steps/ClassPathBuildingProcess.java"
click node_start "https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/steps/StartingClientProcess.java"

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_ui,node_buttons,node_background,node_console,node_settings,node_settingsparser,node_game toneBlue
class node_main,node_runner,node_context,node_processes,node_init toneAmber
class node_metadata,node_version,node_client,node_libraries,node_assets,node_runtime,node_download,node_mojang toneMint
class node_natives,node_classpath,node_start toneRose
class node_user toneIndigo
```

## Components

### Launcher interface

- [Main launcher UI](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/ui/MainWindow.java): `src/main/java/fr/guillaumewlt/ui/MainWindow.java`
- [User actions](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/ui/eventhandler/ButtonsListener.java): `src/main/java/fr/guillaumewlt/ui/eventhandler/ButtonsListener.java`
- [Video background](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/ui/panels/BackgroundPanel.java): `src/main/java/fr/guillaumewlt/ui/panels/BackgroundPanel.java`
- [Launcher console](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/ui/windows/ConsoleWindow.java): `src/main/java/fr/guillaumewlt/ui/windows/ConsoleWindow.java`
- [Settings window](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/ui/windows/SettingsWindow.java): `src/main/java/fr/guillaumewlt/ui/windows/SettingsWindow.java`
- [Settings persistence](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/parser/SettingsJSONParser.java): `src/main/java/fr/guillaumewlt/parser/SettingsJSONParser.java`

### Workflow control

- [Application entry](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/Main.java): `src/main/java/fr/guillaumewlt/Main.java`
- [Workflow runner](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/workflow/WorkflowRunner.java): `src/main/java/fr/guillaumewlt/workflow/WorkflowRunner.java`
- [Launcher context](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/workflow/LauncherContext.java): `src/main/java/fr/guillaumewlt/workflow/LauncherContext.java`
- [Process base](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/Processes.java): `src/main/java/fr/guillaumewlt/processing/Processes.java`
- [Initialization steps](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/steps/InitProcess.java): `src/main/java/fr/guillaumewlt/processing/steps/InitProcess.java`

### Metadata and downloads

- [Version metadata](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/download/DownloadManifestProcess.java): `src/main/java/fr/guillaumewlt/processing/download/DownloadManifestProcess.java`
- [Version interpretation](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/interpret/InterpretVersionJSONProcess.java): `src/main/java/fr/guillaumewlt/processing/interpret/InterpretVersionJSONProcess.java`
- [Client JAR](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/download/DownloadClientJarProcess.java): `src/main/java/fr/guillaumewlt/processing/download/DownloadClientJarProcess.java`
- [Libraries](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/download/DownloadLibrariesProcess.java): `src/main/java/fr/guillaumewlt/processing/download/DownloadLibrariesProcess.java`
- [Game assets](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/download/DownloadClientAssetsProcess.java): `src/main/java/fr/guillaumewlt/processing/download/DownloadClientAssetsProcess.java`
- [Java runtime](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/download/DownloadJREFilesProcess.java): `src/main/java/fr/guillaumewlt/processing/download/DownloadJREFilesProcess.java`
- [Verified download engine](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/download/DownloadProcess.java): `src/main/java/fr/guillaumewlt/download/DownloadProcess.java`

### Game preparation and launch

- [Native extraction](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/extractor/NativesLibsExtract.java): `src/main/java/fr/guillaumewlt/extractor/NativesLibsExtract.java`
- [Classpath assembly](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/steps/ClassPathBuildingProcess.java): `src/main/java/fr/guillaumewlt/processing/steps/ClassPathBuildingProcess.java`
- [Minecraft process](https://github.com/guillaume-wlt/minecraft-launcher/blob/master/src/main/java/fr/guillaumewlt/processing/steps/StartingClientProcess.java): `src/main/java/fr/guillaumewlt/processing/steps/StartingClientProcess.java`

### Other components

- **Player**
- **Mojang API**
- **Minecraft client**

## Connections

- Player → Main launcher UI: uses
- Main launcher UI → User actions: registers actions
- User actions → Launcher context: updates selection (evidence: `src/main/java/fr/guillaumewlt/ui/eventhandler/ButtonsListener.java`)
- User actions → Workflow runner: releases workflow (evidence: `src/main/java/fr/guillaumewlt/ui/eventhandler/ButtonsListener.java`)
- Application entry → Workflow runner: starts (evidence: `src/main/java/fr/guillaumewlt/Main.java`)
- Workflow runner → Initialization steps: runs steps
- Workflow runner → Version metadata: runs phase
- Version metadata → Mojang API: fetches manifest
- Workflow runner → Main launcher UI: shows selection UI
- Workflow runner → Version interpretation: runs selected-version phase
- Version interpretation → Client JAR: precedes download
- Version interpretation → Libraries: interprets and downloads
- Version interpretation → Game assets: interprets and downloads
- Version interpretation → Java runtime: resolves and downloads
- Client JAR → Verified download engine: uses (evidence: `src/main/java/fr/guillaumewlt/processing/download/DownloadClientJarProcess.java`)
- Game assets → Verified download engine: uses (evidence: `src/main/java/fr/guillaumewlt/processing/download/DownloadClientAssetsProcess.java`)
- Workflow runner → Native extraction: runs preparation
- Workflow runner → Classpath assembly: runs preparation
- Workflow runner → Minecraft process: launches client step
- Minecraft process → Minecraft client: starts process (evidence: `src/main/java/fr/guillaumewlt/processing/steps/StartingClientProcess.java`)
- Minecraft process → Launcher console: redirects game output (evidence: `src/main/java/fr/guillaumewlt/processing/steps/StartingClientProcess.java`)
- Settings window → Settings persistence: reads settings (evidence: `src/main/java/fr/guillaumewlt/ui/windows/SettingsWindow.java`)
- Video background → Settings persistence: loads settings (evidence: `src/main/java/fr/guillaumewlt/ui/panels/BackgroundPanel.java`)
- Video background → User actions: shares controls (evidence: `src/main/java/fr/guillaumewlt/ui/panels/BackgroundPanel.java`)
- Workflow runner → Launcher context: shares workflow state
- Process base → Launcher context: holds reference (evidence: `src/main/java/fr/guillaumewlt/processing/Processes.java`)
