# dylwedma11748/jtegranx architecture

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

## Overview

JTegraNX is a cross-platform Nintendo Switch RCM payload injector. A user starts the JavaFX application or command-line mode, selects a payload, and invokes injection; device discovery and the RCM/native transfer layer handle the USB operation. Other documented capabilities include bundled-payload updates, saved configs, SD-card preparation, GPT restoration, APX driver installation, and tray controls. Edges use shown source references or README claims; unsampled implementation details are not expanded, and some platform-native wiring remains unverified.

Main entry points: [`src/main/java/ui/MainUIController.java`](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/ui/MainUIController.java) (UI controller), [`src/main/java/ui/JTegraNX.java`](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/ui/JTegraNX.java) (App runtime), [`src/main/java/handlers/PayloadHandler.java`](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/handlers/PayloadHandler.java) (Payload manager), [`src/main/java/ui/UIGlobal.java`](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/ui/UIGlobal.java) (Settings and files)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Application entry"]
  node_main["Java entry<br/>[Main.java]"]
  node_app["App runtime<br/>[JTegraNX.java]"]
  node_controller["UI controller"]
  node_cli["CLI commands<br/>[JTegraNX.java]"]
end

subgraph group_payload["Payload workflows"]
  node_payloads["Payload manager"]
  node_updates["App updater<br/>[UpdateHandler.java]"]
  node_sd["SD preparation<br/>[SDPrepare.java]"]
  node_zip["Archive handling<br/>[ZipHandler.java]"]
  node_gpt["GPT restore payload"]
end

subgraph group_device["Device and drivers"]
  node_rcm["RCM injection<br/>[RCM.java]"]
  node_linux["Linux listener"]
  node_mac["macOS listener"]
  node_drivers["APX installer"]
end

subgraph group_support["Settings and utilities"]
  node_configs["Saved configs<br/>[ConfigManager.java]"]
  node_settings["Settings and files<br/>[UIGlobal.java]"]
  node_global["Global settings"]
  node_preloader["Startup preload<br/>[Preloader.java]"]
  node_tray["Tray controls<br/>[Tray.java]"]
  node_resource["Bundled resources"]
end

node_user(("User"))
node_usb(("RCM USB device"))
node_github["GitHub releases"]

node_user -->|"starts"| node_main
node_main -->|"launches"| node_app
node_app -->|"loads UI"| node_controller
node_user -->|"enters commands"| node_cli
node_app -->|"dispatches mode"| node_cli
node_controller -->|"manages configs"| node_configs
node_configs -->|"updates UI"| node_settings
node_settings -->|"reads and saves"| node_global
node_app -->|"starts"| node_preloader
node_preloader -->|"preloads"| node_payloads
node_controller -->|"updates payloads"| node_payloads
node_payloads -->|"fetches releases"| node_github
node_payloads -->|"uses archives"| node_zip
node_controller -->|"starts preparation"| node_sd
node_sd -->|"uses archives"| node_zip
node_sd -->|"downloads assets"| node_github
node_controller -->|"requests injection"| node_rcm
node_cli -->|"requests injection"| node_rcm
node_rcm -->|"transfers payload"| node_usb
node_app -.->|"starts listener"| node_linux
node_app -.->|"starts listener"| node_mac
node_linux -->|"reports device"| node_settings
node_mac -->|"reports device"| node_settings
node_controller -->|"installs driver"| node_drivers
node_drivers -->|"loads installer"| node_resource
node_controller -.->|"checks updates"| node_updates
node_updates -->|"checks and downloads"| node_github
node_controller -->|"controls tray"| node_tray
node_tray -->|"lists configs"| node_configs
node_payloads -->|"manages bundled file"| node_gpt
node_controller -->|"sets options"| node_global

click node_main "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/main/Main.java"
click node_app "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/ui/JTegraNX.java"
click node_controller "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/ui/MainUIController.java"
click node_cli "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/ui/JTegraNX.java"
click node_configs "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/configs/ConfigManager.java"
click node_settings "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/ui/UIGlobal.java"
click node_global "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/util/GlobalSettings.java"
click node_preloader "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/tasks/Preloader.java"
click node_tray "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/util/Tray.java"
click node_payloads "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/handlers/PayloadHandler.java"
click node_updates "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/handlers/UpdateHandler.java"
click node_sd "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/util/SDPrepare.java"
click node_zip "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/handlers/ZipHandler.java"
click node_gpt "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/handlers/PayloadHandler.java"
click node_rcm "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/rcm/RCM.java"
click node_linux "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/linux/LinuxDeviceListener.java"
click node_mac "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/macOS/MacOSDeviceListener.java"
click node_drivers "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/windows/DriverInstaller.java"
click node_resource "https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/handlers/ResourceHandler.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_app,node_controller,node_cli,node_user toneBlue
class node_payloads,node_updates,node_sd,node_zip,node_gpt toneAmber
class node_rcm,node_linux,node_mac,node_drivers toneMint
class node_configs,node_settings,node_global,node_preloader,node_tray,node_resource toneRose
class node_usb,node_github toneIndigo
```

## Components

### Application entry

- [Java entry](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/main/Main.java): `src/main/java/main/Main.java`
- [App runtime](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/ui/JTegraNX.java): `src/main/java/ui/JTegraNX.java`
- [UI controller](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/ui/MainUIController.java): `src/main/java/ui/MainUIController.java`
- [CLI commands](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/ui/JTegraNX.java): `src/main/java/ui/JTegraNX.java`

### Payload workflows

- [Payload manager](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/handlers/PayloadHandler.java): `src/main/java/handlers/PayloadHandler.java`
- [App updater](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/handlers/UpdateHandler.java): `src/main/java/handlers/UpdateHandler.java`
- [SD preparation](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/util/SDPrepare.java): `src/main/java/util/SDPrepare.java`
- [Archive handling](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/handlers/ZipHandler.java): `src/main/java/handlers/ZipHandler.java`
- [GPT restore payload](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/handlers/PayloadHandler.java): `src/main/java/handlers/PayloadHandler.java`

### Device and drivers

- [RCM injection](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/rcm/RCM.java): `src/main/java/rcm/RCM.java`
- [Linux listener](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/linux/LinuxDeviceListener.java): `src/main/java/linux/LinuxDeviceListener.java`
- [macOS listener](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/macOS/MacOSDeviceListener.java): `src/main/java/macOS/MacOSDeviceListener.java`
- [APX installer](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/windows/DriverInstaller.java): `src/main/java/windows/DriverInstaller.java`

### Settings and utilities

- [Saved configs](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/configs/ConfigManager.java): `src/main/java/configs/ConfigManager.java`
- [Settings and files](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/ui/UIGlobal.java): `src/main/java/ui/UIGlobal.java`
- [Global settings](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/util/GlobalSettings.java): `src/main/java/util/GlobalSettings.java`
- [Startup preload](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/tasks/Preloader.java): `src/main/java/tasks/Preloader.java`
- [Tray controls](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/util/Tray.java): `src/main/java/util/Tray.java`
- [Bundled resources](https://github.com/dylwedma11748/jtegranx/blob/master/src/main/java/handlers/ResourceHandler.java): `src/main/java/handlers/ResourceHandler.java`

### Other components

- **User**
- **RCM USB device**
- **GitHub releases**

## Connections

- User → Java entry: starts (evidence: `README.md`)
- Java entry → App runtime: launches (evidence: `src/main/java/main/Main.java`)
- App runtime → UI controller: loads UI (evidence: `src/main/java/ui/JTegraNX.java`)
- User → CLI commands: enters commands (evidence: `README.md`)
- App runtime → CLI commands: dispatches mode (evidence: `src/main/java/ui/JTegraNX.java`)
- UI controller → Saved configs: manages configs (evidence: `src/main/java/ui/MainUIController.java`)
- Saved configs → Settings and files: updates UI (evidence: `src/main/java/configs/ConfigManager.java`)
- Settings and files → Global settings: reads and saves (evidence: `src/main/java/ui/UIGlobal.java`)
- App runtime → Startup preload: starts (evidence: `src/main/java/ui/JTegraNX.java`)
- Startup preload → Payload manager: preloads (evidence: `src/main/java/tasks/Preloader.java`)
- UI controller → Payload manager: updates payloads (evidence: `src/main/java/ui/MainUIController.java`)
- Payload manager → GitHub releases: fetches releases (evidence: `src/main/java/handlers/PayloadHandler.java`)
- Payload manager → Archive handling: uses archives (evidence: `src/main/java/handlers/PayloadHandler.java`)
- UI controller → SD preparation: starts preparation (evidence: `src/main/java/ui/MainUIController.java`)
- SD preparation → Archive handling: uses archives (evidence: `src/main/java/util/SDPrepare.java`)
- SD preparation → GitHub releases: downloads assets (evidence: `src/main/java/util/SDPrepare.java`)
- UI controller → RCM injection: requests injection (evidence: `src/main/java/ui/MainUIController.java`)
- CLI commands → RCM injection: requests injection (evidence: `src/main/java/ui/JTegraNX.java`)
- RCM injection → RCM USB device: transfers payload (evidence: `src/main/java/rcm/RCM.java`)
- App runtime → Linux listener: starts listener
- App runtime → macOS listener: starts listener
- Linux listener → Settings and files: reports device (evidence: `src/main/java/linux/LinuxDeviceListener.java`)
- macOS listener → Settings and files: reports device (evidence: `src/main/java/macOS/MacOSDeviceListener.java`)
- UI controller → APX installer: installs driver (evidence: `src/main/java/ui/MainUIController.java`)
- APX installer → Bundled resources: loads installer (evidence: `src/main/java/windows/DriverInstaller.java`)
- UI controller → App updater: checks updates (evidence: `src/main/java/ui/MainUIController.java`)
- App updater → GitHub releases: checks and downloads (evidence: `src/main/java/handlers/UpdateHandler.java`)
- UI controller → Tray controls: controls tray (evidence: `src/main/java/ui/MainUIController.java`)
- Tray controls → Saved configs: lists configs (evidence: `src/main/java/util/Tray.java`)
- Payload manager → GPT restore payload: manages bundled file (evidence: `src/main/java/handlers/PayloadHandler.java`)
- UI controller → Global settings: sets options (evidence: `src/main/java/ui/MainUIController.java`)
