systeminformation: Node.js System and OS Data Without Native Dependencies
System Information Library for Node.JS
At a glance
- What is it?
- A no-dependency Node.js library that reads CPU, memory, disk, network, Docker and process data from the host system, and the trade-offs that come with shelling out to platform tools.
- Who is it for?
- Adopt systeminformation if you are building a server-side Node.js, Bun or Deno service that needs host CPU, memory, disk, network, Docker or process data and you want a single MIT-licensed package with no npm dependencies.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 3 days ago.
- What is it written in?
- Mainly JavaScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 3, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What systeminformation Solves for Node.js Backend Services
A Node.js process can read a few things about its host through the built-in os module: load average, free memory, CPU model strings. That is roughly where the standard library stops. Anything past that, such as per-disk layout, GPU and display data, battery state, USB and Bluetooth devices, printer queues, Docker image and volume listings, or the list of running processes, requires either a native addon or platform-specific shell commands whose output formats differ across Linux, macOS and Windows.
systeminformation targets that gap. The README describes it as a "Lightweight collection of 50+ functions to retrieve detailed hardware, system and OS information" and lists coverage for system, cpu, baseboard, battery, memory, disks and filesystem, network, docker, software, services and processes. It supports Linux, macOS, partial Windows, FreeBSD, OpenBSD, NetBSD, SunOS and Android.
The audience is narrow and clear: backend and server-side developers. The README states the library "is supposed to be used as a backend/server-side library and will definitely not work within a browser". If you are writing a monitoring agent, a container dashboard, a license-fingerprinting routine that reads hardware UUIDs, or an internal admin panel that shows the machine it runs on, this is the kind of package you would reach for. If you need client-side telemetry, it is the wrong tool and the README says so outright.
How the Library Reads Hardware and OS Data
The package ships with no npm dependencies, which is unusual for something that reports on this many subsystems. The mechanism implied by the API and the platform list is that each function wraps the native tooling of the host OS and normalizes the result into a JavaScript object. On Linux that means reading from /proc and /sys and invoking utilities; on macOS it means parsing system_profiler and related commands; on Windows it means querying WMI-style interfaces. The README notes that version 5 added smartmontools support for diskLayout() on macOS and macos-temperature-sensor support for cpuTemperature(), which confirms the pattern: optional external tools are consulted for specific fields.
That design has a direct consequence. Every function is asynchronous, and the README states that all functions except version and time are implemented that way. The cost is process spawning. The README's own npx example warns that obtaining "all static data" may take up to 30 seconds, which tells you the full sweep is not something to call on a tight interval.
Data flow is one-directional. A call such as si.cpu() returns a promise resolving to a plain object; there is no cache layer described in the README, no event stream, and no background collector. You decide when to sample and how often. For a dashboard polling every few seconds, that means one function call per metric per interval, and the platform command behind each call runs again each time.
Installing systeminformation and Making the First Call
The README gives two equivalent install forms. The --save flag is redundant on modern npm but appears in the documentation.
npm install systeminformation --saveor the shorter form the README also lists:
npm i systeminformationIf you want to see output before committing to the dependency, the README documents an npx path that runs the bundled CLI. The bin entry in package.json maps the systeminformation command to lib/cli.js, so this resolves to the installed CLI rather than a remote script.
npx systeminformation infoThat command returns basic System, OS and CPU information. Running the bare command without info obtains all static data and, per the README, may take up to 30 seconds.
npx systeminformationIn application code, the README's example uses CommonJS require and the promise style introduced in version 3. The package.json declares "type": "commonjs" and main as ./lib/index.js, so this form matches the published entry point.
const si = require("systeminformation");
si.cpu()
.then((data) => console.log(data))
.catch((error) => console.error(error));What you should see is an object describing the CPU rather than a formatted string. The README does not print a sample payload, so the exact field names are something to inspect on your own machine before you write code against them. If you want the version 6 beta instead, the README gives npm i systeminformation@beta and directs you to the V6 docs and the V6 major changes page, with the explicit warning to check all breaking changes first.
Platform Coverage Is Uneven, and Windows Is Partial
The README's own support line is the most important sentence for anyone planning cross-platform deployment: Linux, macOS, partial Windows, FreeBSD, OpenBSD, NetBSD, SunOS and Android. Partial Windows is not a footnote. It means some functions return less on Windows than on Linux or macOS, and the README does not enumerate which fields degrade.
The release history reinforces this. Version 5.29.0 added the OS code name for Windows in osInfo(). Version 5.30.0 added user information to processes() on Windows and the README records that it "needed to be reverted". That is a concrete example of a Windows-specific field being added and then pulled back, which is the kind of thing you want to know before you build a Windows agent that depends on it.
There is a second constraint that is easy to miss. Much of the data comes from external commands, so a minimal container image without the relevant utilities will return empty or partial results even on a fully supported platform. The README does not list required external binaries per function, so if you are deploying into a distroless or scratch-based image, you are testing the boundaries yourself.
The third limitation is timing. Any function that shells out costs more than a syscall. Polling ten of these functions every second in a busy service is a different proposition from calling si.cpu() once at startup, and the README's 30-second warning for the full sweep is the only performance guidance it offers.
systeminformation Compared with Node's Built-In os Module
The obvious alternative is the os module that ships with Node.js. The difference is scope, not quality. os gives you cpus(), totalmem(), freemem(), loadavg(), networkInterfaces(), uptime(), hostname() and platform(). It is synchronous, in-process, and cannot fail because a command is missing.
systeminformation answers questions os cannot: which physical disks exist and how they are partitioned, what GPU and displays are attached, what USB and Bluetooth devices are present, which Docker images and volumes are on the host, what processes are running and under which user, what the battery state is, and what hardware UUID the machine reports. The README also notes a "better uuid function to get unique hardware and OS UUIDs" in version 5, which is a capability os does not have at all.
So the choice is not which is better but which question you are asking. If you need free memory and load average for a health endpoint, os is the correct answer and adding a dependency buys nothing. If you need disk layout or Docker inventory, os cannot help and the shell-out cost of systeminformation is the price of the data. A reasonable service uses both: os for the hot path that runs every second, systeminformation for the slower inventory that runs at startup or on a schedule.
Version 6 Beta, Maintenance and Licence
The repository is not archived, and the last push was on 2026-09-22. The most recent releases are v6.0.0-beta.16, v6.0.0-beta.15 and v6.0.0-beta.14, all from September 2026. The published package.json, however, declares version 5.33.13, so the stable line and the beta line are running in parallel.
The README is explicit that version 6 is "written completely in TypeScript" and "coming with a lot of new features and improvements", with a cleaned-up API that "will also have some breaking changes". It also asks testers to prefix issues with "v6.beta.0: ". That is a beta programme, not a stable release, and treating it as production-ready because the version number is high would be a mistake.
The upgrade cost is therefore real and asymmetric. Staying on 5.x means no breaking changes but no new v6 features. Moving to 6.x means auditing every call site against the V6 major changes page the README links, because the API was deliberately cleaned up. The README also documents that version 4 is still installable via npm install systeminformation@4 for compatibility reasons, which tells you the project has a history of maintaining older major lines rather than forcing migration.
On licensing, package.json declares MIT. That is a permissive licence, and the practical implication is that you can use the library in closed-source server software. This is not legal advice, and the LICENSE file in the repository is the authoritative text. Note also that the README describes the project as supported through sponsorship, with a Buy me a coffee funding entry in package.json; that is a funding model, not a commercial support contract, and it does not come with an SLA.
Editorial conclusion
Adopt systeminformation if you are building a server-side Node.js, Bun or Deno service that needs host CPU, memory, disk, network, Docker or process data and you want a single MIT-licensed package with no npm dependencies. Do not adopt it for browser code, since the README states it will not work there, and do not adopt it if you need a supported, non-beta API today, because the current release line is 5.33.13 while version 6 is still in beta and the README warns of breaking changes. Before wiring it into production, verify the platform-specific fields you actually read on your target OS, check the SECURITY.md and CHANGELOG.md in the repository, and pin the version you tested rather than tracking the beta tag.
Frequently asked questions
How do I install systeminformation in a Node.js project?
The README gives npm install systeminformation --save, or the shorter npm i systeminformation. To try it without installing, the README documents npx systeminformation info for basic System, OS and CPU data.
How do I use systeminformation to get system information?
Require the package and call an asynchronous function such as si.cpu(), which resolves to a data object. The README states that all functions except version and time are implemented as asynchronous functions.
Does systeminformation work in a browser?
No. The README states the library is supposed to be used as a backend/server-side library and will definitely not work within a browser.
Which operating systems does systeminformation support?
The README lists Linux, macOS, partial Windows, FreeBSD, OpenBSD, NetBSD, SunOS and Android support. Windows coverage is described as partial.
Is systeminformation version 6 stable?
No. Version 6 is in beta, with the README pointing testers to the V6 docs and V6 major changes pages and warning that breaking changes are included. The published package.json declares the stable version as 5.33.13.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/sebhildebrandt-systeminformation)