Skip to Content
Fingerprint ProtectionWebGPU Fingerprint Protection

WebGPU Fingerprint Protection

Control WebGPU API behavior and protect GPU adapter information with --bot-config-webgpu.


Prerequisites


Overview

WebGPU is a modern graphics API that exposes GPU adapter details (vendor, architecture, device name) and rendering characteristics. These properties can serve as a fingerprint surface because they vary by hardware and driver version. BotBrowser controls WebGPU behavior at the browser engine level to maintain consistency across different host systems.


Quick Start

# Default: use profile-defined WebGPU values (recommended) chromium-browser \ --bot-profile="/path/to/profile.enc" \ --user-data-dir="$(mktemp -d)"

By default, BotBrowser uses the profile’s WebGPU adapter data. No extra flags needed.


Configuration

The --bot-config-webgpu flag controls WebGPU behavior:

ValueBehavior
profile (default)Return profile-defined adapter information. GPU probes see the target device’s values regardless of the host hardware.
realUse the host system’s actual GPU. Useful when you need native GPU performance and don’t need WebGPU fingerprint protection.
disabledDisable WebGPU entirely. navigator.gpu.requestAdapter() returns null.
# Use profile GPU identity (default) chromium-browser \ --bot-profile="/path/to/profile.enc" \ --bot-config-webgpu=profile # Use host GPU directly chromium-browser \ --bot-profile="/path/to/profile.enc" \ --bot-config-webgpu=real # Disable WebGPU chromium-browser \ --bot-profile="/path/to/profile.enc" \ --bot-config-webgpu=disabled

Common Scenarios

Cross-platform consistency

Run a Windows profile on a Linux server. The WebGPU adapter reports the profile’s GPU identity, not the host’s:

const browser = await chromium.launch({ executablePath: process.env.BOTBROWSER_EXEC_PATH, headless: true, args: [ "--bot-profile=/path/to/win-profile.enc", ], }); const page = await browser.newPage(); const adapter = await page.evaluate(async () => { const gpu = navigator.gpu; if (!gpu) return null; const adapter = await gpu.requestAdapter(); if (!adapter) return null; const info = await adapter.requestAdapterInfo(); return { vendor: info.vendor, architecture: info.architecture }; }); console.log(adapter); // Profile's GPU, not host's await browser.close();

Disable WebGPU for lightweight tasks

If your workload does not require WebGPU, disable it to reduce resource usage:

chromium-browser \ --bot-profile="/path/to/profile.enc" \ --bot-config-webgpu=disabled \ --user-data-dir="$(mktemp -d)"

Troubleshooting / FAQ

ProblemSolution
requestAdapter() returns nullOn headless servers without a GPU, ensure GPU emulation is active (default). If you set --bot-gpu-emulation=false, the system needs Vulkan support (e.g., mesa-vulkan-drivers).
WebGPU shows host GPU infoCheck that --bot-config-webgpu is set to profile (default) and not real.
High CPU during WebGPU operationsExpected on software-rendered environments. See Performance Optimization.

Next Steps


Related documentation: Advanced Features | CLI Flags


Legal Disclaimer & Terms of Use Responsible Use Guidelines . BotBrowser is for authorized fingerprint protection and privacy research only.