WebGPU Fingerprinting: The Next Generation of GPU Tracking
WebGPU exposes detailed GPU adapter information and capability limits. Learn how this next-gen API creates new fingerprinting vectors.
Introduction
WebGPU is the successor to WebGL, providing modern, low-level GPU access in the browser. While it enables more powerful graphics and compute capabilities, it also exposes detailed GPU information through its adapter and device APIs. This creates new fingerprinting vectors that complement existing WebGL signals.
What WebGPU Reveals
Adapter Information
const adapter = await navigator.gpu.requestAdapter();
const info = await adapter.requestAdapterInfo();
console.log({
vendor: info.vendor, // "nvidia"
architecture: info.architecture, // "ampere"
device: info.device, // GPU model identifier
description: info.description, // Human-readable description
});
Capability Limits
WebGPU devices have specific limits that vary by GPU:
const device = await adapter.requestDevice();
const limits = device.limits;
console.log({
maxTextureDimension2D: limits.maxTextureDimension2D, // 16384
maxBufferSize: limits.maxBufferSize, // 268435456
maxStorageBufferBindingSize: limits.maxStorageBufferBindingSize, // 134217728
maxComputeWorkgroupSizeX: limits.maxComputeWorkgroupSizeX, // 256
maxComputeInvocationsPerWorkgroup: limits.maxComputeInvocationsPerWorkgroup, // 256
});
Feature Sets
const features = adapter.features;
// Set of supported features like:
// "texture-compression-bc", "float32-filterable",
// "shader-f16", "bgra8unorm-storage"
Different GPUs support different feature sets, creating additional fingerprinting entropy.
WebGPU vs WebGL Consistency
A critical detection vector is the consistency between WebGPU and WebGL signals:
| WebGL Signal | WebGPU Equivalent | Must Match |
|---|---|---|
| UNMASKED_RENDERER | adapter.requestAdapterInfo().device | Same GPU |
| UNMASKED_VENDOR | adapter.requestAdapterInfo().vendor | Same vendor |
| MAX_TEXTURE_SIZE | limits.maxTextureDimension2D | Consistent |
| Extensions | Features | Related capabilities |
If WebGL reports an NVIDIA GPU but WebGPU reports an AMD adapter, the inconsistency is trivially detectable.
Browser Support
WebGPU is available in:
- Chrome 113+ (stable)
- Edge 113+ (same engine)
- Firefox (behind flag, in development)
- Safari (partial, WebGPU-based Metal backend)
For browsers that do not support WebGPU, navigator.gpu is undefined. This is not a detection signal since many users have browsers or configurations without WebGPU support.
Fingerprinting Entropy
| Signal | Typical Entropy |
|---|---|
| Vendor + architecture | ~4 bits |
| Capability limits | ~6 bits |
| Feature set | ~8 bits |
| Combined | ~15-18 bits |
WebGPU provides significantly more entropy than WebGL due to the detailed capability limits and feature set enumeration.
How BotCloud Handles WebGPU Fingerprinting
BotCloud profiles include WebGPU configuration that:
- Returns adapter info consistent with the profile's GPU identity
- Reports capability limits matching the claimed GPU model
- Exposes features appropriate for the GPU and driver version
- Maintains consistency with WebGL signals on the same profile
When WebGPU is not expected for a profile's browser version, it is correctly absent rather than artificially blocked.
Best Practices
- Ensure WebGPU and WebGL report the same GPU - Cross-API inconsistency is the easiest detection
- Match capability limits to GPU model - Each GPU has specific limits
- Include appropriate features - Feature sets vary by GPU generation
- Consider browser version - WebGPU is only available in Chrome 113+