# sddlol/openpcl architecture

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

- Interactive diagram: https://gitdiagram.com/sddlol/openpcl
- Repository: https://github.com/sddlol/openpcl

## Overview

OpenPCL is a Windows Minecraft launcher restored from Plain Craft Launcher 2. Its main user journey is choosing or preparing an instance, obtaining Minecraft components and Java, authenticating, then launching and monitoring the game. The repository also documents resource browsing, instance/mod management, themes, multiplayer, and an embedded Vibe Coding workspace. The tree and README establish these capabilities; sampled source confirms Java discovery and parts of Terracotta’s networking, but not all launcher call wiring, so uncertain connections are omitted.

Main entry points: [`Plain Craft Launcher 2/Pages`](https://github.com/sddlol/openpcl/tree/main/Plain%20Craft%20Launcher%202/Pages) (Launcher pages), [`ThirdParty/Terracotta/src/controller/api.rs`](https://github.com/sddlol/openpcl/blob/main/ThirdParty/Terracotta/src/controller/api.rs) (Multiplayer controller), [`ThirdParty/Terracotta/src/controller/rooms/scaffolding/room.rs`](https://github.com/sddlol/openpcl/blob/main/ThirdParty/Terracotta/src/controller/rooms/scaffolding/room.rs) (Room coordination), [`Plain Craft Launcher 2/FormMain.xaml.vb`](https://github.com/sddlol/openpcl/blob/main/Plain%20Craft%20Launcher%202/FormMain.xaml.vb) (Main window)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Launcher UI"]
  node_main["Main window<br/>[FormMain.xaml.vb]"]
  node_pages["Launcher pages"]
  node_settings["Settings<br/>[Settings.vb]"]
end

subgraph group_minecraft["Minecraft Lifecycle"]
  node_instance["Instance management"]
  node_download["Game downloads<br/>[ModDownload.vb]"]
  node_resources["Resource browsing"]
  node_java["Java discovery<br/>[Java.cs]"]
  node_login["Account login"]
  node_launch["Game launcher<br/>[ModLaunch.vb]"]
  node_watcher["Process watcher<br/>[ModWatcher.vb]"]
  node_crash["Crash handling<br/>[ModCrash.vb]"]
end

subgraph group_services["Launcher Services"]
  node_resourcecore["Resource services"]
  node_vibe["Vibe Coding<br/>[ModDevelop.vb]"]
  node_codex["Codex server"]
end

subgraph group_multiplayer["Multiplayer"]
  node_terracotta["Multiplayer controller<br/>[api.rs]"]
  node_scanner["LAN server scan<br/>[scanning.rs]"]
  node_room["Room coordination<br/>[room.rs]"]
  node_easytier["EasyTier networking<br/>[linkage_impl.rs]"]
  node_webserver["Local web API<br/>[mod.rs]"]
end

node_user(("Launcher user"))
node_minecraftserver["Minecraft server"]
node_minecraftservices["Minecraft services"]

node_user -->|"uses"| node_main
node_main -->|"shows"| node_pages
node_pages -->|"configures"| node_settings
node_pages -->|"manages"| node_instance
node_pages -->|"requests downloads"| node_download
node_pages -->|"browses"| node_resources
node_resources -->|"queries"| node_resourcecore
node_pages -->|"authenticates"| node_login
node_login -->|"validates token"| node_minecraftservices
node_instance -->|"checks Java"| node_java
node_pages -->|"starts game"| node_launch
node_launch -->|"monitors process"| node_watcher
node_watcher -->|"reports failures"| node_crash
node_user -->|"opens workspace"| node_vibe
node_vibe -->|"dispatches sessions"| node_codex
node_user -->|"starts multiplayer"| node_terracotta
node_terracotta -->|"scans LAN"| node_scanner
node_terracotta -->|"coordinates room"| node_room
node_room -->|"starts network"| node_easytier
node_room -->|"forwards game traffic"| node_minecraftserver
node_webserver -->|"exposes state"| node_terracotta

click node_main "https://github.com/sddlol/openpcl/blob/main/Plain%20Craft%20Launcher%202/FormMain.xaml.vb"
click node_pages "https://github.com/sddlol/openpcl/tree/main/Plain%20Craft%20Launcher%202/Pages"
click node_settings "https://github.com/sddlol/openpcl/blob/main/Plain%20Craft%20Launcher%202/Pages/PageSetup/Settings.vb"
click node_instance "https://github.com/sddlol/openpcl/tree/main/Plain%20Craft%20Launcher%202/Pages/PageInstance"
click node_download "https://github.com/sddlol/openpcl/blob/main/Plain%20Craft%20Launcher%202/Modules/Minecraft/ModDownload.vb"
click node_resources "https://github.com/sddlol/openpcl/tree/main/Plain%20Craft%20Launcher%202/Pages/PageDownload/Resource"
click node_resourcecore "https://github.com/sddlol/openpcl/tree/main/Plain%20Craft%20Launcher%202/Modules/Resource"
click node_java "https://github.com/sddlol/openpcl/blob/main/PCLCS/Java.cs"
click node_login "https://github.com/sddlol/openpcl/tree/main/Plain%20Craft%20Launcher%202/Pages/PageLaunch"
click node_launch "https://github.com/sddlol/openpcl/blob/main/Plain%20Craft%20Launcher%202/Modules/Minecraft/ModLaunch.vb"
click node_watcher "https://github.com/sddlol/openpcl/blob/main/Plain%20Craft%20Launcher%202/Modules/Minecraft/ModWatcher.vb"
click node_crash "https://github.com/sddlol/openpcl/blob/main/Plain%20Craft%20Launcher%202/Modules/Minecraft/ModCrash.vb"
click node_vibe "https://github.com/sddlol/openpcl/blob/main/Plain%20Craft%20Launcher%202/Modules/ModDevelop.vb"
click node_terracotta "https://github.com/sddlol/openpcl/blob/main/ThirdParty/Terracotta/src/controller/api.rs"
click node_scanner "https://github.com/sddlol/openpcl/blob/main/ThirdParty/Terracotta/src/mc/scanning.rs"
click node_room "https://github.com/sddlol/openpcl/blob/main/ThirdParty/Terracotta/src/controller/rooms/scaffolding/room.rs"
click node_easytier "https://github.com/sddlol/openpcl/blob/main/ThirdParty/Terracotta/src/easytier/linkage_impl.rs"
click node_webserver "https://github.com/sddlol/openpcl/blob/main/ThirdParty/Terracotta/src/server/mod.rs"

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_main,node_pages,node_settings,node_user toneBlue
class node_instance,node_download,node_resources,node_java,node_login,node_launch,node_watcher,node_crash toneAmber
class node_resourcecore,node_vibe,node_codex,node_minecraftserver toneMint
class node_terracotta,node_scanner,node_room,node_easytier,node_webserver toneRose
class node_minecraftservices toneIndigo
```

## Components

### Launcher UI

- [Main window](https://github.com/sddlol/openpcl/blob/main/Plain%20Craft%20Launcher%202/FormMain.xaml.vb): `Plain Craft Launcher 2/FormMain.xaml.vb`
- [Launcher pages](https://github.com/sddlol/openpcl/tree/main/Plain%20Craft%20Launcher%202/Pages): `Plain Craft Launcher 2/Pages`
- [Settings](https://github.com/sddlol/openpcl/blob/main/Plain%20Craft%20Launcher%202/Pages/PageSetup/Settings.vb): `Plain Craft Launcher 2/Pages/PageSetup/Settings.vb`

### Minecraft Lifecycle

- [Instance management](https://github.com/sddlol/openpcl/tree/main/Plain%20Craft%20Launcher%202/Pages/PageInstance): `Plain Craft Launcher 2/Pages/PageInstance`
- [Game downloads](https://github.com/sddlol/openpcl/blob/main/Plain%20Craft%20Launcher%202/Modules/Minecraft/ModDownload.vb): `Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb`
- [Resource browsing](https://github.com/sddlol/openpcl/tree/main/Plain%20Craft%20Launcher%202/Pages/PageDownload/Resource): `Plain Craft Launcher 2/Pages/PageDownload/Resource`
- [Java discovery](https://github.com/sddlol/openpcl/blob/main/PCLCS/Java.cs): `PCLCS/Java.cs`
- [Account login](https://github.com/sddlol/openpcl/tree/main/Plain%20Craft%20Launcher%202/Pages/PageLaunch): `Plain Craft Launcher 2/Pages/PageLaunch`
- [Game launcher](https://github.com/sddlol/openpcl/blob/main/Plain%20Craft%20Launcher%202/Modules/Minecraft/ModLaunch.vb): `Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb`
- [Process watcher](https://github.com/sddlol/openpcl/blob/main/Plain%20Craft%20Launcher%202/Modules/Minecraft/ModWatcher.vb): `Plain Craft Launcher 2/Modules/Minecraft/ModWatcher.vb`
- [Crash handling](https://github.com/sddlol/openpcl/blob/main/Plain%20Craft%20Launcher%202/Modules/Minecraft/ModCrash.vb): `Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb`

### Launcher Services

- [Resource services](https://github.com/sddlol/openpcl/tree/main/Plain%20Craft%20Launcher%202/Modules/Resource): `Plain Craft Launcher 2/Modules/Resource`
- [Vibe Coding](https://github.com/sddlol/openpcl/blob/main/Plain%20Craft%20Launcher%202/Modules/ModDevelop.vb): `Plain Craft Launcher 2/Modules/ModDevelop.vb`
- **Codex server**

### Multiplayer

- [Multiplayer controller](https://github.com/sddlol/openpcl/blob/main/ThirdParty/Terracotta/src/controller/api.rs): `ThirdParty/Terracotta/src/controller/api.rs`
- [LAN server scan](https://github.com/sddlol/openpcl/blob/main/ThirdParty/Terracotta/src/mc/scanning.rs): `ThirdParty/Terracotta/src/mc/scanning.rs`
- [Room coordination](https://github.com/sddlol/openpcl/blob/main/ThirdParty/Terracotta/src/controller/rooms/scaffolding/room.rs): `ThirdParty/Terracotta/src/controller/rooms/scaffolding/room.rs`
- [EasyTier networking](https://github.com/sddlol/openpcl/blob/main/ThirdParty/Terracotta/src/easytier/linkage_impl.rs): `ThirdParty/Terracotta/src/easytier/linkage_impl.rs`
- [Local web API](https://github.com/sddlol/openpcl/blob/main/ThirdParty/Terracotta/src/server/mod.rs): `ThirdParty/Terracotta/src/server/mod.rs`

### Other components

- **Launcher user**
- **Minecraft server**
- **Minecraft services**

## Connections

- Launcher user → Main window: uses
- Main window → Launcher pages: shows
- Launcher pages → Settings: configures
- Launcher pages → Instance management: manages
- Launcher pages → Game downloads: requests downloads
- Launcher pages → Resource browsing: browses
- Resource browsing → Resource services: queries
- Launcher pages → Account login: authenticates
- Account login → Minecraft services: validates token
- Instance management → Java discovery: checks Java
- Launcher pages → Game launcher: starts game
- Game launcher → Process watcher: monitors process
- Process watcher → Crash handling: reports failures
- Launcher user → Vibe Coding: opens workspace
- Vibe Coding → Codex server: dispatches sessions
- Launcher user → Multiplayer controller: starts multiplayer
- Multiplayer controller → LAN server scan: scans LAN
- Multiplayer controller → Room coordination: coordinates room
- Room coordination → EasyTier networking: starts network
- Room coordination → Minecraft server: forwards game traffic
- Local web API → Multiplayer controller: exposes state
