Native retrieval of a unique desktop machine ID without admin privileges or child processes. Faster and more reliable alternative to node-machine-id.
npm install native-machine-id
Or use it directly in the CLI
npx native-machine-id
npx native-machine-id --raw
import { getMachineId } from 'native-machine-id';
// Get the machine ID, hashed with SHA-256
const hashedId = getMachineId();
console.log('Hashed Machine ID:', hashedId);
// Get the raw machine ID (should not be exposed in untrusted environments)
const rawId = getMachineId({ raw: true });
console.log('Original Machine ID:', rawId);
// Or synchronously
import { getMachineIdSync } from 'native-machine-id';
const id = getMachineIdSync();
-
macOS: Uses the
IOPlatformUUID
from theIOKit
framework. -
Linux: Uses the
/var/lib/dbus/machine-id
file to retrieve the machine ID. If this file does not exist, it falls back to/etc/machine-id
. -
Windows: Uses the
MachineGuid
from theHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography
registry.
This module provides similar functionality to node-machine-id while using native access to system APIs without the need for child processes, making it much faster and reliable.
Here's a table of performance comparisons between the two libraries, based on the average runtime from 1000 iterations of the getMachineIdSync
and machineIdSync
functions, from scripts/benchmark.ts
:
Test | node-machine-id | native-machine-id | Improvement |
---|---|---|---|
Mac | |||
Raw | 10.71ms | 0.0072ms | 1494x |
Hashed | 12.42ms | 0.0176ms | 707x |
Linux | |||
Raw | 3.26ms | 0.0059ms | 557x |
Hashed | 3.25ms | 0.0088ms | 368x |
Windows | |||
Raw | 45.36ms* | 0.0122ms | 3704x |
Hashed | 28.66ms* | 0.0272ms | 1053x |
* - Windows tests may be inaccurate due to potential caching.
If you were previously using node-machine-id
, you can use the following mapping to get a result with the following hashing transformation. This is not guaranteed always to 1:1 match the output of node-machine-id
for all cases. For example on Linux, it falls back to /etc/machine-id
if /var/lib/dbus/machine-id
is not available.
import { createHash } from 'crypto';
import { getMachineIdSync } from 'native-machine-id';
function machineIdSync(original: boolean): string | undefined {
const rawMachineId = getMachineIdSync({ raw: true }).toLowerCase();
return original
? rawMachineId
: createHash('sha256').update(rawMachineId).digest('hex');
}
Influenced by the work from denisbrodbeck/machineid and automation-stack/node-machine-id.
Apache-2.0