plugin-ep-webgpu/README.md
Packaging sources for the ONNX Runtime WebGPU plugin Execution Provider (EP), distributed as a standalone artifact
that plugs into an existing ONNX Runtime installation rather than being built into the main onnxruntime binary.
For more information about plugin EPs, see the documentation here.
VERSION_NUMBER — Base plugin EP version consumed by the CI pipeline. The pipeline derives the
final package version (release, dev) from this via
tools/ci_build/github/azure-pipelines/templates/set-plugin-ep-build-variables-step.yml.MIN_ONNXRUNTIME_VERSION — Minimum compatible core onnxruntime version. Single source
of truth shared by all packages built from this directory. The packages do not declare a hard dependency on a
specific ONNX Runtime package; instead, this version string is injected into each package's README at build/pack
time, and the native plugin EP code validates compatibility at registration time.python/ — Sources and build script for the onnxruntime-ep-webgpu Python wheel. See
python/README.md for build and test instructions.csharp/ — Sources and packaging script for the Microsoft.ML.OnnxRuntime.EP.WebGpu NuGet package. See
csharp/README.md for build and test instructions.The plugin EP is built as a shared library (onnxruntime_providers_webgpu.{dll,so,dylib}) by the main ONNX Runtime
build (--use_webgpu shared_lib). The resulting binaries are then packaged into:
onnxruntime-ep-webgpu), built from python/.Microsoft.ML.OnnxRuntime.EP.WebGpu), built from csharp/.Packaging is driven by the WebGPU Plugin EP Packaging Pipeline
(tools/ci_build/github/azure-pipelines/plugin-webgpu-pipeline.yml),
and post-build smoke tests run in the companion WebGPU Plugin EP Test Pipeline
(tools/ci_build/github/azure-pipelines/plugin-webgpu-test-pipeline.yml).
Once installed, the plugin EP is registered at runtime. Example in Python:
import onnxruntime as ort
import onnxruntime_ep_webgpu as webgpu_ep
ort.register_execution_provider_library("webgpu", webgpu_ep.get_library_path())
devices = [d for d in ort.get_ep_devices() if d.ep_name == webgpu_ep.get_ep_name()]
sess_options = ort.SessionOptions()
sess_options.add_provider_for_devices(devices, {})
session = ort.InferenceSession("model.onnx", sess_options=sess_options)
See the user-facing package READMEs (bundled into the published packages) for full per-language usage: