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.
npm i node-vm-detectCall 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();| 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 | 
These correspond to the setting flags used in VMAware.
For a detailed description of each flag, refer to VMAware.
Presets can be selected from DEFAULT or ALL (only one must be selected).
preset: 'DEFAULT' | 'ALL'
| Flag | Desciption | 
|---|---|
DEFAULT | 
Use all techniques except the excluded ones. This is the default. | 
ALL | 
Use all techniques, including excluded techniques. | 
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. | 
These correspond to VMAware’s flag table.
You can selectively exclude or include certain techniques.
techniques: {
  only: TechniqueFlags[],
  disable: TechniqueFlags[]
}
getVMInfo({
  preset: 'ALL',
});getVMInfo({
  settings: ['HIGH_THRESHOLD', 'DYNAMIC'],
});getVMInfo({
  techniques: {
    disable: ['VMID'],
  },
});getVMInfo({
  techniques: {
    only: ['CPU_BRAND'],
  },
});Same result as:
getVMInfo({
  techniques: {
    only: ['VMID', 'CPU_BRAND'],
    disable: ['VMID'],
  },
});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 });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 | ❌ | 
- Deno support with Deno FFI
 - Include other VM detection packages
 
MIT