Skip to content

Machine Information

Iak edited this page Mar 10, 2023 · 1 revision

Machine Information

The Machine Information data is often used in the evaluation of constraints, so they must be consistent for all native implementations.

As our Node.js implementation is the reference implementation for the native part, the library systeminformation is used to get most of the values for the operating systems Mac, Win and Linux:

Have a look at this lib and the REST interface (/machine) to know which info is available and how the data is represented.

Although the lib makes a good job in always returning the same data representation, unfortunately the returned data from the operating systems is not always so easy to handle. E.g. The amount of disks and the allowed storage to write can be quite different on different OSs.

Our goal is to be as consistent as possible for all platforms in the meaning of this values.


Because not every information can automatically be determined by a library, some of the machine information is set in the configuration and can (also) be read via the Machine Information module. E.g. the Machine category or domain.

If it can not be automatically detected, some values may also be hard-coded within the Native Part of different platforms. E.g. on Android and IOS one value of category should be set to [ "Portable" ].


Most machine values are cached in the Universal part, so that it doesn't need to request the information to often. See machineInformation.js for the specific cache values.

Machine Values

The following table represents all data the machine module can response and some infos for the specific Operating systems. For the data representation, please have a look at the REST interface. For the meaning -- if not given -- please have a look at https://systeminformation.io/os.html or the linked wiki pages.

Attention: Not every data can be collected from every platform, so the user needs to be aware that some Information is maybe not available. If a value can't be read by a Native part, the information is not given to the Universal part (instead of null, nothing is sent back).

*) _How is the data retrieved: n (native part self-implemented, e.g. via Node.js APIs, or via external library, e.g. systeminformation), c (set via config), u (universal part self-implemented), a (automatically determined depending on other values or periphery)

Data How* Meaning Browser Linux Mac IOS Android Win
name c The configured name. If not configured, same as hostname
hostname n
description c
id n canvas fingerprinting vendorID
online u see Internal Variables
onlineCheckingAddresses c see Internal Variables
os.platform n Varies based on platform platformjs "darwin" "linux"
os.distro n Varies based on platform e.g iOS on iphones "iOS" "android"
os.release n Varies based on platform int sdk-version
cpu.cores n Gets the reported logical cpu cores WebCPU
cpu.physicalCores n Gets an estimation of the physical cores missing
cpu.processors n null Hardcoded to 1 missing
cpu.speed n missing missing
cpu.currentLoad n missing missing (0 if not available) use instead: "currentSpeed" as avg Core Speed
cpu.loadLastMinute u
cpu.loadLastTenMinutes u
cpu.loadLastHalfHour u
cpu.loadLastHour u
cpu.loadLastHalfDay u
cpu.loadLastDay u
mem.total n the total available memory for the engine Gets the total available memory for the tab, not supported in Firefox and Safari Window.performance.memory
mem.free n Yes
mem.load n the current used memory in percent between 0.0 - 1.0, (1 - free/total) Yes
disk[x].type n missing "SSD" "SSD"
disk[x].total n navigator.storage.estimate() gives the estimated free disk space
disk[x].free n should be the free and writeable space for the Engine Yes
disk[x].used n Yes
battery.hasBattery n hardcoded to true hardcoded to true
battery.percent n Gets the current charge level
battery.maxCapacity n missing missing may vary by 2%
battery.isCharging n Boolean
battery.timeremaining n Gives the time remaining in seconds missing missing
battery.acconnected n missing missing
display[x].currentResX n screen width usable pixels (smaller than physical ones)
display[x].currentResY n screen height usable pixels (smaller than physical ones)
network[x].type n wireless for wifi, cellular for cell network "wireless", "cellular", "wired", "p2p"
network[x].ip4 n (only one per network)
network[x].netmaskv4 n -
network[x].netmaskv6 n missing -
network[x].ip6 n (only one per network)
network[x].mac n missing
wifi[x] n array of available wifi networks Currently not implemented
wifi[x].ssid n
wifi[x].connected n if connected to the wifi network
wifi[x].bssid n
wifi[x].signalLevel n
wifi[x].quality n
wifi[x].security n missing
outputs[x]** a in u and n + c see Engine Variables, e.g, if a display is available "Screen", "Speaker" "Screen", "Speaker" "Speaker", "Screen"
inputs[x]** a in u and n + c see Engine Variables "Keyboard", "Camera", "Microphone", "Touchscreen" "Keyboard", "Numpad", "Microphone", "Touchscreen" "Keyboard", "Camera", "Microphone", "Numpad", "Touchscreen"
classes[x]** a in n + c see Engine Variables "Portable" "Portable"
domains[x] c see Engine Variables
currentlyConnectedEnvironments[x] a in u + c see Engine Variables
processes.runUntrustedCode u How?
processes.acceptUserTasks a in n + c see Engine Variables true

**) bold values = hard-coded, non-bold = determined by the Native part

Architecture: Machine Information component

PROCEED-Engine_Machine_Information

This is the Dev Wiki

Clone this wiki locally