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

Browser Compatibility

Core ML Backend / macOS

WebNNCPUGPUNPU
macOS✅ Core ML✅ Core ML✅ Core ML
iOS❌ Core ML❌ Core ML❌ Core ML

The WebNN Core ML backend mainly supported on macOS.

WebNN Spec OperationsChromium Version
argMax ✅ reduce_argmaxM128
argMin ✅ reduce_argminM128
batchNormalization ✅ batch_normM126
cast ✅ castM124
clamp ✅ clipM125
concat ✅ concatM125
conv2d ✅ convM125
convTranspose2d ✅ conv_transposeM126
cumulativeSum ✅ cumsumM132
dequantizeLinear ✅ dequantize_linearM133
element-wise binary / add ✅ addM122
element-wise binary / div ✅ real_divM124
element-wise binary / max ✅ maximumM124
element-wise binary / min ✅ minimumM124
element-wise binary / mul ✅ mulM124
element-wise binary / notEqual ✅ not_equalM134
element-wise binary / pow ✅ powM124
element-wise binary / sub ✅ subM124
element-wise logical / equal ✅ equalM125
element-wise logical / greater ✅ greaterM125
element-wise logical / greaterOrEqual ✅ greater_equalM125
element-wise logical / lesser ✅ lessM125
element-wise logical / lesserOrEqual ✅ less_equalM125
element-wise logical / logicalAnd ✅ logical_andM132
element-wise logical / logicalOr ✅ logical_orM132
element-wise logical / logicalXor ✅ logical_xorM132
element-wise logical / not ✅ logical_notM128
element-wise unary / abs ✅ absM126
element-wise unary / ceil ✅ ceilM126
element-wise unary / identity ✅ identityM126
element-wise unary / cos ✅ cosM126
element-wise unary / erf ✅ erfM126
element-wise unary / exp ✅ expM126
element-wise unary / floor ✅ floorM126
element-wise unary / isInfinite ✅ Emulate with equal(abs(a), Infinity)M141
element-wise unary / isNaN ✅ Emulate with not_equal(a, a)M141
element-wise unary / log ✅ logM126
element-wise unary / neg ✅ Emulated with mul(a, -1)M127
element-wise unary / reciprocal ✅ inverseM126
element-wise unary / roundEven ✅ round, todo: emulate when device type is not CPUM141
element-wise unary / sin ✅ sinM126
element-wise unary / sqrt ✅ sqrtM126
element-wise unary / tan ✅ tanM126
elu ✅ eluM126
expand ✅ tileM128
gather ✅ gatherM126
gatherElements ✅ gather_along_axisM132
gatherND ✅ gather_ndM132
gelu ✅ geluM132
gemm ✅ Emulated with add(mul(alpha, matmul(A, B)), mul(beta, C))M126
gru ✅ gruM133
gruCell ✅ gruM133
hardSigmoid ✅ sigmoid_hardM126
hardSwish ✅ Emulated by mul(x, hardsigmoid(x, alpha=1.0/6, beta=0.5))M126
instanceNormalization ✅ instance_normM126
layerNormalization ✅ layer_normM129
leakyRelu ✅ leaky_reluM126
linear Emulated with add(mul(alpha, a), beta)M126
lstm ✅ lstmM133
lstmCell ✅ lstmM133
matmul ✅ matmulM126
pad ✅ padM129
pooling / averagePool2d ✅ avg_poolM126
pooling / l2Pool2d ✅ l2_poolM126
pooling / maxPool2d ✅ max_poolM126
prelu ✅ preluM136
quantizeLinear ✅ quantize_linearM134
reduction / reduceL1 ✅ reduce_l1_normM126
reduction / reduceL2 ✅ reduce_l2_normM126
reduction / reduceLogSum ✅ reduce_log_sumM126
reduction / reduceLogSumExp ✅ reduce_log_sum_expM126
reduction / reduceMax ✅ reduce_maxM126
reduction / reduceMean ✅ reduce_meanM126
reduction / reduceMin ✅ reduce_minM126
reduction / reduceProduct ✅ reduce_prodM126
reduction / reduceSum ✅ reduce_sumM126
reduction / reduceSumSquare ✅ reduce_sum_squareM126
relu ✅ reluM125
resample2d ✅ upsample_bilinear ✅ upsample_nearest_neighborM126
reshape ✅ reshapeM126
reverse ✅ reverseM137
scatterElements ✅ scatter_along_axisM132
scatterND ✅ scatter_ndM132
sigmoid ✅ sigmoidM126
sign ✅ signM139
slice ✅ slice_by_sizeM126
softmax ✅ softmaxM127
softplus ✅ softplusM126
softsign ✅ softsignM125
split ✅ splitM130
tanh ✅ tanhM126
tile ✅ tileM131
transpose ✅ transposeM125
triangular ✅ band_partM132
where ✅ selectM126
Last updated on