Das os-Modul aus Node liefert grundlegende System-Informationen — Plattform, Architektur, Speicher, CPU, User. In Electron-Apps brauchst du es regelmäßig, oft im Setup oder in der „About"-Information. Hier die wichtigsten Methoden.

Plattform und Architektur

JavaScript
import os from 'node:os';

os.platform();    // 'darwin', 'win32', 'linux'
os.arch();        // 'x64', 'arm64', 'ia32'
os.type();        // 'Darwin', 'Windows_NT', 'Linux'
os.release();     // '23.5.0' (Kernel-Version)
os.version();     // 'Darwin Kernel Version ...'

platform und arch sind das, was du am häufigsten brauchst. Auch verfügbar als process.platform und process.arch — identische Werte, der direkte Pfad ist weniger zu importieren.

User und Hostname

JavaScript
os.hostname();        // 'macbook-anna'
os.userInfo();        // { uid, gid, username, homedir, shell }
os.userInfo().username;
os.homedir();         // gleicher Wert wie userInfo().homedir

Klassischer Use-Case: Telemetrie mit Hostname (anonymisiert), oder default-Werte für „Du bist als <username> eingeloggt".

Speicher und CPU

JavaScript
os.totalmem();    // Bytes — gesamter RAM
os.freemem();     // Bytes — freier RAM

os.cpus();
// [{ model: 'Apple M2 Pro', speed: 3504, times: { user, nice, sys, idle, irq } }, ...]

os.cpus().length;   // Anzahl CPU-Cores
os.loadavg();       // [1, 5, 15] — 1/5/15-Minuten Load (nur macOS/Linux)
os.uptime();        // Sekunden seit System-Boot

loadavg funktioniert nicht auf Windows (gibt [0, 0, 0]). Wer plattform-übergreifend Last messen will: zeitbasiertes CPU-Sampling mit os.cpus().

Netzwerk-Interfaces

JavaScript
os.networkInterfaces();
// {
//   en0: [
//     { address: '192.168.1.42', family: 'IPv4', mac: 'a1:b2:...', internal: false }
//   ],
//   lo0: [...]
// }

// Erste nicht-interne IPv4
const ip = Object.values(os.networkInterfaces())
    .flat()
    .find(i => i.family === 'IPv4' && !i.internal)
    ?.address;

Praktisch für Hostname-Anzeige in Settings, Multi-Device-Setups, Telemetrie.

EOL und Trennzeichen

JavaScript
os.EOL;   // '\n' auf macOS/Linux, '\r\n' auf Windows
os.tmpdir();   // System-Temp-Verzeichnis (gleicher Wert wie app.getPath('temp'))

os.EOL ist relevant beim Schreiben von Konfig-Dateien, die der User in einem Editor öffnet — Windows-User erwarten \r\n.

Verwendung in About-Dialog

JavaScript main.js
ipcMain.handle('app:about-info', () => ({
    appVersion: app.getVersion(),
    electronVersion: process.versions.electron,
    chromiumVersion: process.versions.chrome,
    nodeVersion: process.versions.node,
    os: `${os.type()} ${os.release()}`,
    arch: os.arch(),
    cpus: os.cpus().length,
    totalRAM: Math.round(os.totalmem() / 1024 / 1024 / 1024) + ' GB'
}));

Klassischer „About"-Dialog mit System-Info — User-freundlich, hilfreich für Bug-Reports.

Interessantes

os.platform() = process.platform.

Identische Werte. process.platform ist immer verfügbar (kein Import), os.platform() braucht den Import. Für inline-Checks oft process.platform schneller.

os ist nur im Main-Prozess.

Im Sandbox-Renderer kein direktes Node-Modul. Wer System-Info im Renderer braucht: per IPC vom Main holen — typisch beim Setup einmal abfragen, nicht in jeder Funktion neu.

os.freemem und os.totalmem sind Bytes.

Für menschen-lesbare Anzeige: Math.round(os.totalmem() / 1024**3) für GB. macOS hat eigene Memory-Pressure-Logik — freemem ist nicht 1:1 das, was Activity Monitor zeigt.

os.loadavg auf Windows = [0, 0, 0].

Nicht aussagekräftig — Windows hat das Konzept nicht nativ. Wer Load messen will: os.cpus() über die Zeit samplen und Differenz berechnen.

os.tmpdir() = app.getPath('temp').

Identische Werte. Für Konsistenz innerhalb der Electron-App: app.getPath('temp'). Sonst geht beides.

networkInterfaces() kann viele Einträge liefern.

VPN-Interfaces, Docker-Netzwerke, virtuelle Adapter. Für „die" lokale IP: nach family === 'IPv4' und !internal filtern, dann meist das erste oder das in einem privaten Bereich (192.168.*, 10.*).

Weiterführende Ressourcen

Externe Quellen

/ Weiter

Zurück zu Native APIs & Filesystem

Zur Übersicht