native-machine-id
TypeScript icon, indicating that this package has built-in type declarations

0.1.3 • Public • Published

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-id

Or use it directly in the CLI

npx native-machine-id
npx native-machine-id --raw

Usage

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 IOPlatformUUID from the IOKit 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 the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography registry.

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

/native-machine-id/

    Package Sidebar

    Install

    npm i native-machine-id

    Weekly Downloads

    30,021

    Version

    0.1.3

    License

    Apache-2.0

    Unpacked Size

    27.5 kB

    Total Files

    14

    Last publish

    Collaborators

    • gagik.am
    • devtoolsbot
    • nirinchev