| Component name | webgpu |
|---|---|
| In the visitorId | yes |
| structuredId group | gpu (graphics) |
| Hashing | always a digest (first 128 bits of SHA-256) |
| Excluded under | no browser class |
| Inner timeout | 1000 ms |
| Added in | signalsVersion 3 |
WebGPU is the newer way for web pages to use the graphics chip. Before doing any work, a page can ask for an “adapter” and read what it is and what it can do. WhiskerJS reads only that description and turns it into a short code. It gives a second, independent view of the GPU next to WebGL.
What it reads
navigator.gpu.requestAdapter(), with no options.- From the adapter’s
infoattribute:vendor,architecture,deviceanddescription(non-string values become empty). - The adapter’s
featuresset, as a sorted list of names. - Seven entries of the adapter’s
limits:maxBindGroups,maxBufferSize,maxComputeInvocationsPerWorkgroup,maxComputeWorkgroupStorageSize,maxStorageBufferBindingSize,maxTextureDimension2DandmaxVertexBuffers.
No device is requested and the deprecated requestAdapterInfo() method is not called.
How the technique works
The parts are written as vendor=...;architecture=...;device=...;description=...;features=a,b,c;limits=n1,n2,... and the whole string is always hashed, since webgpu is a large component. Sorting the features makes the value independent of the order the browser lists them in. The call is asynchronous; like every collector it races its own 1000 ms timeout.
Why it helps
WebGPU adapters expose the GPU vendor and architecture as the browser chooses to present them, plus feature and limit sets that follow the GPU, the driver and the browser’s WebGPU implementation. That complements the WebGL components in the gpu group, and a mismatch between WebGPU and WebGL vendors is something your server can look at.
Stability
It changes when the browser’s WebGPU implementation changes what it reports (new features or limits in an update), with a driver update, or when a different GPU is used. Where WebGPU is not available the component is consistently unavailable, which is stable too.
Browser support and what blocks it
okin browsers that offernavigator.gpuand return an adapter, in secure contexts only. Availability depends on the browser, its version and the operating system; check the support matrix.unavailable/no_apiwherenavigator.gpuis missing. In the container test runs used for these pages, headless Firefox and WebKit had nonavigator.gpu.unavailable/no_contextwhen no adapter is returned: headless Chromium in the same container exposed the API but returned no adapter.- Not in the exclusion table.
Privacy
It reveals graphics hardware details. Everything leaves the library only as a 32-character digest. requestAdapter() shows no prompt, and WhiskerJS makes no request.
How WhiskerJS handles noise and failures
| Status | ruleId | When |
|---|---|---|
ok |
none | adapter read; value is a digest |
unavailable |
no_api |
no navigator.gpu or no requestAdapter |
unavailable |
no_context |
requestAdapter() returned no adapter |
unavailable |
no_digest |
no Web Crypto |
blocked |
security_error, threw |
requestAdapter() rejected or a read threw |
excluded |
caller_excluded |
your exclude list |
timed_out |
timeout, aborted |
1000 ms inner timeout, budget, abort |
Example value
"webgpu": { "status": "ok", "value": "862da19ca084b185c1d8c76af676a08b", "hashed": true }
The headless test browsers used for these pages reported { "status": "unavailable", "ruleId": "no_context" } (Chromium) and no_api (Firefox, WebKit).
Questions and answers
Does reading WebGPU start using my GPU?
WhiskerJS only calls navigator.gpu.requestAdapter() and reads the adapter's info, features and limits. It never requests a device, so no GPU work is submitted.
Why is webgpu unavailable in my browser?
Either the browser has no navigator.gpu (no_api), for example because WebGPU is not shipped or not enabled there or the page is not a secure context, or it returned no adapter (no_context), which happens without a supported GPU.
Why is the deprecated requestAdapterInfo not used?
It prints a warning in the console in browsers that deprecated it, and WhiskerJS never writes to the console. The adapter's info attribute gives the same fields.