native-machine-id
v0.2.3
Published
Native retrieval of a unique desktop machine ID without admin privileges or child processes. Faster and more reliable alternative to node-machine-id.
Readme
native-machine-id
Native retrieval of a unique desktop machine ID without admin privileges or child processes. Faster and more reliable alternative to node-machine-id.
Installation
npm install native-machine-idOr use it directly in the CLI
npx native-machine-id
npx native-machine-id --rawUsage
As a module
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();Supported Platforms
- macOS: Uses the
IOPlatformUUIDfrom theIOKitframework. - Linux: Uses the
/var/lib/dbus/machine-idfile to retrieve the machine ID. If this file does not exist, it falls back to/etc/machine-id. - Windows: Uses the
MachineGuidfrom theHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptographyregistry.
Comparison with node-machine-id
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.
Migrating from node-machine-id
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');
}Credits
Influenced by the work from denisbrodbeck/machineid and automation-stack/node-machine-id.
License
Apache-2.0
