# endiq-jar/turtlelauncher architecture

> Architecture diagram of the GitHub repository endiq-jar/turtlelauncher, 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/endiq-jar/turtlelauncher
- Repository: https://github.com/endiq-jar/turtlelauncher

## Overview

Turtle Launcher is an Android launcher for Minecraft: Java Edition. Users configure accounts and game content, obtain required files, then start a game; the launcher also provides file management and optional LAN play. The graph preserves README-documented capabilities and uses sampled source relationships where available. Several feature branches are represented at their existing directory paths because their implementation files were not sampled; those links are not asserted as inspected call chains.

Main entry points: [`TurtleLauncher/src/main/java/com/endiq/turtlelauncher`](https://github.com/endiq-jar/turtlelauncher/tree/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher) (Launcher UI), [`TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/download/jvm_server/JvmService.kt`](https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/download/jvm_server/JvmService.kt) (JVM service), [`TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/launch/GameService.kt`](https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/launch/GameService.kt) (Game service), [`TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/ui/FileManagerActivity.kt`](https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/ui/FileManagerActivity.kt) (File manager entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_launcher["Launcher workflow"]
  node_launcher_ui["Launcher UI"]
  node_accounts["Accounts"]
  node_versions["Versions and mods"]
  node_accounts_store[("Account storage<br/>[AppDatabase.kt]")]
end

subgraph group_game["Game runtime"]
  node_download["Downloads<br/>[DownloadEngine.kt]"]
  node_jvm_setup["Java runtimes"]
  node_game_service["Game service<br/>[GameService.kt]"]
  node_jvm_service["JVM service<br/>[JvmService.kt]"]
  node_native_bridge["Native bridge<br/>[TLBridge.java]"]
  node_lwjgl["LWJGL runtime<br/>[GLFW.java]"]
  node_input_map["Input mapping<br/>[AWTInputEvent.java]"]
end

subgraph group_files["File management"]
  node_file_activity["File manager entry"]
  node_file_screen["File manager UI"]
  node_file_vm["File manager state"]
  node_file_logic["File operations"]
  node_file_system[("Device storage")]
end

subgraph group_extensions["Optional features"]
  node_terracotta["Terracotta integration<br/>[Terracotta.kt]"]
  node_terracotta_api["Terracotta API"]
  node_vpn_service["VPN service"]
  node_layer_controls["Touch controls"]
  node_card_grid["Card layouts<br/>[GridEngine.kt]"]
  node_color_picker["Color picker<br/>[Controller.kt]"]
  node_crash_logs["Crash log services"]
end

node_user(("Android user"))

node_user -->|"configures and launches"| node_launcher_ui
node_launcher_ui -.->|"manages accounts"| node_accounts
node_launcher_ui -.->|"manages content"| node_versions
node_launcher_ui -.->|"requests downloads"| node_download
node_jvm_service -->|"loads native libraries"| node_native_bridge
node_game_service -.->|"starts game runtime"| node_jvm_service
node_launcher_ui -.->|"configures runtime"| node_jvm_setup
node_jvm_service -.->|"runs game with"| node_lwjgl
node_user -.->|"provides input"| node_input_map
node_file_activity -->|"renders"| node_file_screen
node_file_activity -->|"creates"| node_file_vm
node_file_vm -.->|"delegates operations"| node_file_logic
node_file_logic -->|"reads and writes"| node_file_system
node_launcher_ui -.->|"offers LAN play"| node_terracotta
node_terracotta -->|"initializes and polls"| node_terracotta_api
node_terracotta_api -->|"requests VPN"| node_vpn_service
node_user -.->|"customizes controls"| node_layer_controls
node_user -.->|"arranges cards"| node_card_grid
node_user -.->|"chooses colors"| node_color_picker
node_accounts -.->|"persists accounts"| node_accounts_store
node_game_service -.->|"reports failures"| node_crash_logs

click node_launcher_ui "https://github.com/endiq-jar/turtlelauncher/tree/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher"
click node_accounts "https://github.com/endiq-jar/turtlelauncher/tree/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/account"
click node_versions "https://github.com/endiq-jar/turtlelauncher/tree/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/ui/screens/content/versions"
click node_download "https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/download/engine/DownloadEngine.kt"
click node_jvm_setup "https://github.com/endiq-jar/turtlelauncher/tree/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/multirt"
click node_game_service "https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/launch/GameService.kt"
click node_jvm_service "https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/download/jvm_server/JvmService.kt"
click node_native_bridge "https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/bridge/TLBridge.java"
click node_lwjgl "https://github.com/endiq-jar/turtlelauncher/blob/main/LWJGL/3.4.1/src/main/java/org/lwjgl/glfw/GLFW.java"
click node_input_map "https://github.com/endiq-jar/turtlelauncher/blob/main/InputMap/src/main/java/com/endiq/inputmap/AWTInputEvent.java"
click node_file_activity "https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/ui/FileManagerActivity.kt"
click node_file_screen "https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/ui/FileManagerRootScreen.kt"
click node_file_vm "https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/viewmodel/FileManagerViewModel.kt"
click node_file_logic "https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/logic/FileManagerLogic.kt"
click node_terracotta "https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/terracotta/Terracotta.kt"
click node_terracotta_api "https://github.com/endiq-jar/turtlelauncher/blob/main/Terracotta/src/main/java/net/burningtnt/terracotta/TerracottaAndroidAPI.java"
click node_vpn_service "https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/terracotta/TerracottaVPNService.java"
click node_layer_controls "https://github.com/endiq-jar/turtlelauncher/blob/main/LayerController/src/main/java/com/endiq/layer_controller/observable/ObservableControlLayer.kt"
click node_card_grid "https://github.com/endiq-jar/turtlelauncher/blob/main/CardGrid/src/main/kotlin/com/endiq/cardgrid/engine/GridEngine.kt"
click node_color_picker "https://github.com/endiq-jar/turtlelauncher/blob/main/ColorPicker/src/main/kotlin/com/endiq/colorpicker/Controller.kt"
click node_accounts_store "https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/database/AppDatabase.kt"
click node_crash_logs "https://github.com/endiq-jar/turtlelauncher/tree/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/crashlogs"

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_launcher_ui,node_accounts,node_versions,node_accounts_store,node_user toneBlue
class node_download,node_jvm_setup,node_game_service,node_jvm_service,node_native_bridge,node_lwjgl,node_input_map toneAmber
class node_file_activity,node_file_screen,node_file_vm,node_file_logic,node_file_system toneMint
class node_terracotta,node_terracotta_api,node_vpn_service,node_layer_controls,node_card_grid,node_color_picker,node_crash_logs toneRose
```

## Components

### Launcher workflow

- [Launcher UI](https://github.com/endiq-jar/turtlelauncher/tree/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher): `TurtleLauncher/src/main/java/com/endiq/turtlelauncher`
- [Accounts](https://github.com/endiq-jar/turtlelauncher/tree/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/account): `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/account`
- [Versions and mods](https://github.com/endiq-jar/turtlelauncher/tree/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/ui/screens/content/versions): `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/ui/screens/content/versions`
- [Account storage](https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/database/AppDatabase.kt): `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/database/AppDatabase.kt`

### Game runtime

- [Downloads](https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/download/engine/DownloadEngine.kt): `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/download/engine/DownloadEngine.kt`
- [Java runtimes](https://github.com/endiq-jar/turtlelauncher/tree/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/multirt): `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/multirt`
- [Game service](https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/launch/GameService.kt): `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/launch/GameService.kt`
- [JVM service](https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/download/jvm_server/JvmService.kt): `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/download/jvm_server/JvmService.kt`
- [Native bridge](https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/bridge/TLBridge.java): `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/bridge/TLBridge.java`
- [LWJGL runtime](https://github.com/endiq-jar/turtlelauncher/blob/main/LWJGL/3.4.1/src/main/java/org/lwjgl/glfw/GLFW.java): `LWJGL/3.4.1/src/main/java/org/lwjgl/glfw/GLFW.java`
- [Input mapping](https://github.com/endiq-jar/turtlelauncher/blob/main/InputMap/src/main/java/com/endiq/inputmap/AWTInputEvent.java): `InputMap/src/main/java/com/endiq/inputmap/AWTInputEvent.java`

### File management

- [File manager entry](https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/ui/FileManagerActivity.kt): `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/ui/FileManagerActivity.kt`
- [File manager UI](https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/ui/FileManagerRootScreen.kt): `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/ui/FileManagerRootScreen.kt`
- [File manager state](https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/viewmodel/FileManagerViewModel.kt): `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/viewmodel/FileManagerViewModel.kt`
- [File operations](https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/logic/FileManagerLogic.kt): `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/logic/FileManagerLogic.kt`
- **Device storage**

### Optional features

- [Terracotta integration](https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/terracotta/Terracotta.kt): `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/terracotta/Terracotta.kt`
- [Terracotta API](https://github.com/endiq-jar/turtlelauncher/blob/main/Terracotta/src/main/java/net/burningtnt/terracotta/TerracottaAndroidAPI.java): `Terracotta/src/main/java/net/burningtnt/terracotta/TerracottaAndroidAPI.java`
- [VPN service](https://github.com/endiq-jar/turtlelauncher/blob/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/terracotta/TerracottaVPNService.java): `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/terracotta/TerracottaVPNService.java`
- [Touch controls](https://github.com/endiq-jar/turtlelauncher/blob/main/LayerController/src/main/java/com/endiq/layer_controller/observable/ObservableControlLayer.kt): `LayerController/src/main/java/com/endiq/layer_controller/observable/ObservableControlLayer.kt`
- [Card layouts](https://github.com/endiq-jar/turtlelauncher/blob/main/CardGrid/src/main/kotlin/com/endiq/cardgrid/engine/GridEngine.kt): `CardGrid/src/main/kotlin/com/endiq/cardgrid/engine/GridEngine.kt`
- [Color picker](https://github.com/endiq-jar/turtlelauncher/blob/main/ColorPicker/src/main/kotlin/com/endiq/colorpicker/Controller.kt): `ColorPicker/src/main/kotlin/com/endiq/colorpicker/Controller.kt`
- [Crash log services](https://github.com/endiq-jar/turtlelauncher/tree/main/TurtleLauncher/src/main/java/com/endiq/turtlelauncher/crashlogs): `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/crashlogs`

### Other components

- **Android user**

## Connections

- Android user → Launcher UI: configures and launches
- Launcher UI → Accounts: manages accounts
- Launcher UI → Versions and mods: manages content
- Launcher UI → Downloads: requests downloads (evidence: `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/download/engine/DownloadEngine.kt`)
- JVM service → Native bridge: loads native libraries (evidence: `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/game/download/jvm_server/JvmService.kt`)
- Game service → JVM service: starts game runtime
- Launcher UI → Java runtimes: configures runtime
- JVM service → LWJGL runtime: runs game with
- Android user → Input mapping: provides input
- File manager entry → File manager UI: renders (evidence: `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/ui/FileManagerActivity.kt`)
- File manager entry → File manager state: creates (evidence: `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/ui/FileManagerActivity.kt`)
- File manager state → File operations: delegates operations (evidence: `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/viewmodel/FileManagerViewModel.kt`)
- File operations → Device storage: reads and writes (evidence: `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/filemanager/logic/FileManagerLogic.kt`)
- Launcher UI → Terracotta integration: offers LAN play (evidence: `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/terracotta/TerracottaVPNService.java`)
- Terracotta integration → Terracotta API: initializes and polls (evidence: `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/terracotta/Terracotta.kt`)
- Terracotta API → VPN service: requests VPN (evidence: `TurtleLauncher/src/main/java/com/endiq/turtlelauncher/terracotta/TerracottaVPNService.java`)
- Android user → Touch controls: customizes controls
- Android user → Card layouts: arranges cards
- Android user → Color picker: chooses colors
- Accounts → Account storage: persists accounts
- Game service → Crash log services: reports failures
