systeminformation

Dependency-free Node.js library exposing 50+ functions for deep hardware, OS, and system telemetry

Library
npm
v5.33.16
3,137 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
87 /100 Excellent
Development Activity 96
Maintenance 84
Community 68
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
79 /100 Good
Architecture 82
Code Quality 78
Innovation 74
Learning Curve 80

systeminformation is a lightweight, dependency-free Node.js library that surfaces detailed hardware and operating system data through more than fifty async functions covering CPU, memory, disks, network interfaces, graphics, battery, Docker containers, USB, Bluetooth, audio, printers, and more. It runs across Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD, SunOS, and Android, shelling out to native OS utilities under the hood and normalizing their output into consistent JavaScript objects.

With over 600 million cumulative downloads and top-10 ranking among backend npm packages, it has become the default choice for server-side monitoring dashboards, diagnostics tools, and DevOps agents that need OS-level visibility without writing platform-specific glue code themselves.

What You Get

  • 50+ async functions grouped by domain: system, CPU, memory, filesystem, network, graphics, battery, processes, users, Docker, USB, audio, and Bluetooth
  • Cross-platform support for Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD, SunOS, and basic Android
  • Zero npm dependencies — parses native OS command output and system files directly
  • A bundled CLI (npx systeminformation) for quick ad-hoc system snapshots without writing code
  • TypeScript type definitions shipped with the package for editor autocomplete and compile-time safety

Common Use Cases

  • Building server monitoring dashboards that report live CPU, memory, and disk metrics
  • Feeding hardware fingerprints (UUID, serials) into licensing or device-registration systems
  • Collecting Docker container and image stats for internal observability tooling
  • Diagnosing customer support issues by capturing full OS/hardware snapshots from an Electron or CLI app

Under The Hood

Architecture: The library is organized as one module per hardware/OS domain (cpu.js, memory.js, network.js, graphics.js, docker.js, usb.js, audio.js, bluetooth.js, etc.), all re-exported through a thin index.js facade that also handles Windows-specific bootstrapping (codepage and PowerShell detection) at load time. Each domain module dispatches on process.platform internally, shelling out to native utilities (e.g. wmic/PowerShell on Windows, /proc and dmidecode on Linux, system_profiler/sysctl on macOS) and parsing their text output into normalized JS objects, so callers get one consistent shape regardless of OS.

Tech Stack: Pure CommonJS JavaScript with zero runtime npm dependencies — the entire ~20,000-line codebase relies only on Node’s built-in child_process, os, and fs modules plus hand-written parsers for command output. TypeScript type definitions (index.d.ts) are hand-maintained and shipped alongside the JS source rather than generated, and a cli.js entry point exposes the library as an npx-runnable binary.

Code Quality: Tests live under test/ (test.js, testAll.js, plus a Deno-specific runner), exercising each domain function against the live host OS rather than mocked fixtures — appropriate for a library whose correctness is inherently platform-dependent, though it means CI coverage is bounded by the runner’s OS/hardware. Modules follow a consistent internal style (platform branches, promise-wrapped exports, optional callback support for backward compatibility), and biome.json/tslint.json indicate linting is enforced in CI.

API Design: The public surface favors flat, promise-returning functions grouped by domain (si.cpu(), si.mem(), si.diskLayout()) with no configuration objects required to get started — require('systeminformation') plus a single await call returns usable data. Version 5 intentionally introduced breaking changes to make field names and shapes consistent across functions, trading short-term migration pain for longer-term API coherence; comprehensive docs at systeminformation.io and inline JSDoc back every function.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers