coderef

WebGPULimited availability

The navigator.gpu API performs operations such as rendering and computation on dedicated graphics hardware (also known as a Graphics Processing Unit).

Not yet supported in all major browsers — check the table and provide a fallback.

Browser support

DesktopChrome
1–143Not supported
144+Supportedsince Jan 13, 2026
Current: 155
Edge
12–143Not supported
144+Supportedsince Jan 21, 2026
Current: 154
Firefox
✕Not supportedup to 157
Current: 157
Safari
1–18.6Not supported
26+Supportedsince Sep 15, 2025
Current: 27
MobileChrome Android
18–120Not supported
121+Supportedsince Jan 23, 2024
Current: 155
Firefox Android
✕Not supportedup to 157
Current: 157
Safari iOS
1–18.6Not supported
26+Supportedsince Sep 15, 2025
Current: 27

How to use

Not supported in Firefox, Firefox Android. Use feature detection below and provide a fallback (or a polyfill) for those browsers.

Example

JS
if (!navigator.gpu) throw new Error("WebGPU not supported");

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const context = canvas.getContext("webgpu");
context.configure({ device, format: navigator.gpu.getPreferredCanvasFormat() });

Feature detection

JS · check before using
if ("HTMLCanvasElement" in globalThis && "getContext" in HTMLCanvasElement.prototype) {
  // HTMLCanvasElement.getContext is available
}

Sub-features

Support for each part of the feature (301). The overall table above shows when the whole feature works.

Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
GPU144144✕26121✕26
GPU.getPreferredCanvasFormat144144✕26121✕26
GPU.requestAdapter144144✕26121✕26
GPU.requestAdapter.discrete_adapter_default_ac✕✕✕✕121✕✕
GPU.wgslLanguageFeatures144144✕26121✕26
GPUAdapter144144✕26121✕26
GPUAdapter.features144144✕26121✕26
GPUAdapter.info144144✕26144✕26
GPUAdapter.limits144144✕26121✕26
GPUAdapter.requestDevice144144✕26121✕26
GPUAdapter.requestDevice.handles_duplicate_calls144144✕✕140✕✕
GPUAdapter.requestDevice.undefined_limits144144✕✕144✕✕
GPUAdapterInfo144144✕26121✕26
GPUAdapterInfo.architecture144144✕26121✕26
GPUAdapterInfo.description144144✕26121✕26
GPUAdapterInfo.device144144✕26121✕26
GPUAdapterInfo.subgroupMaxSize144144✕✕144✕✕
GPUAdapterInfo.subgroupMinSize144144✕✕144✕✕
GPUAdapterInfo.vendor144144✕26121✕26
GPUBindGroup144144✕26121✕26
Show 281 more
Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
GPUBindGroup.label144144✕26121✕26
GPUBindGroupLayout144144✕26121✕26
GPUBindGroupLayout.label144144✕26121✕26
GPUBuffer144144✕26121✕26
GPUBuffer.destroy144144✕26121✕26
GPUBuffer.getMappedRange144144✕26121✕26
GPUBuffer.label144144✕26121✕26
GPUBuffer.mapAsync144144✕26121✕26
GPUBuffer.mapState144144✕26121✕26
GPUBuffer.size144144✕26121✕26
GPUBuffer.unmap144144✕26121✕26
GPUBuffer.usage144144✕26121✕26
GPUCanvasContext144144✕26121✕26
GPUCanvasContext.canvas144144✕26121✕26
GPUCanvasContext.configure144144✕26121✕26
GPUCanvasContext.configure.toneMapping144144✕✕144✕✕
GPUCanvasContext.getConfiguration144144✕26144✕26
GPUCanvasContext.getCurrentTexture144144✕26121✕26
GPUCanvasContext.unconfigure144144✕26121✕26
GPUCommandBuffer144144✕26121✕26
GPUCommandBuffer.label144144✕26121✕26
GPUCommandEncoder144144✕26121✕26
GPUCommandEncoder.beginComputePass144144✕26121✕26
GPUCommandEncoder.beginComputePass.timestampWrites144144✕✕144✕✕
GPUCommandEncoder.beginRenderPass144144✕26121✕26
GPUCommandEncoder.beginRenderPass.depthSlice_option144144✕✕144✕✕
GPUCommandEncoder.beginRenderPass.separate_depth_stencil_read-only144144✕✕144✕✕
GPUCommandEncoder.beginRenderPass.timestampWrites144144✕✕144✕✕
GPUCommandEncoder.clearBuffer144144✕26121✕26
GPUCommandEncoder.copyBufferToBuffer144144✕26121✕26
GPUCommandEncoder.copyBufferToTexture144144✕26121✕26
GPUCommandEncoder.copyTextureToBuffer144144✕26121✕26
GPUCommandEncoder.copyTextureToTexture144144✕26121✕26
GPUCommandEncoder.finish144144✕26121✕26
GPUCommandEncoder.insertDebugMarker144144✕26121✕26
GPUCommandEncoder.label144144✕26121✕26
GPUCommandEncoder.popDebugGroup144144✕26121✕26
GPUCommandEncoder.pushDebugGroup144144✕26121✕26
GPUCommandEncoder.resolveQuerySet144144✕26121✕26
GPUCompilationInfo144144✕26121✕26
GPUCompilationInfo.messages144144✕26121✕26
GPUCompilationMessage144144✕26121✕26
GPUCompilationMessage.length144144✕26121✕26
GPUCompilationMessage.lineNum144144✕26121✕26
GPUCompilationMessage.linePos144144✕26121✕26
GPUCompilationMessage.message144144✕26121✕26
GPUCompilationMessage.offset144144✕26121✕26
GPUCompilationMessage.type144144✕26121✕26
GPUComputePassEncoder144144✕26121✕26
GPUComputePassEncoder.dispatchWorkgroups144144✕26121✕26
GPUComputePassEncoder.dispatchWorkgroupsIndirect144144✕26121✕26
GPUComputePassEncoder.end144144✕26121✕26
GPUComputePassEncoder.insertDebugMarker144144✕26121✕26
GPUComputePassEncoder.label144144✕26121✕26
GPUComputePassEncoder.popDebugGroup144144✕26121✕26
GPUComputePassEncoder.pushDebugGroup144144✕26121✕26
GPUComputePassEncoder.setBindGroup144144✕26121✕26
GPUComputePassEncoder.setBindGroup.unset_bind_group144144✕✕121✕✕
GPUComputePassEncoder.setPipeline144144✕26121✕26
GPUComputePipeline144144✕26121✕26
GPUComputePipeline.getBindGroupLayout144144✕26121✕26
GPUComputePipeline.label144144✕26121✕26
GPUDevice144144✕26121✕26
GPUDevice.adapterInfo144144✕26144✕26
GPUDevice.createBindGroup144144✕26121✕26
GPUDevice.createBindGroupLayout144144✕26121✕26
GPUDevice.createBindGroupLayout.storageTexture_access_read-write_read-only144144✕✕144✕✕
GPUDevice.createBindGroupLayout.texture_rgb10a2uint144144✕✕121✕✕
GPUDevice.createBuffer144144✕26121✕26
GPUDevice.createCommandEncoder144144✕26121✕26
GPUDevice.createComputePipeline144144✕26121✕26
GPUDevice.createComputePipeline.optional_entryPoint144144✕✕144✕✕
GPUDevice.createComputePipelineAsync144144✕26121✕26
GPUDevice.createComputePipelineAsync.optional_entryPoint144144✕✕144✕✕
GPUDevice.createPipelineLayout144144✕26121✕26
GPUDevice.createQuerySet144144✕26121✕26
GPUDevice.createQuerySet.timestamp144144✕✕144✕✕
GPUDevice.createRenderBundleEncoder144144✕26121✕26
GPUDevice.createRenderPipeline144144✕26121✕26
GPUDevice.createRenderPipeline.dual-source-blending144144✕✕144✕✕
GPUDevice.createRenderPipeline.optional_depthcompare_depthwriteenabled144144✕✕121✕✕
GPUDevice.createRenderPipeline.optional_entryPoint144144✕✕144✕✕
GPUDevice.createRenderPipeline.texture_rgb10a2uint144144✕✕121✕✕
GPUDevice.createRenderPipeline.validates_depth_bias_for_line_and_point_topologies144144✕✕144✕✕
GPUDevice.createRenderPipeline.vertex_unorm10-10-10-2144144✕✕121✕✕
GPUDevice.createRenderPipelineAsync144144✕26121✕26
GPUDevice.createRenderPipelineAsync.dual-source-blending144144✕✕144✕✕
GPUDevice.createRenderPipelineAsync.optional_depthcompare_depthwriteenabled144144✕✕121✕✕
GPUDevice.createRenderPipelineAsync.optional_entryPoint144144✕✕144✕✕
GPUDevice.createRenderPipelineAsync.texture_rgb10a2uint144144✕✕121✕✕
GPUDevice.createRenderPipelineAsync.validates_depth_bias_for_line_and_point_topologies144144✕✕144✕✕
GPUDevice.createRenderPipelineAsync.vertex_unorm10-10-10-2144144✕✕121✕✕
GPUDevice.createSampler144144✕26121✕26
GPUDevice.createShaderModule144144✕26121✕26
GPUDevice.createTexture144144✕26121✕26
GPUDevice.createTexture.texture_rgb10a2uint144144✕✕121✕✕
GPUDevice.destroy144144✕26121✕26
GPUDevice.features144144✕26121✕26
GPUDevice.importExternalTexture144144✕26121✕26
GPUDevice.importExternalTexture.color_space_display-p3144144✕✕144✕✕
GPUDevice.importExternalTexture.videoframe_source144144✕26121✕26
GPUDevice.label144144✕26121✕26
GPUDevice.limits144144✕26121✕26
GPUDevice.lost144144✕26121✕26
GPUDevice.popErrorScope144144✕26121✕26
GPUDevice.pushErrorScope144144✕26121✕26
GPUDevice.queue144144✕26121✕26
GPUDevice.uncapturederror_event144144✕27121✕27
GPUDeviceLostInfo144144✕26121✕26
GPUDeviceLostInfo.message144144✕26121✕26
GPUDeviceLostInfo.reason144144✕26121✕26
GPUError144144✕✕121✕✕
GPUError.message144144✕✕121✕✕
GPUExternalTexture144144✕26121✕26
GPUExternalTexture.label144144✕26121✕26
GPUInternalError144144✕26121✕26
GPUInternalError.GPUInternalError144144✕26121✕26
GPUOutOfMemoryError144144✕26121✕26
GPUOutOfMemoryError.GPUOutOfMemoryError144144✕26121✕26
GPUPipelineError144144✕26121✕26
GPUPipelineError.GPUPipelineError144144✕26121✕26
GPUPipelineError.GPUPipelineError.message_optional144144✕26121✕26
GPUPipelineError.reason144144✕26121✕26
GPUPipelineLayout144144✕26121✕26
GPUPipelineLayout.label144144✕26121✕26
GPUQuerySet144144✕26121✕26
GPUQuerySet.count144144✕26121✕26
GPUQuerySet.destroy144144✕26121✕26
GPUQuerySet.label144144✕26121✕26
GPUQuerySet.type144144✕26121✕26
GPUQuerySet.type.timestamp144144✕✕144✕✕
GPUQueue144144✕26121✕26
GPUQueue.copyExternalImageToTexture144144✕26121✕26
GPUQueue.copyExternalImageToTexture.htmlimageelement_imagedata_source144144✕✕121✕✕
GPUQueue.copyExternalImageToTexture.videoframe_source144144✕26121✕26
GPUQueue.label144144✕26121✕26
GPUQueue.onSubmittedWorkDone144144✕26121✕26
GPUQueue.submit144144✕26121✕26
GPUQueue.submit.validates_command_buffer_uniqueness144144✕✕144✕✕
GPUQueue.writeBuffer144144✕26121✕26
GPUQueue.writeTexture144144✕26121✕26
GPURenderBundle144144✕26121✕26
GPURenderBundle.label144144✕26121✕26
GPURenderBundleEncoder144144✕26121✕26
GPURenderBundleEncoder.draw144144✕26121✕26
GPURenderBundleEncoder.drawIndexed144144✕26121✕26
GPURenderBundleEncoder.drawIndexedIndirect144144✕26121✕26
GPURenderBundleEncoder.drawIndirect144144✕26121✕26
GPURenderBundleEncoder.finish144144✕26121✕26
GPURenderBundleEncoder.insertDebugMarker144144✕26121✕26
GPURenderBundleEncoder.label144144✕26121✕26
GPURenderBundleEncoder.popDebugGroup144144✕26121✕26
GPURenderBundleEncoder.pushDebugGroup144144✕26121✕26
GPURenderBundleEncoder.setBindGroup144144✕26121✕26
GPURenderBundleEncoder.setBindGroup.unset_bind_group144144✕✕121✕✕
GPURenderBundleEncoder.setIndexBuffer144144✕26121✕26
GPURenderBundleEncoder.setPipeline144144✕26121✕26
GPURenderBundleEncoder.setVertexBuffer144144✕26121✕26
GPURenderBundleEncoder.setVertexBuffer.unset_vertex_buffer144144✕26121✕26
GPURenderPassEncoder144144✕26121✕26
GPURenderPassEncoder.beginOcclusionQuery144144✕26121✕26
GPURenderPassEncoder.draw144144✕26121✕26
GPURenderPassEncoder.drawIndexed144144✕26121✕26
GPURenderPassEncoder.drawIndexedIndirect144144✕26121✕26
GPURenderPassEncoder.drawIndirect144144✕26121✕26
GPURenderPassEncoder.end144144✕26121✕26
GPURenderPassEncoder.endOcclusionQuery144144✕26121✕26
GPURenderPassEncoder.executeBundles144144✕26121✕26
GPURenderPassEncoder.insertDebugMarker144144✕26121✕26
GPURenderPassEncoder.label144144✕26121✕26
GPURenderPassEncoder.popDebugGroup144144✕26121✕26
GPURenderPassEncoder.pushDebugGroup144144✕26121✕26
GPURenderPassEncoder.setBindGroup144144✕26121✕26
GPURenderPassEncoder.setBindGroup.unset_bind_group144144✕✕121✕✕
GPURenderPassEncoder.setBlendConstant144144✕26121✕26
GPURenderPassEncoder.setIndexBuffer144144✕26121✕26
GPURenderPassEncoder.setPipeline144144✕26121✕26
GPURenderPassEncoder.setScissorRect144144✕26121✕26
GPURenderPassEncoder.setStencilReference144144✕26121✕26
GPURenderPassEncoder.setVertexBuffer144144✕26121✕26
GPURenderPassEncoder.setVertexBuffer.unset_vertex_buffer144144✕26121✕26
GPURenderPassEncoder.setViewport144144✕26121✕26
GPURenderPipeline144144✕26121✕26
GPURenderPipeline.getBindGroupLayout144144✕26121✕26
GPURenderPipeline.label144144✕26121✕26
GPUSampler144144✕26121✕26
GPUSampler.label144144✕26121✕26
GPUShaderModule144144✕26121✕26
GPUShaderModule.getCompilationInfo144144✕26121✕26
GPUShaderModule.label144144✕26121✕26
GPUSupportedFeatures144144✕26121✕26
GPUSupportedFeatures.@@iterator144144✕26121✕26
GPUSupportedFeatures.entries144144✕26121✕26
GPUSupportedFeatures.feature_bgra8unorm-storage144144✕26121✕26
GPUSupportedFeatures.feature_clip-distances144144✕✕144✕✕
GPUSupportedFeatures.feature_depth-clip-control144144✕26121✕26
GPUSupportedFeatures.feature_depth32float-stencil8144144✕26121✕26
GPUSupportedFeatures.feature_dual-source-blending144144✕✕144✕✕
GPUSupportedFeatures.feature_float32-blendable144144✕26144✕26
GPUSupportedFeatures.feature_float32-filterable144144✕✕121✕✕
GPUSupportedFeatures.feature_indirect-first-instance144144✕26121✕26
GPUSupportedFeatures.feature_rg11b10ufloat-renderable144144✕26121✕26
GPUSupportedFeatures.feature_shader-f16144144✕26121✕26
GPUSupportedFeatures.feature_texture-compression-astc144144✕26121✕26
GPUSupportedFeatures.feature_texture-compression-bc144144✕✕121✕✕
GPUSupportedFeatures.feature_texture-compression-etc2144144✕26121✕26
GPUSupportedFeatures.feature_timestamp-query144144✕26144✕26
GPUSupportedFeatures.forEach144144✕26121✕26
GPUSupportedFeatures.has144144✕26121✕26
GPUSupportedFeatures.keys144144✕26121✕26
GPUSupportedFeatures.size144144✕26121✕26
GPUSupportedFeatures.values144144✕26121✕26
GPUSupportedLimits144144✕26121✕26
GPUSupportedLimits.maxBindGroups144144✕26121✕26
GPUSupportedLimits.maxBindGroupsPlusVertexBuffers144144✕26121✕26
GPUSupportedLimits.maxBindingsPerBindGroup144144✕26121✕26
GPUSupportedLimits.maxBufferSize144144✕26121✕26
GPUSupportedLimits.maxColorAttachmentBytesPerSample144144✕26121✕26
GPUSupportedLimits.maxColorAttachments144144✕26121✕26
GPUSupportedLimits.maxComputeInvocationsPerWorkgroup144144✕26121✕26
GPUSupportedLimits.maxComputeWorkgroupSizeX144144✕26121✕26
GPUSupportedLimits.maxComputeWorkgroupSizeY144144✕26121✕26
GPUSupportedLimits.maxComputeWorkgroupSizeZ144144✕26121✕26
GPUSupportedLimits.maxComputeWorkgroupStorageSize144144✕26121✕26
GPUSupportedLimits.maxComputeWorkgroupsPerDimension144144✕26121✕26
GPUSupportedLimits.maxDynamicStorageBuffersPerPipelineLayout144144✕26121✕26
GPUSupportedLimits.maxDynamicUniformBuffersPerPipelineLayout144144✕26121✕26
GPUSupportedLimits.maxInterStageShaderVariables144144✕26121✕26
GPUSupportedLimits.maxSampledTexturesPerShaderStage144144✕26121✕26
GPUSupportedLimits.maxSamplersPerShaderStage144144✕26121✕26
GPUSupportedLimits.maxStorageBufferBindingSize144144✕26121✕26
GPUSupportedLimits.maxStorageBuffersPerShaderStage144144✕26121✕26
GPUSupportedLimits.maxStorageTexturesPerShaderStage144144✕26121✕26
GPUSupportedLimits.maxTextureArrayLayers144144✕26121✕26
GPUSupportedLimits.maxTextureDimension1D144144✕26121✕26
GPUSupportedLimits.maxTextureDimension2D144144✕26121✕26
GPUSupportedLimits.maxTextureDimension3D144144✕26121✕26
GPUSupportedLimits.maxUniformBufferBindingSize144144✕26121✕26
GPUSupportedLimits.maxUniformBuffersPerShaderStage144144✕26121✕26
GPUSupportedLimits.maxVertexAttributes144144✕26121✕26
GPUSupportedLimits.maxVertexBufferArrayStride144144✕26121✕26
GPUSupportedLimits.maxVertexBuffers144144✕26121✕26
GPUSupportedLimits.minStorageBufferOffsetAlignment144144✕26121✕26
GPUSupportedLimits.minUniformBufferOffsetAlignment144144✕26121✕26
GPUTexture144144✕26121✕26
GPUTexture.createView144144✕26121✕26
GPUTexture.createView.descriptor_format_parameter_accepts_rgb10a2uint144144✕✕121✕✕
GPUTexture.createView.descriptor_usage_parameter144144✕✕144✕✕
GPUTexture.depthOrArrayLayers144144✕26121✕26
GPUTexture.destroy144144✕26121✕26
GPUTexture.dimension144144✕26121✕26
GPUTexture.format144144✕26121✕26
GPUTexture.format.texture_rgb10a2uint144144✕✕121✕✕
GPUTexture.height144144✕26121✕26
GPUTexture.label144144✕26121✕26
GPUTexture.mipLevelCount144144✕26121✕26
GPUTexture.sampleCount144144✕26121✕26
GPUTexture.usage144144✕26121✕26
GPUTexture.width144144✕26121✕26
GPUTextureView144144✕26121✕26
GPUTextureView.label144144✕26121✕26
GPUUncapturedErrorEvent144144✕26121✕26
GPUUncapturedErrorEvent.GPUUncapturedErrorEvent144144✕26121✕26
GPUUncapturedErrorEvent.error144144✕26121✕26
GPUValidationError144144✕26121✕26
GPUValidationError.GPUValidationError144144✕26121✕26
HTMLCanvasElement.getContext.webgpu_context144144✕26121✕26
Navigator.gpu144144✕26121✕26
OffscreenCanvas.getContext.webgpu_context144144✕26121✕26
WGSLLanguageFeatures144144✕26121✕26
WGSLLanguageFeatures.@@iterator144144✕26121✕26
WGSLLanguageFeatures.entries144144✕26121✕26
WGSLLanguageFeatures.extension_packed_4x8_integer_dot_product144144✕✕144✕✕
WGSLLanguageFeatures.extension_readonly_and_readwrite_storage_textures144144✕✕144✕✕
WGSLLanguageFeatures.extension_unrestricted_pointer_parameters144144✕✕144✕✕
WGSLLanguageFeatures.forEach144144✕26121✕26
WGSLLanguageFeatures.has144144✕26121✕26
WGSLLanguageFeatures.keys144144✕26121✕26
WGSLLanguageFeatures.size144144✕26121✕26
WGSLLanguageFeatures.values144144✕26121✕26
WorkerNavigator.gpu144144✕26121✕26