Skip to Content
🚧 The WebNN documentation is work-in-progress. Share feedback →

Browser Compatibility

Windows ML Backend / Windows

WebNNCPUGPUNPU
Windows 11 24H2 and newer✅ LiteRT / XNNPACK
✅ Windows ML✅ Windows ML

Windows ML / ONNX Runtime / OpenVINO Execution Provider

WebNN Spec OperationsChromium Version
argMax ✅ ArgMaxM140
argMin ✅ ArgMinM140
batchNormalization ✅ BatchNormalizationM140
cast ✅ CastM139
clamp ✅ ClipM139
concat ✅ ConcatM139
conv2d ✅ ConvM139
convTranspose2d ✅ ConvTransposeM139
cumulativeSum ✅ CumSumM140
dequantizeLinear ✅ DequantizeLinearM140
element-wise binary / add ✅ AddM139
element-wise binary / div ✅ DivM139
element-wise binary / max ✅ MaxM139
element-wise binary / min ✅ MinM139
element-wise binary / mul ✅ MulM139
element-wise binary / notEqual ✅ Emulate with Not + EqualM139
element-wise binary / pow ✅ PowM139
element-wise binary / sub ✅ SubM139
element-wise logical / equal ✅ EqualM140
element-wise logical / greater ✅ GreaterM140
element-wise logical / greaterOrEqual ✅ GreaterOrEqualM140
element-wise logical / lesser ✅ LessM140
element-wise logical / lesserOrEqual ✅ LessOrEqualM140
element-wise logical / logicalAnd ✅ AndM140
element-wise logical / logicalOr ✅ OrM140
element-wise logical / logicalXor ✅ XorM140
element-wise logical / not ✅ NotM140
element-wise unary / abs ✅ AbsM139
element-wise unary / ceil ✅ CeilM139
element-wise unary / identity ✅ IdentityM139
element-wise unary / cos ✅ CosM139
element-wise unary / erf ✅ ErfM139
element-wise unary / exp ✅ ExpM139
element-wise unary / floor ✅ FloorM139
element-wise unary / isInfinite ✅ IsInfM141
element-wise unary / isNaN ✅ IsNaNM141
element-wise unary / log ✅ LogM139
element-wise unary / neg ✅ NegM139
element-wise unary / reciprocal ✅ ReciprocalM139
element-wise unary / roundEven ✅ RoundM141
element-wise unary / sin ✅ SinM139
element-wise unary / sqrt ✅ SqrtM139
element-wise unary / tan ✅ TanM139
elu ✅ EluM140
expand ✅ ExpandM139
gather ✅ GatherM140
gatherElements ✅ GatherElementsM140
gatherND ✅ GatherNDM140
gelu ✅ GeluM139
gemm ✅ GemmM139
gru ✅ GRUM140
gruCell ✅ GRUM140
hardSigmoid ✅ HardSigmoidM140
hardSwish ✅ HardSwishM139
instanceNormalization ✅ InstanceNormalizationM140
layerNormalization ✅ LayerNormalizationM140
leakyRelu ✅ LeakyReluM139
linear ✅ LinearM140
lstm ✅ LSTMM140
lstmCell ✅ LSTMM140
matmul ✅ MatMulM140
pad ✅ PadM140
pooling / averagePool2d ✅ AveragePoolM139
pooling / l2Pool2d ✅ LpPoolM139
pooling / maxPool2d ✅ MaxPoolM139
prelu ✅ PReluM139
quantizeLinear ✅ QuantizeLinearM140
reduction / reduceL1 ✅ ReduceL1M140
reduction / reduceL2 ✅ ReduceL2M140
reduction / reduceLogSum ✅ ReduceLogSumM140
reduction / reduceLogSumExp ✅ ReduceLogSumExpM140
reduction / reduceMax ✅ ReduceMaxM140
reduction / reduceMean ✅ ReduceMeanM140
reduction / reduceMin ✅ ReduceMinM140
reduction / reduceProduct ✅ ReduceProdM140
reduction / reduceSum ✅ ReduceSumM140
reduction / reduceSumSquare ✅ ReduceSumSquareM140
relu ✅ ReluM139
resample2d ✅ ResizeM140
reshape ✅ ReshapeM139
reverse ✅ Emulate using backward slice with negative stepsM140
scatterElements ✅ ScatterElementsM140
scatterND ✅ ScatterNDM140
sigmoid ✅ SigmoidM139
sign ✅ SignM139
slice ✅ SliceM140
softmax ✅ SoftmaxM139
softplus ✅ SoftplusM140
softsign ✅ SoftsignM139
split ✅ SplitM139
tanh ✅ TanhM139
tile ✅ TileM140
transpose ✅ TransposeM139
triangular ✅ TriluM140
where ✅ WhereM140

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.

WebNNCPUGPUNPU
Windows✅ LiteRT / XNNPACK✅ DirectML (deprecated)✅ DirectML (deprecated)

The WebNN DirectML backend mainly supported on Windows.

WebNN Spec OperationsChromium Version
argMax ✅ REDUCE_FUNCTION_ARGMAXM122
argMin ✅ REDUCE_FUNCTION_ARGMINM122
batchNormalization ✅ BATCH_NORMALIZATIONM122
cast ✅ CASTM122
clamp ✅ ELEMENT_WISE_CLIPM119
concat ✅ JOINM120
conv2d ✅ CONVOLUTIONM119
convTranspose2d ✅ CONVOLUTIONM121
cumulativeSum ✅ CUMULATIVE_SUMMATIONM131
dequantizeLinear ✅ ELEMENT_WISE_DEQUANTIZE_LINEARM132
element-wise binary / add ✅ ELEMENT_WISE_ADDM119
element-wise binary / div ✅ ELEMENT_WISE_DIVIDEM119
element-wise binary / max ✅ ELEMENT_WISE_MAXM119
element-wise binary / min ✅ ELEMENT_WISE_MINM119
element-wise binary / mul ✅ ELEMENT_WISE_MULTIPLYM119
element-wise binary / notEqual ✅ Emulated with ELEMENT_WISE_LOGICAL_EQUALS and ELEMENT_WISE_LOGICAL_NOTM134
element-wise binary / pow ✅ ELEMENT_WISE_POWM119
element-wise binary / sub ✅ ELEMENT_WISE_SUBTRACTM119
element-wise logical / equal ✅ ELEMENT_WISE_LOGICAL_EQUALSM122
element-wise logical / greater ✅ ELEMENT_WISE_LOGICAL_GREATER_THANM122
element-wise logical / greaterOrEqual ✅ ELEMENT_WISE_LOGICAL_GREATER_THAN_OR_EQUALM122
element-wise logical / lesser ✅ ELEMENT_WISE_LOGICAL_LESS_THANM122
element-wise logical / lesserOrEqual ✅ ELEMENT_WISE_LOGICAL_LESS_THAN_OR_EQUALM122
element-wise logical / logicalAnd ✅ ELEMENT_WISE_LOGICAL_ANDM131
element-wise logical / logicalOr ✅ ELEMENT_WISE_LOGICAL_ORM131
element-wise logical / logicalXor ✅ ELEMENT_WISE_LOGICAL_XORM131
element-wise logical / not ✅ ELEMENT_WISE_LOGICAL_NOTM121
element-wise unary / abs ✅ ELEMENT_WISE_ABSM121
element-wise unary / ceil ✅ ELEMENT_WISE_CEILM121
element-wise unary / identity ✅ ELEMENT_WISE_IDENTITYM121
element-wise unary / cos ✅ ELEMENT_WISE_COSM121
element-wise unary / erf ✅ ELEMENT_WISE_ERFM121
element-wise unary / exp ✅ ELEMENT_WISE_EXPM121
element-wise unary / floor ✅ ELEMENT_WISE_FLOORM121
element-wise unary / isInfinite ✅ ELEMENT_WISE_IS_INFINITYM140
element-wise unary / isNaN ✅ ELEMENT_WISE_IS_NANM141
element-wise unary / log ✅ ELEMENT_WISE_LOGM121
element-wise unary / neg ✅ ELEMENT_WISE_NEGATEM121
element-wise unary / reciprocal ✅ ELEMENT_WISE_RECIPM121
element-wise unary / roundEven ✅ ELEMENT_WISE_ROUNDM141
element-wise unary / sin ✅ ELEMENT_WISE_SINM121
element-wise unary / sqrt ✅ ELEMENT_WISE_SQRTM121
element-wise unary / tan ✅ ELEMENT_WISE_TANM121
elu ✅ ACTIVATION_ELUM121
expand ✅ ELEMENT_WISE_IDENTITYM121
gather ✅ GATHERM122
gatherElements ✅ GATHER_ELEMENTSM130
gatherND ✅ GATHER_NDM131
gelu ✅ ACTIVATION_GELUM126
gemm ✅ GEMMM119
gru ✅ GRUM125
gruCell ✅ GRUM125
hardSigmoid ✅ ACTIVATION_HARD_SIGMOIDM123
hardSwish ✅ Map to other opM123
instanceNormalization ✅ MEAN_VARIANCE_NORMALIZATION1M122
layerNormalization ✅ MEAN_VARIANCE_NORMALIZATION1M122
leakyRelu ✅ ACTIVATION_LEAKY_RELUM121
linear ✅ ACTIVATION_LINEARM122
lstm ✅ LSTMM125
lstmCell ✅ LSTMM125
matmul ✅ GEMMM121
pad ✅ PADDINGM120
pooling / averagePool2d ✅ AVERAGE_POOLINGM119
pooling / l2Pool2d ✅ LP_POOLINGM123
pooling / maxPool2d ✅ MAX_POOLING2M119
prelu ✅ ACTIVATION_PARAMETERIZED_RELUM120
quantizeLinear ✅ ELEMENT_WISE_QUANTIZE_LINEARM132
reduction / reduceL1 ✅ REDUCE_FUNCTION_L1M121
reduction / reduceL2 ✅ REDUCE_FUNCTION_L2M121
reduction / reduceLogSum ✅ REDUCE_FUNCTION_LOG_SUMM121
reduction / reduceLogSumExp ✅ REDUCE_FUNCTION_LOG_SUM_EXPM121
reduction / reduceMax ✅ REDUCE_FUNCTION_MAXM121
reduction / reduceMean ✅ REDUCE_FUNCTION_AVERAGEM121
reduction / reduceMin ✅ REDUCE_FUNCTION_MINM121
reduction / reduceProduct ✅ REDUCE_FUNCTION_MULTIPLYM121
reduction / reduceSum ✅ REDUCE_FUNCTION_SUMM121
reduction / reduceSumSquare ✅ REDUCE_FUNCTION_SUM_SQUAREM121
relu ✅ ACTIVATION_RELUM119
resample2d ✅ RESAMPLEM121
reshape ✅ Supported by tensor stridesM119
reverse ✅ SLICE1M133
scatterElements ✅ SCATTER_ELEMENTSM132
scatterND ✅ SCATTER_NDM131
sigmoid ✅ ACTIVATION_SIGMOIDM121
sign ✅ ELEMENT_WISE_SIGNM130
slice ✅ SLICEM120
softmax ✅ ACTIVATION_SOFTMAXM119
softplus ✅ ACTIVATION_SOFTPLUSM122
softsign ✅ ACTIVATION_SOFTSIGNM123
split ✅ SPLITM120
tanh ✅ ACTIVATION_TANHM121
tile ✅ TILEM130
transpose ✅ Supported by tensor stridesM120
triangular ✅ Supported by combined operationsM126
where ✅ ELEMENT_WISE_IFM122
Last updated on