# neuelsamsec/librepro architecture

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

- Interactive diagram: https://gitdiagram.com/neuelsamsec/librepro
- Repository: https://github.com/neuelsamsec/librepro

## Overview

LibreHardwareMonitor is a hardware-sensor monitoring library and Windows Forms application. The principal workflow is to open a Computer, discover enabled hardware, update it through the visitor model, and expose sensor readings to an application or the graphical interface. The UI also presents readings in a hardware tree, plots, tray icons, and gadgets; the tree additionally includes an HTTP server and web assets. The README documents the library’s update workflow and device categories. Sampled implementation excerpts cover storage discovery and selected controller drivers, not the full UI-to-library wiring.

Main entry points: [`LibreHardwareMonitorLib/Hardware/Computer.cs`](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitorLib/Hardware/Computer.cs) (Computer facade), [`LibreHardwareMonitor.Windows.Forms/UI/MainForm.cs`](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/UI/MainForm.cs) (Main window), [`LibreHardwareMonitor.Windows.Forms/Program.cs`](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/Program.cs) (App startup), [`LibreHardwareMonitor.Windows.Forms/UI/TreeModel.cs`](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/UI/TreeModel.cs) (UI hardware model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application and UI"]
  node_program["App startup<br/>[Program.cs]"]
  node_mainform["Main window<br/>[MainForm.cs]"]
  node_uimodel["UI hardware model<br/>[TreeModel.cs]"]
  node_treeview["Hardware tree<br/>[TreeViewAdv.cs]"]
  node_plots["Sensor plots<br/>[PlotPanel.cs]"]
  node_tray["Tray and gadget<br/>[SystemTray.cs]"]
end

subgraph group_core["Monitoring core"]
  node_computer["Computer facade<br/>[Computer.cs]"]
  node_visitor["Update visitor<br/>[UpdateVisitor.cs]"]
  node_hardware["Hardware and sensors<br/>[Hardware.cs]"]
  node_sensor["Sensor values<br/>[Sensor.cs]"]
end

subgraph group_devices["Hardware acquisition"]
  node_cpu["CPU and GPU<br/>[CpuGroup.cs]"]
  node_motherboard["Motherboard"]
  node_storage["Storage devices<br/>[StorageGroup.cs]"]
  node_network["Network devices<br/>[NetworkGroup.cs]"]
  node_controllers["Device controllers"]
end

subgraph group_extensions["Interfaces and controls"]
  node_webserver["HTTP server<br/>[HttpServer.cs]"]
  node_webui["Web assets<br/>[ohm_web.js]"]
end

node_user(("User"))
node_consumer(("Library consumer"))

node_user -->|"launches"| node_program
node_program -->|"opens"| node_mainform
node_mainform -->|"manages monitoring"| node_computer
node_consumer -->|"opens and updates"| node_computer
node_computer -->|"accepts"| node_visitor
node_visitor -->|"updates hardware"| node_hardware
node_hardware -->|"updates values"| node_sensor
node_computer -->|"discovers"| node_cpu
node_computer -->|"discovers"| node_motherboard
node_computer -->|"discovers"| node_storage
node_computer -->|"discovers"| node_network
node_computer -->|"discovers"| node_controllers
node_mainform -->|"presents readings"| node_uimodel
node_uimodel -->|"supplies tree data"| node_treeview
node_mainform -->|"shows sensor plots"| node_plots
node_mainform -->|"offers tray views"| node_tray
node_webserver -.->|"serves assets"| node_webui

click node_program "https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/Program.cs"
click node_mainform "https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/UI/MainForm.cs"
click node_uimodel "https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/UI/TreeModel.cs"
click node_treeview "https://github.com/neuelsamsec/librepro/blob/master/Aga.Controls/Tree/TreeViewAdv.cs"
click node_plots "https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/UI/PlotPanel.cs"
click node_tray "https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/UI/SystemTray.cs"
click node_webserver "https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/Utilities/HttpServer.cs"
click node_webui "https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/Resources/Web/js/ohm_web.js"
click node_computer "https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitorLib/Hardware/Computer.cs"
click node_visitor "https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/UI/UpdateVisitor.cs"
click node_hardware "https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitorLib/Hardware/Hardware.cs"
click node_sensor "https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitorLib/Hardware/Sensor.cs"
click node_cpu "https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitorLib/Hardware/Cpu/CpuGroup.cs"
click node_motherboard "https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitorLib/Hardware/Motherboard/MotherboardGroup.cs"
click node_storage "https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitorLib/Hardware/Storage/StorageGroup.cs"
click node_network "https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitorLib/Hardware/Network/NetworkGroup.cs"
click node_controllers "https://github.com/neuelsamsec/librepro/tree/master/LibreHardwareMonitorLib/Hardware/Controller"

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_program,node_mainform,node_uimodel,node_treeview,node_plots,node_tray,node_user toneBlue
class node_computer,node_visitor,node_hardware,node_sensor toneAmber
class node_cpu,node_motherboard,node_storage,node_network,node_controllers toneMint
class node_webserver,node_webui toneRose
class node_consumer toneIndigo
```

## Components

### Application and UI

- [App startup](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/Program.cs): `LibreHardwareMonitor.Windows.Forms/Program.cs`
- [Main window](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/UI/MainForm.cs): `LibreHardwareMonitor.Windows.Forms/UI/MainForm.cs`
- [UI hardware model](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/UI/TreeModel.cs): `LibreHardwareMonitor.Windows.Forms/UI/TreeModel.cs`
- [Hardware tree](https://github.com/neuelsamsec/librepro/blob/master/Aga.Controls/Tree/TreeViewAdv.cs): `Aga.Controls/Tree/TreeViewAdv.cs`
- [Sensor plots](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/UI/PlotPanel.cs): `LibreHardwareMonitor.Windows.Forms/UI/PlotPanel.cs`
- [Tray and gadget](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/UI/SystemTray.cs): `LibreHardwareMonitor.Windows.Forms/UI/SystemTray.cs`

### Monitoring core

- [Computer facade](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitorLib/Hardware/Computer.cs): `LibreHardwareMonitorLib/Hardware/Computer.cs`
- [Update visitor](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/UI/UpdateVisitor.cs): `LibreHardwareMonitor.Windows.Forms/UI/UpdateVisitor.cs`
- [Hardware and sensors](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitorLib/Hardware/Hardware.cs): `LibreHardwareMonitorLib/Hardware/Hardware.cs`
- [Sensor values](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitorLib/Hardware/Sensor.cs): `LibreHardwareMonitorLib/Hardware/Sensor.cs`

### Hardware acquisition

- [CPU and GPU](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitorLib/Hardware/Cpu/CpuGroup.cs): `LibreHardwareMonitorLib/Hardware/Cpu/CpuGroup.cs`
- [Motherboard](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitorLib/Hardware/Motherboard/MotherboardGroup.cs): `LibreHardwareMonitorLib/Hardware/Motherboard/MotherboardGroup.cs`
- [Storage devices](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitorLib/Hardware/Storage/StorageGroup.cs): `LibreHardwareMonitorLib/Hardware/Storage/StorageGroup.cs`
- [Network devices](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitorLib/Hardware/Network/NetworkGroup.cs): `LibreHardwareMonitorLib/Hardware/Network/NetworkGroup.cs`
- [Device controllers](https://github.com/neuelsamsec/librepro/tree/master/LibreHardwareMonitorLib/Hardware/Controller): `LibreHardwareMonitorLib/Hardware/Controller`

### Interfaces and controls

- [HTTP server](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/Utilities/HttpServer.cs): `LibreHardwareMonitor.Windows.Forms/Utilities/HttpServer.cs`
- [Web assets](https://github.com/neuelsamsec/librepro/blob/master/LibreHardwareMonitor.Windows.Forms/Resources/Web/js/ohm_web.js): `LibreHardwareMonitor.Windows.Forms/Resources/Web/js/ohm_web.js`

### Other components

- **User**
- **Library consumer**

## Connections

- User → App startup: launches
- App startup → Main window: opens
- Main window → Computer facade: manages monitoring
- Library consumer → Computer facade: opens and updates
- Computer facade → Update visitor: accepts
- Update visitor → Hardware and sensors: updates hardware
- Hardware and sensors → Sensor values: updates values
- Computer facade → CPU and GPU: discovers
- Computer facade → Motherboard: discovers
- Computer facade → Storage devices: discovers
- Computer facade → Network devices: discovers
- Computer facade → Device controllers: discovers
- Main window → UI hardware model: presents readings
- UI hardware model → Hardware tree: supplies tree data
- Main window → Sensor plots: shows sensor plots
- Main window → Tray and gadget: offers tray views
- HTTP server → Web assets: serves assets
