# pcl-community/pcl-ce architecture

> Architecture diagram of the GitHub repository pcl-community/pcl-ce, 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/pcl-community/pcl-ce
- Repository: https://github.com/pcl-community/pcl-ce

## Overview

PCL Community Edition is a Minecraft launcher; the repository contains its launcher modules and a broad shared core. Its user-facing workflow is to configure and manage a Minecraft environment—discover Java, manage profiles and authentication, access game resources, and work with saves—with networking and background tasks supporting those operations. The tree also shows multiplayer, updates, caching, and UI services as distinct capabilities. The README excerpt identifies the product but does not document feature flows; links are limited to relationships supported by sampled source or clear module responsibility.

Main entry points: [`PCL.Core/Link/Lobby/LobbyController.cs`](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Link/Lobby/LobbyController.cs) (Lobby controller), [`PCL.Core/Minecraft/Java/JavaManager.cs`](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Minecraft/Java/JavaManager.cs) (Java discovery), [`PCL.Core/Link/EasyTier/ETController.cs`](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Link/EasyTier/ETController.cs) (Virtual networking), [`Plain Craft Launcher 2/Modules/Updates/UpdateManager.cs`](https://github.com/pcl-community/pcl-ce/blob/dev/Plain%20Craft%20Launcher%202/Modules/Updates/UpdateManager.cs) (Update manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_minecraft["Minecraft management"]
  node_java["Java discovery<br/>[JavaManager.cs]"]
  node_profiles["Profiles and auth"]
  node_resources["Mod resources"]
  node_saves["World saves<br/>[SaveManager.cs]"]
end

subgraph group_runtime["Core services"]
  node_config["Configuration<br/>[ConfigService.cs]"]
  node_tasks["Task center<br/>[TaskCenter.cs]"]
  node_localization["Localization"]
  node_cache["Cache service<br/>[CacheService.cs]"]
  node_sqlite[("Cache database")]
  node_hashstore["Content-addressed files<br/>[HashStorage.cs]"]
end

subgraph group_network["Networking and play"]
  node_download["Download coordination"]
  node_http["HTTP networking<br/>[HttpRequest.cs]"]
  node_lobby["Lobby controller<br/>[LobbyController.cs]"]
  node_scaffolding["Lobby protocol"]
  node_easytier["Virtual networking<br/>[ETController.cs]"]
end

subgraph group_launcher["Launcher capabilities"]
  node_updates["Update manager<br/>[UpdateManager.cs]"]
  node_ui["WPF UI services<br/>[ThemeService.cs]"]
end

node_user(("Launcher user"))
node_easytier_process["EasyTier process"]
node_minecraft_server(("Minecraft server"))

node_user -->|"manage runtime"| node_java
node_java -->|"select runtime"| node_profiles
node_user -->|"manage profiles"| node_profiles
node_user -->|"manage mods"| node_resources
node_user -->|"manage worlds"| node_saves
node_lobby -->|"creates client"| node_scaffolding
node_lobby -->|"creates server"| node_scaffolding
node_lobby -->|"starts networking"| node_easytier
node_easytier -->|"launches process"| node_easytier_process
node_lobby -->|"pings host"| node_minecraft_server
node_user -->|"request update"| node_updates
node_updates -->|"coordinates downloads"| node_download
node_cache -->|"persists cache"| node_sqlite

click node_java "https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Minecraft/Java/JavaManager.cs"
click node_profiles "https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Minecraft/Profile/ProfileManagement.cs"
click node_resources "https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Minecraft/ResourceProject/ModDependencyResolver.cs"
click node_saves "https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Minecraft/Saves/SaveManager.cs"
click node_config "https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/App/Configuration/ConfigService.cs"
click node_tasks "https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/App/Tasks/TaskCenter.cs"
click node_localization "https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/App/Localization/LocalizationService.cs"
click node_cache "https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/IO/Storage/Cache/CacheService.cs"
click node_sqlite "https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/IO/Storage/Cache/SqliteCacheStorage.cs"
click node_hashstore "https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/IO/Storage/HashStorage.cs"
click node_download "https://github.com/pcl-community/pcl-ce/blob/dev/Plain%20Craft%20Launcher%202/Modules/Network/Downloader/DownloadResourceManager.cs"
click node_http "https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/IO/Net/Http/HttpRequest.cs"
click node_lobby "https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Link/Lobby/LobbyController.cs"
click node_scaffolding "https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Link/Scaffolding/ScaffoldingFactory.cs"
click node_easytier "https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Link/EasyTier/ETController.cs"
click node_updates "https://github.com/pcl-community/pcl-ce/blob/dev/Plain%20Craft%20Launcher%202/Modules/Updates/UpdateManager.cs"
click node_ui "https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/UI/Theme/ThemeService.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_java,node_profiles,node_resources,node_saves,node_user toneBlue
class node_config,node_tasks,node_localization,node_cache,node_sqlite,node_hashstore toneAmber
class node_download,node_http,node_lobby,node_scaffolding,node_easytier,node_minecraft_server toneMint
class node_updates,node_ui toneRose
class node_easytier_process toneIndigo
```

## Components

### Minecraft management

- [Java discovery](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Minecraft/Java/JavaManager.cs): `PCL.Core/Minecraft/Java/JavaManager.cs`
- [Profiles and auth](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Minecraft/Profile/ProfileManagement.cs): `PCL.Core/Minecraft/Profile/ProfileManagement.cs`
- [Mod resources](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Minecraft/ResourceProject/ModDependencyResolver.cs): `PCL.Core/Minecraft/ResourceProject/ModDependencyResolver.cs`
- [World saves](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Minecraft/Saves/SaveManager.cs): `PCL.Core/Minecraft/Saves/SaveManager.cs`

### Core services

- [Configuration](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/App/Configuration/ConfigService.cs): `PCL.Core/App/Configuration/ConfigService.cs`
- [Task center](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/App/Tasks/TaskCenter.cs): `PCL.Core/App/Tasks/TaskCenter.cs`
- [Localization](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/App/Localization/LocalizationService.cs): `PCL.Core/App/Localization/LocalizationService.cs`
- [Cache service](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/IO/Storage/Cache/CacheService.cs): `PCL.Core/IO/Storage/Cache/CacheService.cs`
- [Cache database](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/IO/Storage/Cache/SqliteCacheStorage.cs): `PCL.Core/IO/Storage/Cache/SqliteCacheStorage.cs`
- [Content-addressed files](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/IO/Storage/HashStorage.cs): `PCL.Core/IO/Storage/HashStorage.cs`

### Networking and play

- [Download coordination](https://github.com/pcl-community/pcl-ce/blob/dev/Plain%20Craft%20Launcher%202/Modules/Network/Downloader/DownloadResourceManager.cs): `Plain Craft Launcher 2/Modules/Network/Downloader/DownloadResourceManager.cs`
- [HTTP networking](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/IO/Net/Http/HttpRequest.cs): `PCL.Core/IO/Net/Http/HttpRequest.cs`
- [Lobby controller](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Link/Lobby/LobbyController.cs): `PCL.Core/Link/Lobby/LobbyController.cs`
- [Lobby protocol](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Link/Scaffolding/ScaffoldingFactory.cs): `PCL.Core/Link/Scaffolding/ScaffoldingFactory.cs`
- [Virtual networking](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/Link/EasyTier/ETController.cs): `PCL.Core/Link/EasyTier/ETController.cs`

### Launcher capabilities

- [Update manager](https://github.com/pcl-community/pcl-ce/blob/dev/Plain%20Craft%20Launcher%202/Modules/Updates/UpdateManager.cs): `Plain Craft Launcher 2/Modules/Updates/UpdateManager.cs`
- [WPF UI services](https://github.com/pcl-community/pcl-ce/blob/dev/PCL.Core/UI/Theme/ThemeService.cs): `PCL.Core/UI/Theme/ThemeService.cs`

### Other components

- **Launcher user**
- **EasyTier process**
- **Minecraft server**

## Connections

- Launcher user → Java discovery: manage runtime
- Java discovery → Profiles and auth: select runtime
- Launcher user → Profiles and auth: manage profiles
- Launcher user → Mod resources: manage mods
- Launcher user → World saves: manage worlds
- Lobby controller → Lobby protocol: creates client
- Lobby controller → Lobby protocol: creates server
- Lobby controller → Virtual networking: starts networking
- Virtual networking → EasyTier process: launches process
- Lobby controller → Minecraft server: pings host
- Launcher user → Update manager: request update
- Update manager → Download coordination: coordinates downloads
- Cache service → Cache database: persists cache
