Document URLs
TR: https://www.w3.org/TR/webnn/
Current TR: https://www.w3.org/TR/2026/CRD-webnn-20260109/
Ed: https://webmachinelearning.github.io/webnn/
Link to group's decision to request transition
https://www.w3.org/2026/01/15-webmachinelearning-minutes.html#f0f7
Link to previous Candidate Recommendation transition or update request
#592
Substantive changes
The most notable additions include a third wave of operators for enhanced transformers support, the MLTensor API for buffer sharing, and a new abstract device selection mechanism. The API surface has been modernized and interoperability improvements have been made informed by wider implementation experience and developer feedback. This specification version strengthens security and privacy considerations including fingerprinting mitigations, and adds new accessibility considerations.
Detailed changes since Candidate Recommendation Snapshot, 11 April 2024
New features ([class 4](https://www.w3.org/policies/process/#class-4))
- Expand operator set "wave 3" with new operators including dequantizeLinear, quantizeLinear, and attention operations (#805)
- Add MLTensor API, an interface for buffer sharing between WebNN and WebGPU, and reuse across multiple MLGraphs (#787)
- Add isNaN and isInfinite operators, new element-wise operators for checking NaN and infinite values (#858)
- Add roundEven operator, new rounding operator using banker’s rounding (#859)
- Add accelerator selection mechanism, a simple mechanism for selecting ML accelerators (#895)
- Expose WebNN API to shared workers and service workers to extend WebNN availability beyond window and dedicated worker (#823)
- Add optional operator labels for more diagnosable error messages (#742)
- Introduce MLNumber, a unified type for specifying numeric inputs of any type (#647)
- Add rankRange to opSupportLimits() to support specifying rank ranges in support limits (#828)
- Support rankRange for op output tensors to extend rankRange support to output tensors (#857)
- Add MLDeviceType npu, a Neural Processing Unit (NPU) device type (#696) - this feature was added and removed since previous publication to simplify device selection, see #809
- Add destroy() methods for MLContext and MLGraph, specify context loss behavior and error reporting (#744)
- Add an optional axis parameter to softmax operation (#649)
- Add outputDataType to argmin/argmax to support specifying output data type (#730)
- Allow arbitrary axes for resample2d to generalize resample2d to work with any axes (#752)
- Add Resample data type uint8/int8 to extend resample to support 8-bit integer types (#891)
- Simplify operand layout support of conv2d and pool2d operations, remove MLRoundingType from pool2d, simplify layout support (#770)
- Restrict padding options to better match backend limits (#843)
Other changes that do not add new features (class 3)
- Remove MLContext.compute() method in favor of MLTensor API (#795)
- Remove MLDeviceType to simplify device selection by removing device type enumeration (#809)
- Convert MLOperand methods to readonly attributes and change dataType() and shape() from methods to attributes (#774)
- Make MLOperandDescriptor.shape a required property (#764)
- Allow MLGraphBuilder.build() to be called only once to restrict build method to single invocation (#717)
- Remove fillSequence overload of constant() to remove sequence-based constant creation (#656)
- Swap parameters of scalar constant() operand method to reorder parameters for consistency (#650)
- Remove argmin/argmax selectLastIndex parameter to simplify argmin/argmax API (#722)
- Rename cast/constant parameter type to dataType for consistency across the API (#888)
- Replace MLActivation with MLRecurrentNetworkActivation for a more specific type for recurrent network activations (#718)
- Change DOMString to USVString for better Unicode support (#715)
- Rename parameter names of where to improve parameter naming for clarity (#719)
- Rename member output to outputs of MLLstmCellSupportLimits for consistency (#757)
- Reject promises for in-progress operations on destroyed MLTensor for proper promise rejection (#799)
- Specify operand data type constraints of operations to enable data type validation rules (#646)
- Add missing validation steps for several ops for validation improvements (#820)
- Add missing validation for pad(), slice(), and split() to enhance validation for array operations (#690)
- Simplify, correct, and add validation for GRU/LSTM for improved recurrent network validation (#659)
- Validate hidden size of GRU and LSTM operators (#644)
- Validate restriction of output padding in convTranspose2d for stricter validation for transposed convolution (#631)
- Enhance gather operation validation (#642)
- General validation improvements (#643)
- Improve resource validation (#622)
- Define error handling of MLNamedArrayBufferViews transfer algorithm to properly handle errors for buffer transfers (#723)
- Update dimension valid range to signed integer (#738)
- Introduce "valid dimension" concept to formalize dimension validity (#641)
- Ensure object creation specifies the realm for proper realm handling for object creation (#810)
- Clarify division operator rounding (#909)
- Correct pad scalar inconsistency (#894)
- Fix opSupportLimits error for split op (#776)
- Use EnforceRange for proper range enforcement in softmax() axis argument (#746)
- Add missing definitions of inputShape to conv2d algorithms (#680)
- Fix unidirectionally broadcast shapes steps (#663)
- Fix compute() promise rejection behavior if buffer transferring fails (#639)
- Update ArrayBufferView compatibility table with 64-bit integer types (#698)
Changes that do not functionally affect interpretation of the document (class 2)
- Make operand data type and rank validation table-driven for a systematic approach to validation (#657)
- Add non-normative table of operators by category (#868)
- Clarify cast() op behavior between different data types (#726)
- Clarify interpolation algorithms for resample2d (#816)
- Clarify reduction with empty axes and scalar input to clarify edge cases (#741)
- Add note about no-op graphs (#665)
- Add note about keepDimensions of reduction ops to clarify reduction operation behavior (#648)
- Reorganize emulation documentation (#598)
- Add decompositions for reduceLogSum, reduceLogSumExp, and reduceSumSquare (#637)
- Remove obsolete note about interop issues with clamp() minValue == maxValue (#684)
- Update specification boilerplate metadata information (#769)
Horizontal (class 2 and class 3)
- Add architectural resource contention considerations (#765)
- Add security considerations for Unicode (#851)
- Add security consideration for computation control-flow attacks (#725)
- Revise privacy considerations (#890)
- Add privacy considerations for opSupportLimits() fingerprinting (#881)
- Add accessibility considerations (#869)
- Add internationalization note regarding label usage (#841)
Editorial (class 2)
- Various editorial improvements (#834)
- Various style and wording tweaks (#797)
- Grammar and spelling corrections (#782)
- Simplify specification steps with helpers algorithms (#737)
- Improve type references (#735)
- Reference WebIDL transferable definition (#732)
- Avoid "sequence" in prose for improved terminology usage (#729)
- Improve logic for validating algorithm steps for enhanced linting and validation (#727)
- Link method argument definitions for Improved cross-references (#721)
- Remove unnecessary subsections for improved organization (#711)
- Link to "is empty" not "empty" when adjective intended (#708)
- Add utilities to ease authoring and review of this specification (#702)
- Fix "transferred" cross-reference (#679)
- Make "generically emulated" text a macro to improve authoring experience (#638)
- Fix emulation error of LSTM by 'backward' and 'both' directions (#802)
- Fix emulation error of GRU by 'backward' and 'both' directions (#803)
- Correct typos/JS errors in decompositions (#699)
Any changes in requirements?
N/A
Wide Review of substantive changes
Documented in webmachinelearning/webnn#239 (comment)
Issues status
https://github.com/webmachinelearning/webnn/issues
Formal Objections
None
Any changes in implementation information?
The WG is aware of interest for an origin trial in Chromium browsers, and has received a positive standards position from Mozilla. Apple is active in the group.
Deadline for further comments
2 months after publication
Any changes in patent disclosures?
None
NOTE: For more information, see Organize a Technical Report Transition.
cc @anssiko
Document URLs
TR: https://www.w3.org/TR/webnn/
Current TR: https://www.w3.org/TR/2026/CRD-webnn-20260109/
Ed: https://webmachinelearning.github.io/webnn/
Link to group's decision to request transition
https://www.w3.org/2026/01/15-webmachinelearning-minutes.html#f0f7
Link to previous Candidate Recommendation transition or update request
#592
Substantive changes
Detailed changes since Candidate Recommendation Snapshot, 11 April 2024
New features ([class 4](https://www.w3.org/policies/process/#class-4))Other changes that do not add new features (class 3)
Changes that do not functionally affect interpretation of the document (class 2)
Horizontal (class 2 and class 3)
Editorial (class 2)
Any changes in requirements?
N/A
Wide Review of substantive changes
Documented in webmachinelearning/webnn#239 (comment)
Issues status
https://github.com/webmachinelearning/webnn/issues
Formal Objections
None
Any changes in implementation information?
The WG is aware of interest for an origin trial in Chromium browsers, and has received a positive standards position from Mozilla. Apple is active in the group.
Deadline for further comments
2 months after publication
Any changes in patent disclosures?
None
NOTE: For more information, see Organize a Technical Report Transition.
cc @anssiko