Major Changes - Version 6
Version 6 is a complete rewrite of the library in TypeScript, shipping typed declarations (.d.ts) for every function while keeping a consistent, promise-based API. It remains a zero-dependency node.js backend/server-side library (it will not run in a browser).
New Functions
- camera() detected cameras
- keyboard() detected keyboards
- mouse() detected pointing devices
- thunderbolt() Thunderbolt controllers and devices
- pci() PCI devices (experimental)
- npu() detected NPUs / AI accelerators (experimental)
- software() installed software / applications
- npm() globally installed npm packages
- gpu() graphics controllers (replaces the controllers part of graphics())
- displays() monitors / displays (replaces the displays part of graphics())
New Attributes
- osInfo() added installDate (operating system installation date)
- osInfo() added displayServer (wayland, x11, quartz, dwm, surfaceflinger or '' when headless)
- bios() added iBridge (Apple iBridge / security chip: modelName, build, bootUuid, secureBoot - macOS only)
- displays() added serial, displayId and productionYear on Windows (previously macOS only)
- displays() added RDP as connection type for remote desktop / indirect displays (Windows)
- gpu() added temperatureGpu on Apple Silicon (optional macos-temperature-sensor package)
- cpuTemperature() added support for the macos-temperature-sensor package (Apple Silicon, incl. chipset / SoC temperature)
Extended Windows Support
- disksIO(), fsStats(), fsOpenFiles() and thunderbolt() are now also available on Windows
Fixes (open version 5 issues resolved in version 6)
- displays() EDID parsing with multiple monitors - all displays reported the first monitor's model, resolution and size (Linux, #997)
- displays() display positions (positionX / positionY) are now parsed from xrandr (Linux, #866)
- displays() per-display refresh rate instead of copying the primary monitor's rate to all displays (Windows, #853)
- displays() monitor data (connection type, size) is now correlated by InstanceName - fixes swapped values on multi-GPU setups (Windows, #764)
- displays() mirrored/duplicated monitors are now reported as separate physical displays; monitors that are attached but inactive (e.g. "PC screen only") are not listed (Windows, #940)
- displays() and gpu() share the result of their common base query when called in parallel (e.g. via getStaticData()) - the expensive system_profiler (macOS) / win32_VideoController (Windows) call runs only once
- displays() vendor/model fallback from Win32_DesktopMonitor is now matched per display via PNPDeviceID - previously only the first entry was considered (Windows, idea from #855)
- get() returns a migration hint for the removed graphics key instead of silently dropping it
Breaking Changes
Be aware, that the new version 6.x is NOT fully backward compatible to version 5.x ...
We modernized the library with a full TypeScript rewrite and made a few interface changes. Please review the list below and adapt your code:
| Topic | Old (V5) | New (V6) | Comments |
|---|---|---|---|
| time() | synchronous | await si.time() | time() is now asynchronous and returns a promise |
| version() | synchronous | await si.version() | version() is now asynchronous too - all functions are now async |
| callbacks | si.cpu(data => {...}) | removed | callbacks are no longer available - use async / await (preferred) or promises |
| graphics() | { controllers, displays } | gpu() displays() |
graphics() was removed and split into two functions, each returning a plain array. get() returns a migration hint for the removed graphics key |
| language | JavaScript | TypeScript | typed .d.ts declarations are now shipped for every function |
| module resolution | deep require('.../dist/...') | exports map (both require and import) |
only documented entry points are importable; deep dist/... paths gone |
| Node.js | older versions | >= 20.0 | minimum Node.js version is now 20.0 |
Modular Imports (new)
The whole library, a single operating system, or a single function can now be imported individually:
- require('systeminformation') - whole library (all functions, all platforms)
- require('systeminformation/cpu') - a single function (platform detected at runtime)
- require('systeminformation/linux') - a whole operating system (/darwin, /windows, /bsd, /sun)
- require('systeminformation/linux/cpu') - a single function of a single operating system
This keeps bundles small: unused operating-system implementations can be tree-shaken away.
Test Full Version 6 Functionality
If you want to see all function results on your machine, please head over to Testing section. We implemented a tiny test suite where you can easily go through all functions and test results on your machine without coding.
Major Changes - Version 5
New Functions
- audio() detailed audio information
- bluetoothDevices() detailed information detected bluetooth devices
- printers() detailed printer information
- usb() detailed USB information
- wifiInterfaces() detected Wi-Fi interfaces
- wifiConnections() active Wi-Fi connections
Breaking Changes
Be aware, that the new version 5.x is NOT fully backward compatible to version 4.x ...
We had to make several interface changes to keep systeminformation as consistent as possible. We highly recommend to go through the complete list and adapt your own code to be again compatible to the new version 5:
| Function | Old | New (V5) | Comments |
|---|---|---|---|
| unsupported values | -1 | null | values which are unknown or unsupported on platform |
| battery() | hasbattery cyclecount ischarging designedcapacity maxcapacity acconnected timeremaining |
hasBattery cycleCount isCharging designedCapacity maxCapacity acConnected timeRemaining |
pascalCase conformity |
| blockDevices() | fstype | fsType | pascalCase conformity |
| cpu() | speedmin speedmax |
speedMin speedMax |
pascalCase conformity |
| cpu().speed cpu().speedMin cpu().speedMax |
string values | now returning numerical values |
better value handling |
| cpuCurrentspeed() | cpuCurrentSpeed() | function name changed pascalCase conformity |
|
| currentLoad() | avgload currentload currentload_user currentload_system currentload_nice currentload_idle currentload_irq raw_currentload |
avgLoad currentLoad currentLoadUser currentLoadSystem currentLoadNice currentLoadIdle currentLoadIrq rawCurrentLoad |
pascalCase conformity |
| dockerContainerStats() | mem_usage mem_limit mem_percent cpu_percent cpu_stats precpu_stats memory_stats |
memUsage memLimit memPercent cpuPercent cpuStats precpuStats memoryStats |
pascalCase conformity |
| dockerContainerProcesses() | pid_host | pidHost | pascalCase conformity |
| graphics().display | pixeldepth resolutionx resolutiony sizex sizey |
pixelDepth resolutionX resolutionY sizeX sizeY |
pascalCase conformity |
| networkConnections() | localaddress localport peeraddress peerport |
localAddress localPort peerAddress peerPort |
pascalCase conformity |
| networkInterfaces() | carrier_changes | carrierChanges | pascalCase conformity |
| processes() | mem_vsz mem_rss pcpu pcpuu pcpus pmem |
memVsz memRss cpu cpuu cpus mem |
pascalCase conformity renamed attributes |
| processLoad() | result as object | result as array of objects | function now allows to provide more than one process (as a comma separated list) |
| services() | pcpu pmem |
cpu mem |
renamed attributes |
| vbox() | HPET PAE APIC X2APIC ACPI IOAPIC biosAPICmode TRC |
hpet pae apic x2Apic acpi ioApic biosApicMode rtc |
pascalCase conformity |
I know, these are a lot of changes, but for the sake of a consistent interface and to be future proof, we think that this was necessary. Thank you for your understanding.
Other Improvements and Changes
- baseboard(): added memMax, memSlots
- bios(): added language and features (linux)
- cpu(): extended AMD processor list
- cpu(): extended socket list (win)
- cpu(): added virtualization if cpu supports virtualization
- cpu(): now flags are part of this function
- cpuTemperature(): added socket and chipset temperature (linux)
- disksIO(): added waitTime, waitPercent (linux)
- fsSize(): added available
- fsSize(): improved calculation of used
- getData(): support for passing parameters and filters (see section General / getData)
- graphics(): extended properties macOS
- graphics(): extended nvidia-smi parsing
- networkInterfaces(): type detection improved (win - wireless)
- memLayout(): extended manufacturer list (decoding)
- memLayout(): added ECC flag
- osInfo(): better fqdn (win)
- osinfo(): added hypervizor if hyper-v is enabled (win only)
- system(): better Raspberry PI detection
- system(): added virtual and virtualHost (if system is virtual instance)
- uuid(): better value support
- uuid(): added MACs
- uuid(): better Raspberry Pi hardware ID
- versions(): added bash, zsh, fish, powershell, dotnet
- Apple M1 Silicon extended support
- updated TypeScript definitions
Test Full Version 5 Functionality
If you want to see all function results on your machine, please head over to Testing section. We implemented a tiny test suite where you can easily go through all functions and test resuls on your machine without coding.
Major Changes - Version 4
New Functions
- chassis() chassis information
- vboxInfo() detailed virtualBox VM information
- wifiNetworks() detailed information about available wifi networks
Breaking Changes
- networkStats(): will provide an array of stats for all given interfaces. In previous versions only one interface was provided as a parameter. Pass '*' for all interfaces
- networkStats(): rx and tx changed to rx_bytes and tx_bytes
- dockerContainerStats() will provide an array of stats for all given docker containers. In previous versions only one interface was provided as a parameter. Pass '*' for all docker containers
Other Changes
- system(): optimized system detection (e.g. new Raspberry Pi models, ...)
- system(), bios(), baseboard(): information also as non-root (linux)
- graphics(): added pip, pip3, virtualBox,
- versions(): better controller and display detection, fixes
- networkInterfaces(): optimization, fixes
- networkStats() added operstate, type, duplex, mtu, speed, carrierChanges
- added TypeScript definitions
Be aware, that the new version 4.x is NOT fully backward compatible to version 3.x ...
Major Changes - Version 3
- works only with node.js v4.0.0 and above (using now internal ES6 promise function, arrow functions, ...)
- Promises. As you can see in the documentation, you can now also use it in a promise oriented way. But callbacks are still supported.
- Async/Await. Due to the promises support, systeminformation also works perfectly with the `async/await` pattern (available in node.js v7.6.0 and above). See example in the docs.
Full Version History
Full version histrory (every single release version from version 1.x.x to 5.x.x) can be viewed here