# thillager/thide architecture

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

- Interactive diagram: https://gitdiagram.com/thillager/thide
- Repository: https://github.com/thillager/thide

## Overview

ThIDE is a Swing IDE whose main workflow is opening a project, editing source, compiling and running it, then inspecting output or debugging. The graph also preserves documented and tree-supported capabilities such as completion, outline, formatting, search, Git, and updates. Source excerpts are partial, so some subsystem entry points and their internal wiring are represented only where supported by the README or visible source; uncertain calls are omitted.

Main entry points: [`src/main/java/ui/MainWindow.java`](https://github.com/thillager/thide/blob/master/src/main/java/ui/MainWindow.java) (IDE window), [`src/main/java/editor/EditorManager.java`](https://github.com/thillager/thide/blob/master/src/main/java/editor/EditorManager.java) (Code editor), [`src/main/java/runner/ProjectRunner.java`](https://github.com/thillager/thide/blob/master/src/main/java/runner/ProjectRunner.java) (Project runner), [`src/main/java/lsp/LspManager.java`](https://github.com/thillager/thide/blob/master/src/main/java/lsp/LspManager.java) (LSP manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["IDE interface"]
  node_main["IDE window<br/>[MainWindow.java]"]
  node_filetree["Project explorer<br/>[FileTreePanel.java]"]
  node_console["Console<br/>[ConsolePanel.java]"]
  node_settings["Settings"]
end

subgraph group_code["Editing and language"]
  node_editor["Code editor<br/>[EditorManager.java]"]
  node_outline["Code outline<br/>[OutlinePanel.java]"]
  node_formatter["Code formatter<br/>[Formatter.java]"]
  node_search["Project search"]
  node_wordmanager["Word completion"]
  node_lspmanager["LSP manager<br/>[LspManager.java]"]
  node_lspclient["LSP client<br/>[LspClient.java]"]
  node_provisioner["Server provisioner"]
end

subgraph group_execution["Build and execution"]
  node_runner["Project runner<br/>[ProjectRunner.java]"]
  node_debugger["Debug runner<br/>[DebugRunner.java]"]
  node_hotswap["Hot-swap engine<br/>[HotSwapEngine.java]"]
  node_hotswap_worker["Hot-swap worker<br/>[HotSwapWorker.java]"]
end

subgraph group_integrations["Project integrations"]
  node_git["Git manager<br/>[GitManager.java]"]
  node_updater["Update manager<br/>[UpdateManager.java]"]
  node_preferences[("Preferences")]
  node_file_node["File model<br/>[FileNode.java]"]
end

node_user(("Developer"))
node_language_server["Language server"]
node_compiler["Java compiler"]
node_repository["Git remote"]
node_release_service["Release service"]

node_user -->|"uses"| node_main
node_main -->|"shows project"| node_filetree
node_main -->|"hosts editing"| node_editor
node_main -->|"shows output"| node_console
node_main -->|"opens settings"| node_settings
node_filetree -->|"models files"| node_file_node
node_editor -->|"refreshes outline"| node_outline
node_editor -->|"formats source"| node_formatter
node_editor -->|"manages words"| node_wordmanager
node_editor -->|"requests language service"| node_lspmanager
node_lspmanager -->|"provisions server"| node_provisioner
node_lspmanager -->|"starts client"| node_lspclient
node_lspclient -->|"exchanges LSP"| node_language_server
node_main -->|"offers search"| node_search
node_main -->|"runs project"| node_runner
node_runner -->|"compiles sources"| node_compiler
node_runner -->|"logs output"| node_console
node_runner -->|"starts debugging"| node_debugger
node_hotswap -->|"launches worker"| node_hotswap_worker
node_hotswap -->|"logs swap status"| node_console
node_main -->|"offers Git operations"| node_git
node_git -.->|"pushes and pulls"| node_repository
node_main -->|"checks updates"| node_updater
node_updater -.->|"downloads release"| node_release_service
node_main -->|"reads preferences"| node_preferences
node_settings -->|"updates preferences"| node_preferences

click node_main "https://github.com/thillager/thide/blob/master/src/main/java/ui/MainWindow.java"
click node_filetree "https://github.com/thillager/thide/blob/master/src/main/java/ui/FileTreePanel.java"
click node_console "https://github.com/thillager/thide/blob/master/src/main/java/ui/ConsolePanel.java"
click node_settings "https://github.com/thillager/thide/blob/master/src/main/java/ui/SettingsDialog.java"
click node_editor "https://github.com/thillager/thide/blob/master/src/main/java/editor/EditorManager.java"
click node_outline "https://github.com/thillager/thide/blob/master/src/main/java/ui/OutlinePanel.java"
click node_formatter "https://github.com/thillager/thide/blob/master/src/main/java/editor/Formatter.java"
click node_search "https://github.com/thillager/thide/blob/master/src/main/java/ui/GlobalSearchPanel.java"
click node_wordmanager "https://github.com/thillager/thide/blob/master/src/main/java/ui/WordManagerDialog.java"
click node_lspmanager "https://github.com/thillager/thide/blob/master/src/main/java/lsp/LspManager.java"
click node_lspclient "https://github.com/thillager/thide/blob/master/src/main/java/lsp/LspClient.java"
click node_provisioner "https://github.com/thillager/thide/blob/master/src/main/java/lsp/LspProvisioner.java"
click node_runner "https://github.com/thillager/thide/blob/master/src/main/java/runner/ProjectRunner.java"
click node_debugger "https://github.com/thillager/thide/blob/master/src/main/java/runner/DebugRunner.java"
click node_hotswap "https://github.com/thillager/thide/blob/master/src/main/java/hotSwap/HotSwapEngine.java"
click node_hotswap_worker "https://github.com/thillager/thide/blob/master/src/main/java/hotSwap/HotSwapWorker.java"
click node_git "https://github.com/thillager/thide/blob/master/src/main/java/git/GitManager.java"
click node_updater "https://github.com/thillager/thide/blob/master/src/main/java/update/UpdateManager.java"
click node_preferences "https://github.com/thillager/thide/blob/master/src/main/java/config/TIDEPreferences.java"
click node_file_node "https://github.com/thillager/thide/blob/master/src/main/java/model/FileNode.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_main,node_filetree,node_console,node_settings toneBlue
class node_editor,node_outline,node_formatter,node_search,node_wordmanager,node_lspmanager,node_lspclient,node_provisioner toneAmber
class node_runner,node_debugger,node_hotswap,node_hotswap_worker,node_language_server toneMint
class node_git,node_updater,node_preferences,node_file_node toneRose
class node_user,node_compiler,node_repository,node_release_service toneIndigo
```

## Components

### IDE interface

- [IDE window](https://github.com/thillager/thide/blob/master/src/main/java/ui/MainWindow.java): `src/main/java/ui/MainWindow.java`
- [Project explorer](https://github.com/thillager/thide/blob/master/src/main/java/ui/FileTreePanel.java): `src/main/java/ui/FileTreePanel.java`
- [Console](https://github.com/thillager/thide/blob/master/src/main/java/ui/ConsolePanel.java): `src/main/java/ui/ConsolePanel.java`
- [Settings](https://github.com/thillager/thide/blob/master/src/main/java/ui/SettingsDialog.java): `src/main/java/ui/SettingsDialog.java`

### Editing and language

- [Code editor](https://github.com/thillager/thide/blob/master/src/main/java/editor/EditorManager.java): `src/main/java/editor/EditorManager.java`
- [Code outline](https://github.com/thillager/thide/blob/master/src/main/java/ui/OutlinePanel.java): `src/main/java/ui/OutlinePanel.java`
- [Code formatter](https://github.com/thillager/thide/blob/master/src/main/java/editor/Formatter.java): `src/main/java/editor/Formatter.java`
- [Project search](https://github.com/thillager/thide/blob/master/src/main/java/ui/GlobalSearchPanel.java): `src/main/java/ui/GlobalSearchPanel.java`
- [Word completion](https://github.com/thillager/thide/blob/master/src/main/java/ui/WordManagerDialog.java): `src/main/java/ui/WordManagerDialog.java`
- [LSP manager](https://github.com/thillager/thide/blob/master/src/main/java/lsp/LspManager.java): `src/main/java/lsp/LspManager.java`
- [LSP client](https://github.com/thillager/thide/blob/master/src/main/java/lsp/LspClient.java): `src/main/java/lsp/LspClient.java`
- [Server provisioner](https://github.com/thillager/thide/blob/master/src/main/java/lsp/LspProvisioner.java): `src/main/java/lsp/LspProvisioner.java`

### Build and execution

- [Project runner](https://github.com/thillager/thide/blob/master/src/main/java/runner/ProjectRunner.java): `src/main/java/runner/ProjectRunner.java`
- [Debug runner](https://github.com/thillager/thide/blob/master/src/main/java/runner/DebugRunner.java): `src/main/java/runner/DebugRunner.java`
- [Hot-swap engine](https://github.com/thillager/thide/blob/master/src/main/java/hotSwap/HotSwapEngine.java): `src/main/java/hotSwap/HotSwapEngine.java`
- [Hot-swap worker](https://github.com/thillager/thide/blob/master/src/main/java/hotSwap/HotSwapWorker.java): `src/main/java/hotSwap/HotSwapWorker.java`

### Project integrations

- [Git manager](https://github.com/thillager/thide/blob/master/src/main/java/git/GitManager.java): `src/main/java/git/GitManager.java`
- [Update manager](https://github.com/thillager/thide/blob/master/src/main/java/update/UpdateManager.java): `src/main/java/update/UpdateManager.java`
- [Preferences](https://github.com/thillager/thide/blob/master/src/main/java/config/TIDEPreferences.java): `src/main/java/config/TIDEPreferences.java`
- [File model](https://github.com/thillager/thide/blob/master/src/main/java/model/FileNode.java): `src/main/java/model/FileNode.java`

### Other components

- **Developer**
- **Language server**
- **Java compiler**
- **Git remote**
- **Release service**

## Connections

- Developer → IDE window: uses
- IDE window → Project explorer: shows project
- IDE window → Code editor: hosts editing
- IDE window → Console: shows output
- IDE window → Settings: opens settings
- Project explorer → File model: models files
- Code editor → Code outline: refreshes outline
- Code editor → Code formatter: formats source
- Code editor → Word completion: manages words
- Code editor → LSP manager: requests language service
- LSP manager → Server provisioner: provisions server
- LSP manager → LSP client: starts client
- LSP client → Language server: exchanges LSP
- IDE window → Project search: offers search
- IDE window → Project runner: runs project
- Project runner → Java compiler: compiles sources
- Project runner → Console: logs output
- Project runner → Debug runner: starts debugging
- Hot-swap engine → Hot-swap worker: launches worker
- Hot-swap engine → Console: logs swap status
- IDE window → Git manager: offers Git operations
- Git manager → Git remote: pushes and pulls
- IDE window → Update manager: checks updates
- Update manager → Release service: downloads release
- IDE window → Preferences: reads preferences
- Settings → Preferences: updates preferences
