Browser Compatibility
Windows ML Backend / Windows
| WebNN | CPU | GPU | NPU |
|---|---|---|---|
| Windows 11 24H2 and newer | ✅ LiteRT / XNNPACK | ✅ Windows ML | ✅ Windows ML |
Windows ML / ONNX Runtime / OpenVINO Execution Provider
Additional Resources
ONNX Layers supported using OpenVINO
DirectML Backend / Windows (Deprecated)
May 20, 2025: DirectML was officially deprecated during Microsoft Build 2025. WebNN will leverage Windows ML to access OpenVINO and other EPs to get hardware acceleration.
| WebNN | CPU | GPU | NPU |
|---|---|---|---|
| Windows | ✅ LiteRT / XNNPACK | ✅ DirectML (deprecated) | ✅ DirectML (deprecated) |
The WebNN DirectML backend mainly supported on Windows.
| WebNN Spec | Operations | Chromium Version |
|---|---|---|
| argMax | ✅ REDUCE_FUNCTION_ARGMAX | M122 |
| argMin | ✅ REDUCE_FUNCTION_ARGMIN | M122 |
| batchNormalization | ✅ BATCH_NORMALIZATION | M122 |
| cast | ✅ CAST | M122 |
| clamp | ✅ ELEMENT_WISE_CLIP | M119 |
| concat | ✅ JOIN | M120 |
| conv2d | ✅ CONVOLUTION | M119 |
| convTranspose2d | ✅ CONVOLUTION | M121 |
| cumulativeSum | ✅ CUMULATIVE_SUMMATION | M131 |
| dequantizeLinear | ✅ ELEMENT_WISE_DEQUANTIZE_LINEAR | M132 |
| element-wise binary / add | ✅ ELEMENT_WISE_ADD | M119 |
| element-wise binary / div | ✅ ELEMENT_WISE_DIVIDE | M119 |
| element-wise binary / max | ✅ ELEMENT_WISE_MAX | M119 |
| element-wise binary / min | ✅ ELEMENT_WISE_MIN | M119 |
| element-wise binary / mul | ✅ ELEMENT_WISE_MULTIPLY | M119 |
| element-wise binary / notEqual | ✅ Emulated with ELEMENT_WISE_LOGICAL_EQUALS and ELEMENT_WISE_LOGICAL_NOT | M134 |
| element-wise binary / pow | ✅ ELEMENT_WISE_POW | M119 |
| element-wise binary / sub | ✅ ELEMENT_WISE_SUBTRACT | M119 |
| element-wise logical / equal | ✅ ELEMENT_WISE_LOGICAL_EQUALS | M122 |
| element-wise logical / greater | ✅ ELEMENT_WISE_LOGICAL_GREATER_THAN | M122 |
| element-wise logical / greaterOrEqual | ✅ ELEMENT_WISE_LOGICAL_GREATER_THAN_OR_EQUAL | M122 |
| element-wise logical / lesser | ✅ ELEMENT_WISE_LOGICAL_LESS_THAN | M122 |
| element-wise logical / lesserOrEqual | ✅ ELEMENT_WISE_LOGICAL_LESS_THAN_OR_EQUAL | M122 |
| element-wise logical / logicalAnd | ✅ ELEMENT_WISE_LOGICAL_AND | M131 |
| element-wise logical / logicalOr | ✅ ELEMENT_WISE_LOGICAL_OR | M131 |
| element-wise logical / logicalXor | ✅ ELEMENT_WISE_LOGICAL_XOR | M131 |
| element-wise logical / not | ✅ ELEMENT_WISE_LOGICAL_NOT | M121 |
| element-wise unary / abs | ✅ ELEMENT_WISE_ABS | M121 |
| element-wise unary / ceil | ✅ ELEMENT_WISE_CEIL | M121 |
| element-wise unary / identity | ✅ ELEMENT_WISE_IDENTITY | M121 |
| element-wise unary / cos | ✅ ELEMENT_WISE_COS | M121 |
| element-wise unary / erf | ✅ ELEMENT_WISE_ERF | M121 |
| element-wise unary / exp | ✅ ELEMENT_WISE_EXP | M121 |
| element-wise unary / floor | ✅ ELEMENT_WISE_FLOOR | M121 |
| element-wise unary / isInfinite | ✅ ELEMENT_WISE_IS_INFINITY | M140 |
| element-wise unary / isNaN | ✅ ELEMENT_WISE_IS_NAN | M141 |
| element-wise unary / log | ✅ ELEMENT_WISE_LOG | M121 |
| element-wise unary / neg | ✅ ELEMENT_WISE_NEGATE | M121 |
| element-wise unary / reciprocal | ✅ ELEMENT_WISE_RECIP | M121 |
| element-wise unary / roundEven | ✅ ELEMENT_WISE_ROUND | M141 |
| element-wise unary / sin | ✅ ELEMENT_WISE_SIN | M121 |
| element-wise unary / sqrt | ✅ ELEMENT_WISE_SQRT | M121 |
| element-wise unary / tan | ✅ ELEMENT_WISE_TAN | M121 |
| elu | ✅ ACTIVATION_ELU | M121 |
| expand | ✅ ELEMENT_WISE_IDENTITY | M121 |
| gather | ✅ GATHER | M122 |
| gatherElements | ✅ GATHER_ELEMENTS | M130 |
| gatherND | ✅ GATHER_ND | M131 |
| gelu | ✅ ACTIVATION_GELU | M126 |
| gemm | ✅ GEMM | M119 |
| gru | ✅ GRU | M125 |
| gruCell | ✅ GRU | M125 |
| hardSigmoid | ✅ ACTIVATION_HARD_SIGMOID | M123 |
| hardSwish | ✅ Map to other op | M123 |
| instanceNormalization | ✅ MEAN_VARIANCE_NORMALIZATION1 | M122 |
| layerNormalization | ✅ MEAN_VARIANCE_NORMALIZATION1 | M122 |
| leakyRelu | ✅ ACTIVATION_LEAKY_RELU | M121 |
| linear | ✅ ACTIVATION_LINEAR | M122 |
| lstm | ✅ LSTM | M125 |
| lstmCell | ✅ LSTM | M125 |
| matmul | ✅ GEMM | M121 |
| pad | ✅ PADDING | M120 |
| pooling / averagePool2d | ✅ AVERAGE_POOLING | M119 |
| pooling / l2Pool2d | ✅ LP_POOLING | M123 |
| pooling / maxPool2d | ✅ MAX_POOLING2 | M119 |
| prelu | ✅ ACTIVATION_PARAMETERIZED_RELU | M120 |
| quantizeLinear | ✅ ELEMENT_WISE_QUANTIZE_LINEAR | M132 |
| reduction / reduceL1 | ✅ REDUCE_FUNCTION_L1 | M121 |
| reduction / reduceL2 | ✅ REDUCE_FUNCTION_L2 | M121 |
| reduction / reduceLogSum | ✅ REDUCE_FUNCTION_LOG_SUM | M121 |
| reduction / reduceLogSumExp | ✅ REDUCE_FUNCTION_LOG_SUM_EXP | M121 |
| reduction / reduceMax | ✅ REDUCE_FUNCTION_MAX | M121 |
| reduction / reduceMean | ✅ REDUCE_FUNCTION_AVERAGE | M121 |
| reduction / reduceMin | ✅ REDUCE_FUNCTION_MIN | M121 |
| reduction / reduceProduct | ✅ REDUCE_FUNCTION_MULTIPLY | M121 |
| reduction / reduceSum | ✅ REDUCE_FUNCTION_SUM | M121 |
| reduction / reduceSumSquare | ✅ REDUCE_FUNCTION_SUM_SQUARE | M121 |
| relu | ✅ ACTIVATION_RELU | M119 |
| resample2d | ✅ RESAMPLE | M121 |
| reshape | ✅ Supported by tensor strides | M119 |
| reverse | ✅ SLICE1 | M133 |
| scatterElements | ✅ SCATTER_ELEMENTS | M132 |
| scatterND | ✅ SCATTER_ND | M131 |
| sigmoid | ✅ ACTIVATION_SIGMOID | M121 |
| sign | ✅ ELEMENT_WISE_SIGN | M130 |
| slice | ✅ SLICE | M120 |
| softmax | ✅ ACTIVATION_SOFTMAX | M119 |
| softplus | ✅ ACTIVATION_SOFTPLUS | M122 |
| softsign | ✅ ACTIVATION_SOFTSIGN | M123 |
| split | ✅ SPLIT | M120 |
| tanh | ✅ ACTIVATION_TANH | M121 |
| tile | ✅ TILE | M130 |
| transpose | ✅ Supported by tensor strides | M120 |
| triangular | ✅ Supported by combined operations | M126 |
| where | ✅ ELEMENT_WISE_IF | M122 |
Last updated on