npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

node-vm-detect

v0.5.0

Published

VM Detection Library for Nodejs & Electron

Readme

Node VM Detect

A Node.js library that detects whether the current environment is a virtual machine (VM).
It operates as a cross-platform C++ module via the VMAware library.
This can be particularly useful for detecting VM environments in Electron-based applications.
For more detailed information on VM detection, refer to VMAware.

Install

npm i node-vm-detect

Usage

Call without any options—this is sufficient for most use cases.

import { getVMInfo } from 'node-vm-detect';

const {
  isVM,
  brand,
  type,
  conclusion,
  percentage,
  detectedTechniques,
} = await getVMInfo();

Return value

| Value | Type | Desciption | | -------------------- | ---------------- | --------------------------------------- | | isVM | boolean | Whether the current PC is a VM | | brand | string | VM brand | | type | string | VM type | | conclusion | string | Commentary on detection results | | percentage | number | VM certainty. A value between 0 and 100 | | detectedTechniques | TechniqueFlags[] | List of detected techniques |

Setting flags

These correspond to the setting flags used in VMAware.
For a detailed description of each flag, refer to VMAware.

Additional setting flags

Additional setting flags can be specified as an array in the settings field.

settings: ('MULTIPLE' | 'HIGH_THRESHOLD' | 'DYNAMIC')[]

| Flag | Desciption | | ---------------- | ---------------------------------------------------------- | | MULTIPE | Displays multiple VM Hosts. | | HIGH_THRESHOLD | Increase the threshold for determining if a VM is present. | | DYNAMIC | Display the conclusion message in detail. |

Technique flags

These correspond to VMAware’s flag table.

Setting a preset

techniques can be selected from DEFAULT or ALL (only one must be selected).

techniques: 'DEFAULT' | 'ALL'

| Flag | Desciption | | --------- | ----------------------------------------------------------------- | | DEFAULT | Use all techniques except the excluded ones. This is the default. | | ALL | Use all techniques, including excluded techniques. |

Custom technique flags

You can selectively exclude or include certain techniques.

techniques: {
  only: TechniqueFlags[],
  disable: TechniqueFlags[]
}

Examples

1. Use all available techniques without exclusions

getVMInfo({
  techniques: 'ALL',
});

2. Increase detection threshold and show more detail in the conclusion message

getVMInfo({
  settings: ['HIGH_THRESHOLD', 'DYNAMIC'],
});

3. Exclude the VMID technique

getVMInfo({
  techniques: {
    disable: ['VMID'],
  },
});

4. Use only the CPU_BRAND technique

getVMInfo({
  techniques: {
    only: ['CPU_BRAND'],
  },
});

Same result as:

getVMInfo({
  techniques: {
    only: ['VMID', 'CPU_BRAND'],
    disable: ['VMID'],
  },
});

Clean

VM detection is performed on the child process.
After detection, child process is removed. This is useful for new detections without affecting existing results, or to reduce memory usage.
When called with false, it works in the current process, and the detection results are stored in memory and recycled on each call with false.
The default value is true.

getVMInfo({ clean: true });

Supported Platforms & Requirements

VMAware supports 32-bit environments, but this library only supports 64-bit platforms.

  • Requires Node.js 18 or later (Electron 23 or later).

| OS | Arch | Supported | | ------- | ----- | --------- | | Windows | x64 | ✅ | | Windows | x86 | ❌ | | Windows | Arm64 | ✅ | | Windows | Arm32 | ❌ | | MacOS | x64 | ✅ | | MacOS | Arm64 | ✅ | | Linux | x64 | ✅ | | Linux | x86 | ❌ | | Linux | Arm64 | ✅ | | Linux | Arm32 | ❌ |

TODOS

  • Deno support with Deno FFI
  • Include other VM detection packages

LICENSE

MIT