Skip to content
Free tool · Runs in your browser

WebGL test and fingerprint

Whether WebGL and WebGL 2 work in your browser, the GPU they report, their extensions and limits, and the hash a site can build from them, with a check that a worker and WebGPU say the same.

Opens a WebGL and a WebGL 2 context, reads what they report, renders a small scene twice, and asks a worker and WebGPU the same question. Everything runs in this tab; nothing is sent to a server.

Reading WebGL…

What WebGL tells a website

WebGL is the browser's 3D graphics API, and opening a context is enough to learn a lot about the machine. The unmasked renderer names the GPU model and, in Chromium, the graphics API underneath. The list of supported extensions and the numeric limits (largest texture, number of texture units, shader precision) follow from the GPU, the driver and the browser version. A site can read all of it without drawing anything, and nothing asks the visitor for permission.

Fingerprinting scripts usually hash those values together, which is the parameters hash above. Some also render a small scene and hash the pixels, which picks up differences in how drivers rasterize and round. The scene here is the same one the browser fingerprint test renders.

Stable, and the same everywhere

A GPU renders the same scene the same way every time, so the test renders it twice: two different images mean noise is being added on readback. It also asks a worker's OffscreenCanvas for the renderer. Within one browser there is one GPU process, so the page and the worker should agree; a script or extension that rewrites getParameter in the page often does not reach workers.

Finally it asks WebGPU for its adapter and compares the GPU vendor. WebGPU describes the hardware separately (vendor and architecture, such as nvidia and ampere), so a WebGL renderer that was changed without WebGPU being changed to match shows up as two different vendors. The WebGPU test shows the adapter in full.

Related surfaces

The canvas fingerprint is the 2D counterpart and depends more on fonts than on the GPU. The audio and font tests cover the rest of the hardware and operating-system surfaces. For background, see what WebGL fingerprinting is.

FAQ

How do I check if WebGL is working?

Open this page: the first two rows under the result say whether a WebGL 1 and a WebGL 2 context could be created, and the renderer line names the GPU drawing them. If WebGL is unavailable, hardware acceleration may be switched off in the browser's settings, the GPU or driver may be on the browser's blocklist, or an extension may be blocking it. Updating the graphics driver and turning hardware acceleration back on fixes most cases.

What is WEBGL_debug_renderer_info?

A WebGL extension that exposes the real ("unmasked") GPU vendor and renderer. Without it, the standard VENDOR and RENDERER parameters return generic values; in Chrome they are WebKit and WebKit WebGL. Chromium browsers return the full strings; Firefox returns a simplified renderer, and Safari reports only Apple GPU.

Why does my renderer start with ANGLE?

Chrome, Edge and other Chromium browsers do not hand WebGL to the graphics driver directly. They run it through ANGLE, which translates it to Direct3D 11 on Windows, Metal on macOS, and OpenGL or Vulkan on Linux and Android, and the renderer string says so: ANGLE (NVIDIA, NVIDIA GeForce RTX 3070 (0x00002484) Direct3D11 vs_5_0 ps_5_0, D3D11) is an NVIDIA card drawn through Direct3D 11.

What does SwiftShader or Basic Render Driver mean?

That WebGL is drawn by the CPU, not a GPU. SwiftShader is Chrome's software renderer, llvmpipe is Mesa's on Linux, and Microsoft Basic Render Driver is Windows' fallback when no GPU driver is usable: the same Chrome as above, started with the GPU disabled, reported ANGLE (Microsoft, Microsoft Basic Render Driver (0x0000008C) Direct3D11 vs_5_0 ps_5_0, D3D11). Software rendering is normal on servers and in virtual machines and rare on a desktop, which is why sites treat it as a hint of automation.

Is the WebGL fingerprint unique?

The strings and limits are shared by everyone with the same GPU, driver and browser, so they narrow a visitor down to a model of hardware rather than a person. The rendered image adds a little more, since drivers round differently. Combined with the other surfaces, it becomes much more specific.

Can WebGL fingerprinting be faked?

The strings are easy to change; agreement is not. The renderer has to match the extensions and limits that GPU really has, the pixels it renders, what a worker reports, and what WebGPU says about the same hardware. This page checks the last three, and the full fingerprint test checks the rest.

Clearcote puts this into practice

An open-source Chromium with fingerprint control compiled into the engine. A drop-in for Playwright & Puppeteer.

Free for one browser with GitHub. No card.