# radiusdesk/rd_gui architecture

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

## Overview

RADIUSdesk’s rd_gui is an Ext JS frontend for managing a RADIUSdesk network. The user-facing flow starts in the Classic application and opens management screens for clients, dynamic clients, and access points; controllers coordinate screen actions while grids and detail views present operational data. The tree also shows broader administration areas such as mesh, accounts, usage, and monitoring. Source excerpts confirm application startup, WebSocket setup, and selected screen actions; most other subsystem connections are not evidenced in the supplied excerpts, so they are represented without speculative links.

Main entry points: [`rd/classic/src/controller/cDynamicClients.js`](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/controller/cDynamicClients.js) (Dynamic client controller), [`rd/app.js`](https://github.com/radiusdesk/rd_gui/blob/main/rd/app.js) (Ext launcher), [`rd/classic/src/Application.js`](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/Application.js) (Classic application), [`rd/classic/src/view/clients/vcClients.js`](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/clients/vcClients.js) (Client screen)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_startup["Application startup"]
  node_launcher["Ext launcher<br/>[app.js]"]
  node_classic_app["Classic application<br/>[Application.js]"]
  node_modern_app["Modern application<br/>[Application.js]"]
  node_ws_manager["WebSocket manager"]
end

subgraph group_clients["Client management"]
  node_clients_controller["Client controller<br/>[cClients.js]"]
  node_clients_view["Client screen<br/>[vcClients.js]"]
  node_clients_grid["Client grid<br/>[gridClients.js]"]
  node_dynamic_controller["Dynamic client controller<br/>[cDynamicClients.js]"]
  node_dynamic_grid["Dynamic client grid"]
  node_dynamic_detail["Dynamic client detail"]
  node_dynamic_add["Add dynamic client"]
  node_mac_attach["MAC attachment"]
end

subgraph group_network["Network management"]
  node_ap_link_controller["AP link controller"]
  node_ap_link_grid["AP linked clients"]
  node_mesh_management["Mesh management<br/>[cMeshes.js]"]
  node_access_points["Access point management<br/>[cAccessPoints.js]"]
end

subgraph group_operations["Usage and operations"]
  node_data_usage["Data usage screens"]
  node_activity_monitor["Activity monitoring"]
  node_radius_stats["RADIUS statistics<br/>[pnlRadstats.js]"]
end

subgraph group_visualization["Visualization libraries"]
  node_avsdf["AVSDF layout<br/>[avsdf-base.js]"]
  node_config_js["Visualization config<br/>[config.js]"]
  node_cytoscape["Cytoscape layout<br/>[cytoscape-avsdf.js]"]
  node_jit["JIT visualization<br/>[jit-yc.js]"]
  node_layout_base["Layout base<br/>[layout-base.js]"]
  node_leaflet["Leaflet maps<br/>[leaflet.js]"]
  node_singletons["Shared JS singletons<br/>[singletons.js]"]
end

node_user(("Administrator"))

node_user -->|"opens frontend"| node_launcher
node_launcher -->|"launches"| node_classic_app
node_classic_app -->|"requires"| node_ws_manager
node_dynamic_controller -->|"opens form"| node_dynamic_add
node_dynamic_controller -->|"opens detail"| node_dynamic_detail
node_dynamic_grid -.->|"dispatches actions"| node_dynamic_controller
node_clients_view -.->|"displays grid"| node_clients_grid
node_ap_link_controller -->|"reloads view"| node_ap_link_grid

click node_launcher "https://github.com/radiusdesk/rd_gui/blob/main/rd/app.js"
click node_classic_app "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/Application.js"
click node_modern_app "https://github.com/radiusdesk/rd_gui/blob/main/rd/modern/src/Application.js"
click node_ws_manager "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/ux/WebSocketManager.js"
click node_clients_controller "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/controller/cClients.js"
click node_clients_view "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/clients/vcClients.js"
click node_clients_grid "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/clients/gridClients.js"
click node_dynamic_controller "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/controller/cDynamicClients.js"
click node_dynamic_grid "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/dynamicClients/gridDynamicClients.js"
click node_dynamic_detail "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/dynamicClients/pnlDynamicClientDynamicClient.js"
click node_dynamic_add "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/dynamicClients/winDynamicClientAdd.js"
click node_mac_attach "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/dynamicClientMacs/winDynamicClientMacAttach.js"
click node_ap_link_controller "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/aps/vcApViewLinkClients.js"
click node_ap_link_grid "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/aps/gridApViewLinkClients.js"
click node_mesh_management "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/controller/cMeshes.js"
click node_access_points "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/controller/cAccessPoints.js"
click node_data_usage "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/dataUsage/pnlDataUsageClients.js"
click node_activity_monitor "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/controller/cActivityMonitor.js"
click node_radius_stats "https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/radstats/pnlRadstats.js"
click node_avsdf "https://github.com/radiusdesk/rd_gui/blob/main/rd/resources/js/avsdf-base.js"
click node_config_js "https://github.com/radiusdesk/rd_gui/blob/main/rd/resources/js/config.js"
click node_cytoscape "https://github.com/radiusdesk/rd_gui/blob/main/rd/resources/js/cytoscape-avsdf.js"
click node_jit "https://github.com/radiusdesk/rd_gui/blob/main/rd/resources/js/jit-yc.js"
click node_layout_base "https://github.com/radiusdesk/rd_gui/blob/main/rd/resources/js/layout-base.js"
click node_leaflet "https://github.com/radiusdesk/rd_gui/blob/main/rd/resources/js/leaflet.js"
click node_singletons "https://github.com/radiusdesk/rd_gui/blob/main/rd/resources/js/singletons.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_launcher,node_classic_app,node_modern_app,node_ws_manager toneBlue
class node_clients_controller,node_clients_view,node_clients_grid,node_dynamic_controller,node_dynamic_grid,node_dynamic_detail,node_dynamic_add,node_mac_attach toneAmber
class node_ap_link_controller,node_ap_link_grid,node_mesh_management,node_access_points toneMint
class node_data_usage,node_activity_monitor,node_radius_stats toneRose
class node_avsdf,node_config_js,node_cytoscape,node_jit,node_layout_base,node_leaflet,node_singletons,node_user toneIndigo
```

## Components

### Application startup

- [Ext launcher](https://github.com/radiusdesk/rd_gui/blob/main/rd/app.js): `rd/app.js`
- [Classic application](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/Application.js): `rd/classic/src/Application.js`
- [Modern application](https://github.com/radiusdesk/rd_gui/blob/main/rd/modern/src/Application.js): `rd/modern/src/Application.js`
- [WebSocket manager](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/ux/WebSocketManager.js): `rd/classic/src/ux/WebSocketManager.js`

### Client management

- [Client controller](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/controller/cClients.js): `rd/classic/src/controller/cClients.js`
- [Client screen](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/clients/vcClients.js): `rd/classic/src/view/clients/vcClients.js`
- [Client grid](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/clients/gridClients.js): `rd/classic/src/view/clients/gridClients.js`
- [Dynamic client controller](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/controller/cDynamicClients.js): `rd/classic/src/controller/cDynamicClients.js`
- [Dynamic client grid](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/dynamicClients/gridDynamicClients.js): `rd/classic/src/view/dynamicClients/gridDynamicClients.js`
- [Dynamic client detail](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/dynamicClients/pnlDynamicClientDynamicClient.js): `rd/classic/src/view/dynamicClients/pnlDynamicClientDynamicClient.js`
- [Add dynamic client](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/dynamicClients/winDynamicClientAdd.js): `rd/classic/src/view/dynamicClients/winDynamicClientAdd.js`
- [MAC attachment](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/dynamicClientMacs/winDynamicClientMacAttach.js): `rd/classic/src/view/dynamicClientMacs/winDynamicClientMacAttach.js`

### Network management

- [AP link controller](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/aps/vcApViewLinkClients.js): `rd/classic/src/view/aps/vcApViewLinkClients.js`
- [AP linked clients](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/aps/gridApViewLinkClients.js): `rd/classic/src/view/aps/gridApViewLinkClients.js`
- [Mesh management](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/controller/cMeshes.js): `rd/classic/src/controller/cMeshes.js`
- [Access point management](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/controller/cAccessPoints.js): `rd/classic/src/controller/cAccessPoints.js`

### Usage and operations

- [Data usage screens](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/dataUsage/pnlDataUsageClients.js): `rd/classic/src/view/dataUsage/pnlDataUsageClients.js`
- [Activity monitoring](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/controller/cActivityMonitor.js): `rd/classic/src/controller/cActivityMonitor.js`
- [RADIUS statistics](https://github.com/radiusdesk/rd_gui/blob/main/rd/classic/src/view/radstats/pnlRadstats.js): `rd/classic/src/view/radstats/pnlRadstats.js`

### Visualization libraries

- [AVSDF layout](https://github.com/radiusdesk/rd_gui/blob/main/rd/resources/js/avsdf-base.js): `rd/resources/js/avsdf-base.js`
- [Visualization config](https://github.com/radiusdesk/rd_gui/blob/main/rd/resources/js/config.js): `rd/resources/js/config.js`
- [Cytoscape layout](https://github.com/radiusdesk/rd_gui/blob/main/rd/resources/js/cytoscape-avsdf.js): `rd/resources/js/cytoscape-avsdf.js`
- [JIT visualization](https://github.com/radiusdesk/rd_gui/blob/main/rd/resources/js/jit-yc.js): `rd/resources/js/jit-yc.js`
- [Layout base](https://github.com/radiusdesk/rd_gui/blob/main/rd/resources/js/layout-base.js): `rd/resources/js/layout-base.js`
- [Leaflet maps](https://github.com/radiusdesk/rd_gui/blob/main/rd/resources/js/leaflet.js): `rd/resources/js/leaflet.js`
- [Shared JS singletons](https://github.com/radiusdesk/rd_gui/blob/main/rd/resources/js/singletons.js): `rd/resources/js/singletons.js`

### Other components

- **Administrator**

## Connections

- Administrator → Ext launcher: opens frontend (evidence: `rd/app.js`)
- Ext launcher → Classic application: launches (evidence: `rd/app.js`)
- Classic application → WebSocket manager: requires (evidence: `rd/classic/src/Application.js`)
- Dynamic client controller → Add dynamic client: opens form (evidence: `rd/classic/src/controller/cDynamicClients.js`)
- Dynamic client controller → Dynamic client detail: opens detail (evidence: `rd/classic/src/controller/cDynamicClients.js`)
- Dynamic client grid → Dynamic client controller: dispatches actions
- Client screen → Client grid: displays grid
- AP link controller → AP linked clients: reloads view (evidence: `rd/classic/src/view/aps/vcApViewLinkClients.js`)
