hwinfo-reader
v1.0.1
Published
Read HWiNFO64 sensor data from Windows shared memory — fully typed TypeScript library
Downloads
212
Maintainers
Readme
hwinfo-reader
Read HWiNFO64 sensor data from Windows shared memory — fully typed TypeScript library.
Returns structured sensor data (CPU temps, GPU clocks, fan speeds, voltages, etc.) directly as JavaScript objects. No printing, no side effects.
Requirements
- Windows only
- HWiNFO64 running with Shared Memory Support enabled
(Settings → HWiNFO Gadget → Activate Shared Memory) - Node.js ≥ 18
Installation
npm install hwinfo-readerNo native build tools needed — uses koffi with prebuilt binaries.
Usage
One-shot read
import { readHWiNFO } from 'hwinfo-reader';
const snapshot = readHWiNFO();
console.log(snapshot.sensors.length); // e.g. 18
console.log(snapshot.readings.length); // e.g. 260
// Sensors have readings nested inside
for (const sensor of snapshot.sensors) {
console.log(sensor.nameOriginal); // "CPU [#0]: Intel Core i7-13620H"
for (const r of sensor.readings) {
console.log(r.labelOriginal, r.value, r.unit); // "CPU Package" 55 "°C"
}
}
// Or use the flat readings list directly
const cpuTemp = snapshot.readings.find(
r => r.labelOriginal === 'CPU Package' && r.readingType === 'Temperature'
);
console.log(cpuTemp?.value); // 55Persistent reader (efficient polling)
import { createHWiNFOReader } from 'hwinfo-reader';
const reader = createHWiNFOReader();
const timer = setInterval(() => {
const data = reader.read();
// use data...
}, 1000);
process.on('SIGINT', () => {
clearInterval(timer);
reader.close();
process.exit(0);
});API
readHWiNFO(options?): HWiNFOSnapshot
Opens shared memory, reads once, closes. Best for infrequent polling.
createHWiNFOReader(options?): { read(): HWiNFOSnapshot, close(): void }
Keeps the mapping open across calls. Best for frequent polling (avoids repeated OpenFileMapping overhead).
HWiNFOSnapshot
interface HWiNFOSnapshot {
version: number;
version2: number;
lastUpdate: bigint; // HWiNFO poll timestamp
sensors: Sensor[]; // each sensor has .readings[] nested inside
readings: SensorReading[]; // flat list of all readings across all sensors
}Sensor
interface Sensor {
index: number;
sensorId: number;
sensorInst: number;
nameOriginal: string; // "GPU [#1]: NVIDIA GeForce RTX 5060 Laptop"
nameUser: string;
readings: SensorReading[];
}SensorReading
interface SensorReading {
index: number;
readingType: SensorReadingType; // 'Temperature' | 'Clock' | 'Usage' | ...
sensorIndex: number;
readingId: number;
labelOriginal: string; // "GPU Core"
labelUser: string;
unit: string; // "°C", "MHz", "%", "W", ...
value: number;
valueMin: number;
valueMax: number;
valueAvg: number;
}
type SensorReadingType =
| 'None' | 'Temperature' | 'Voltage' | 'Fan'
| 'Current' | 'Power' | 'Clock' | 'Usage' | 'Other' | 'Unknown';License
MIT
