# unkwsr/open-aim architecture

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

- Interactive diagram: https://gitdiagram.com/unkwsr/open-aim
- Repository: https://github.com/unkwsr/open-aim

## Overview

open-aim is an offline Windows aim-training game wrapped in Electron. A player launches the app, selects a drill or creates one in Studio, trains against bots on real maps or custom arenas, and reviews shot feedback and training history. The README also documents settings import, weapon and skin options, and local backups. The map preserves these distinct capabilities; some game-client files are bundled, and unsampled implementations are represented only where the README supports them.

Main entry points: [`app/studio/studio.js`](https://github.com/unkwsr/open-aim/blob/main/app/studio/studio.js) (Studio editor), [`site/next/js/OkAdunfX.js`](https://github.com/unkwsr/open-aim/blob/main/site/next/js/OkAdunfX.js) (Game client), [`app/main.js`](https://github.com/unkwsr/open-aim/blob/main/app/main.js) (Electron launcher), [`app/backups.js`](https://github.com/unkwsr/open-aim/blob/main/app/backups.js) (Local backups)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_launch["Desktop and local data"]
  node_desktop["Electron launcher<br/>[main.js]"]
  node_backups[("Local backups<br/>[backups.js]")]
end

subgraph group_training["Training runtime"]
  node_game["Game client<br/>[OkAdunfX.js]"]
  node_maps["Map and drill library<br/>[map-registry.mjs]"]
  node_bot_runtime["Bot and scene runtime<br/>[OkAdunfX.js]"]
  node_shot_feedback["Shot feedback<br/>[shooting-error.js]"]
  node_weapon_aim["Weapon aiming visuals<br/>[ads-session.mjs]"]
end

subgraph group_studio["Drill creation"]
  node_studio["Studio editor<br/>[studio.js]"]
  node_drill_compile["Drill compiler<br/>[drill.js]"]
  node_arena["Arena geometry<br/>[arena.js]"]
  node_view3d["Studio map views<br/>[view3d.js]"]
  node_map_data["Map data loader<br/>[map-data.js]"]
end

subgraph group_player["Player tools"]
  node_settings["Game customization"]
  node_settings_import["VALORANT settings import<br/>[valorant-import.js]"]
  node_fps["FPS meter<br/>[lobby-bar.js]"]
  node_updates["Release updates<br/>[release-updates.js]"]
end

node_player(("Player"))

node_player -->|"launches"| node_desktop
node_desktop -->|"serves game"| node_game
node_desktop -->|"creates backups"| node_backups
node_player -->|"chooses drills"| node_maps
node_game -.->|"runs training"| node_bot_runtime
node_game -.->|"shows results"| node_shot_feedback
node_game -.->|"uses aiming visuals"| node_weapon_aim
node_player -->|"builds drills"| node_studio
node_studio -->|"compiles drills"| node_drill_compile
node_studio -->|"measures arena"| node_arena
node_studio -->|"renders views"| node_view3d
node_studio -->|"loads maps"| node_map_data
node_player -->|"customizes game"| node_settings
node_player -->|"imports settings"| node_settings_import
node_player -->|"checks frame rate"| node_fps
node_player -->|"checks releases"| node_updates

click node_desktop "https://github.com/unkwsr/open-aim/blob/main/app/main.js"
click node_backups "https://github.com/unkwsr/open-aim/blob/main/app/backups.js"
click node_game "https://github.com/unkwsr/open-aim/blob/main/site/next/js/OkAdunfX.js"
click node_maps "https://github.com/unkwsr/open-aim/blob/main/site/local/map-registry.mjs"
click node_bot_runtime "https://github.com/unkwsr/open-aim/blob/main/app/mods/next/js/OkAdunfX.js"
click node_shot_feedback "https://github.com/unkwsr/open-aim/blob/main/app/shooting-error.js"
click node_weapon_aim "https://github.com/unkwsr/open-aim/blob/main/app/mods/aim-ads/ads-session.mjs"
click node_studio "https://github.com/unkwsr/open-aim/blob/main/app/studio/studio.js"
click node_drill_compile "https://github.com/unkwsr/open-aim/blob/main/app/studio/drill.js"
click node_arena "https://github.com/unkwsr/open-aim/blob/main/app/studio/arena.js"
click node_view3d "https://github.com/unkwsr/open-aim/blob/main/app/studio/view3d.js"
click node_map_data "https://github.com/unkwsr/open-aim/blob/main/app/studio/map-data.js"
click node_settings "https://github.com/unkwsr/open-aim/blob/main/app/local-customization.js"
click node_settings_import "https://github.com/unkwsr/open-aim/blob/main/app/valorant-import.js"
click node_fps "https://github.com/unkwsr/open-aim/blob/main/app/lobby-bar.js"
click node_updates "https://github.com/unkwsr/open-aim/blob/main/app/release-updates.js"

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_desktop,node_backups toneBlue
class node_game,node_maps,node_bot_runtime,node_shot_feedback,node_weapon_aim toneAmber
class node_studio,node_drill_compile,node_arena,node_view3d,node_map_data toneMint
class node_settings,node_settings_import,node_fps,node_updates toneRose
class node_player toneIndigo
```

## Components

### Desktop and local data

- [Electron launcher](https://github.com/unkwsr/open-aim/blob/main/app/main.js): `app/main.js`
- [Local backups](https://github.com/unkwsr/open-aim/blob/main/app/backups.js): `app/backups.js`

### Training runtime

- [Game client](https://github.com/unkwsr/open-aim/blob/main/site/next/js/OkAdunfX.js): `site/next/js/OkAdunfX.js`
- [Map and drill library](https://github.com/unkwsr/open-aim/blob/main/site/local/map-registry.mjs): `site/local/map-registry.mjs`
- [Bot and scene runtime](https://github.com/unkwsr/open-aim/blob/main/app/mods/next/js/OkAdunfX.js): `app/mods/next/js/OkAdunfX.js`
- [Shot feedback](https://github.com/unkwsr/open-aim/blob/main/app/shooting-error.js): `app/shooting-error.js`
- [Weapon aiming visuals](https://github.com/unkwsr/open-aim/blob/main/app/mods/aim-ads/ads-session.mjs): `app/mods/aim-ads/ads-session.mjs`

### Drill creation

- [Studio editor](https://github.com/unkwsr/open-aim/blob/main/app/studio/studio.js): `app/studio/studio.js`
- [Drill compiler](https://github.com/unkwsr/open-aim/blob/main/app/studio/drill.js): `app/studio/drill.js`
- [Arena geometry](https://github.com/unkwsr/open-aim/blob/main/app/studio/arena.js): `app/studio/arena.js`
- [Studio map views](https://github.com/unkwsr/open-aim/blob/main/app/studio/view3d.js): `app/studio/view3d.js`
- [Map data loader](https://github.com/unkwsr/open-aim/blob/main/app/studio/map-data.js): `app/studio/map-data.js`

### Player tools

- [Game customization](https://github.com/unkwsr/open-aim/blob/main/app/local-customization.js): `app/local-customization.js`
- [VALORANT settings import](https://github.com/unkwsr/open-aim/blob/main/app/valorant-import.js): `app/valorant-import.js`
- [FPS meter](https://github.com/unkwsr/open-aim/blob/main/app/lobby-bar.js): `app/lobby-bar.js`
- [Release updates](https://github.com/unkwsr/open-aim/blob/main/app/release-updates.js): `app/release-updates.js`

### Other components

- **Player**

## Connections

- Player → Electron launcher: launches (evidence: `README.md`)
- Electron launcher → Game client: serves game (evidence: `app/main.js`)
- Electron launcher → Local backups: creates backups (evidence: `app/main.js`)
- Player → Map and drill library: chooses drills (evidence: `README.md`)
- Game client → Bot and scene runtime: runs training
- Game client → Shot feedback: shows results
- Game client → Weapon aiming visuals: uses aiming visuals
- Player → Studio editor: builds drills (evidence: `README.md`)
- Studio editor → Drill compiler: compiles drills (evidence: `app/studio/studio.js`)
- Studio editor → Arena geometry: measures arena (evidence: `app/studio/studio.js`)
- Studio editor → Studio map views: renders views (evidence: `app/studio/studio.js`)
- Studio editor → Map data loader: loads maps (evidence: `app/studio/studio.js`)
- Player → Game customization: customizes game (evidence: `README.md`)
- Player → VALORANT settings import: imports settings (evidence: `README.md`)
- Player → FPS meter: checks frame rate (evidence: `README.md`)
- Player → Release updates: checks releases (evidence: `README.md`)
