Repository navigation
WebGPU static plugin EP - #32395
Merged
Merged
WebGPU static plugin EP#32395
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: df9d994f-d4ed-4e61-8104-57abb42ae205
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: df9d994f-d4ed-4e61-8104-57abb42ae205
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: df9d994f-d4ed-4e61-8104-57abb42ae205
Scope browser test relocation to provider behavior and keep ORT Web module assembly, packaging, and static registration tests in ORT. Record that browser-hosted provider tests are an exception to the no-source-checkout build contract, and that some web lanes are currently non-blocking or build-only. Drop the duplicated test classification in favor of the test-conformance doc, and exclude the deprecated JSEP TypeScript path from scope. Add a minimum-version validation work package so the declared MIN_ONNXRUNTIME_VERSION floor is verified rather than claimed, and correct the packaging migration scope to the pipeline definitions still outside the staging root. Align the four workstream docs: consistent section ordering, rename 'Parallel work packages' to 'Work packages' with explicit sequencing, flatten the plugin-boundary Scope wrapper, and separate provider-isolation versioning content from its open questions. Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
State the critical path explicitly. Static plugin registration is a prerequisite for removing the adapter, not merely an enabler, so it gates code isolation. Reflect this in the overview, the dependency diagram, Stage 2, and the provider-isolation sequencing list. Replace the misaligned ASCII diagram with Mermaid. Restructure provider-isolation work packages from nine to seven. Add a mechanical staging-root move that is off the critical path, since relocating files does not change which base classes the provider uses. Merge code isolation with the standalone build, because the provider is not independently buildable until the kernel-authoring foundation is replaced. Dissolve the dependency-ownership and packaging-migration packages into the packages that do the work: WebGPU owns Dawn and WGSL outright, and the packaging and CI pipelines must be rewired atomically with the build switch to avoid a broken window. Correct terminology and inaccuracies: distinguish the plugin EP API from ORT package build inputs, scope the JSEP exclusion to the WebGPU compute path so it does not imply WebNN removal, fix the WebGpuExecutionProvider name casing and show registration name and EP name as independent, replace a stale version in the conformance kit example, and cross-reference the result semantics rather than restating them. Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Adds a cross-repository version policy that resolves the two-way pin between ORT and the WebGPU repository, distinguishing the build-against ORT version from the runtime floor and keeping both blocking lanes on immutable released artifacts. Adds a Related work section stating independence from the JSEP migration, and a terminology table. Renames the extraction launch matrix to consumer dispositions and moves the non-consumer row to prose. Ties the size and inference latency gates to the Stage 1 baselines, removes the undefined startup metric, and adds a latency criterion to the plugin-boundary workstream. Records user-facing documentation ownership and post-cutover issue and pull request handling as part of the repository migration. Corrects a stale claim that onnxruntime-webgpu still ships from the non-plugin static build. Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…on plan Splits the provider's non-public-API dependencies into three groups, adding plugin EP implementation utilities under include/onnxruntime/ep/. Those headers are offered for plugin EP implementations but are not shipped in the released package, so they are copied rather than consumed. Scopes the section to what the compiler and linker see, and moves the build-input inventory to the standalone build contract. Replaces the single disposition for CI lanes with three: lanes that build the provider statically into ORT are retired, onnxruntime-web keeps static linkage against the pinned external source, and provider-owned lanes move to the WebGPU repository. Records that ORT-root packaging scripts reference WebGPU independently of the plugin packages, and that the plugin-ep-webgpu/rel-* branch prefix disappears once release branches no longer share the ORT repository. Adds the browser-test lane to the cross-repository version policy, which the standalone build contract already pointed at it for. Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Scopes CPU-fallback disabling to non-CPU targets. The conformance design required running cases against CPU as a reference while unconditionally disabling CPU fallback, which ORT rejects whenever nodes are assigned to the CPU EP. Makes the static-runner SDK conditional in the design section, Phase 3, and the MVP deliverables, since whether a native static-linkage runner is needed at all is still an open question. Qualifies the isolation milestone: every build input is either inside the staging root or a declared external dependency. The previous wording forbade any input resolving outside the root, which the standalone build contract's own ORT package and pinned third-party dependencies could not satisfy. Reframes the cross-repository version policy around avoiding a circular dependency rather than claiming neither side can be blocked, and names the wait for an ORT release as a scheduling cost rather than a deadlock. Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
… that way Adds a generic mechanism for plugin EPs that are linked into the ORT binary rather than loaded from a shared library, and uses it for the WebGPU EP via a new --use_webgpu static_plugin build configuration. This lets one set of EP sources (core/providers/webgpu/ep) serve both a dynamically loaded plugin library and a statically linked build. The latter is what ORT Web needs, since Emscripten cannot load shared library modules. Core: - EpLibraryStaticPlugin, an EpLibrary that takes the factory entry points directly instead of resolving them from a loaded library. The factory lifecycle it shares with EpLibraryPlugin is factored into ep_library_plugin_utils. - ep_static_plugins.cc, a link-time registry of statically linked plugin EPs. - Environment::CreateAndRegisterStaticPluginEps(). The registration runs from OrtEnv::GetOrCreateInstance() rather than from Environment::Initialize(), after the singleton is published and its reference taken. Registering an EP enumerates its devices, and the WebGPU factory queries the environment while doing so, which self-deadlocks if the environment is not yet published. OrtEnv::m_ becomes recursive to allow that re-entry. WebGPU EP: - Entry point names are macro-parameterized so the statically linked build can emit prefixed symbols. The shared library build must keep the unprefixed names that EpLibraryPlugin::Load looks up. - Protobuf shutdown is compiled out unless the EP owns the process globals, which is only true for the shared library module. - ORT_PLUGIN_EP_STATICALLY_LINKED disables manual C++ API initialization. The MSVC detect_mismatch guard on ORT_API_MANUAL_INIT requires whole-binary agreement, so forcing it on in ep/api.h fails to link once EP objects are part of the ORT binary. Initialization is unnecessary there anyway: the EP and ORT are the same binary and therefore the same API version. Tests: - The plugin EP test infrastructure treats the EP library path as optional, since ORT core registers statically linked plugin EPs itself. - Virtual devices are requested through the allow_virtual_devices environment configuration entry rather than a ".virtual" registration name suffix, which is unavailable when ORT core chooses the registration name. - The WebGPU plugin EP test definitions move into a shared cmake function and are applied to onnxruntime_provider_test as well as onnxruntime_test_all. The operator tests live in the former, so the plugin path had no operator test coverage. Design notes are in docs/design/webgpu_ep_extraction. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The static_plugin configuration had no CI coverage, since both new cmake options default to OFF and every existing WebGPU job builds either the internal EP or the shared library plugin EP. Windows runs on the GPU pool and builds and tests, which is the only way to exercise the operator tests on this configuration. Linux is build-only, like the WebGPU job next to it, and mainly serves to compile the configuration with GCC as well as MSVC. It keeps --build_wheel because linking the EP into pybind11_state is specific to this configuration. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The EP adapter OpKernelInfo defines GetAttr()/GetAttrOrDefault() inline in the header, so GCC can see their failure and exception paths and reports -Werror=maybe-uninitialized for values that are only read when the lookup succeeded. The in-tree OpKernelInfo hides these paths behind an out-of-line definition, which is why this only shows up when building the EP adapters with GCC. Value-initialize the temporaries in the accessors and in the WebGPU kernel constructors that pass a local by pointer and read it back. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
`ep_library_path` is now optional in the dynamic plugin EP test infrastructure config, so that a statically linked plugin EP that ORT core has already registered can be selected. Update the test that asserted it was required, and add coverage for omitting it. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The EP adapter types are defined entirely inline in headers, so GCC sees through the failure and exception paths of accessors like OpKernelInfo::GetAttr<> and falsely warns about values that are only read once the call succeeded. It also reports false positives deep inside absl::InlinedVector for TensorShapeVector locals that are always constructed, which cannot be addressed at the source. Apply the same target scoped suppression the CUDA plugin EP already uses. It is limited to GCC and to the EP adapter build so that other builds stay strict. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Scratch handoff notes covering build configurations, CI dispatch and log retrieval, the GCC -Werror=maybe-uninitialized behavior of the header-only EP adapters, and what still needs validating (notably operator tests on a real GPU). To be removed before the PR. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Built the static_plugin and internal-EP WebGPU configurations from the same tree on a machine with a real GPU and compared them. onnxruntime_provider_test: zero failures in both, and zero status differences across the 5894 tests common to the two builds. onnxruntime_test_all: 1965 passed in both, no differences. This closes open item 2, the operator-level validation that could not be done on the original GPU-less development machine. Also records the two categories of test that legitimately differ (white-box WebGPU tests excluded from adapter builds, and the deliberately paired virtual-device tests), the third GCC -Werror batch seen in run 33009901327, and the finding that the MAX_PATH build directory restriction is specific to MSBuild rather than to the path length itself. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
…sign doc The work log is deleted before the PR, so these findings need to live in the design document instead. Records that operator-level validation on a real GPU is now done and showed zero status differences across the 5894 provider tests common to the static_plugin and internal-EP builds. Also documents the known coverage difference: onnxruntime_unittests.cmake excludes test/providers/webgpu/* from adapter builds because those tests include internal EP headers, which leaves HardSwish_WebGPU and MatMul2BitsWebGpu (12 operator tests) running only on the internal path. Explains why the virtual-device tests are deliberately paired rather than shared, and generalises the GCC -Werror guidance now that several successive batches have appeared. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
When onnxruntime_providers_webgpu is built with the EP adapter headers in its precompiled header, GCC 14 at -O3 inlines the std::string move-concat chain in EmitGateActivationExpr and reports a false positive -Warray-bounds, which -Werror turns into a build failure on the Linux static_plugin CI leg. Build the expression with ORT's MakeString instead. This is a single-site source fix and keeps -Warray-bounds active for the rest of the provider, unlike a target-scoped -Wno-array-bounds. Verified with GCC 14.2.1 in an AlmaLinux 8 gcc-toolset-14 container: the unfixed source still errors under -Werror through the same harness, the fixed source compiles clean. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
…on recipe Closes the batch-at-a-time discovery loop: a single container build with --compile_no_warning_as_error shows that of ~340 warnings in the static_plugin build, exactly one belongs to ORT source. Documents the AlmaLinux 8 / gcc-toolset-14 reproduction, the single-object -Werror recheck, and the need for a negative control. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
…ched CI runs Records both halves of the array-bounds verification (single-object recheck with a negative control, plus a full -Werror build), the commit table through ef68884, and the three CI runs dispatched on it. Also fixes a broken internal anchor: the heading 'GCC and -Werror' slugs to gcc-and--werror with a double hyphen, so every link to it was dead. Renamed the heading so it slugs unambiguously. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
Builds and links WASM with --use_webgpu static_plugin, and verifies at the symbol level that ORT core's static plugin registration is live rather than compiled out. Also records that Linux WebGPU CI is green after the array-bounds fix. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
…sign doc Building the WebGPU EP into the WASM binary as a static plugin is only half of moving ORT Web onto the plugin path. Document the two remaining gaps, neither of which the linker can catch: ORT Web selects the EP by name and that name resolves only to the internal EP, and no WebGPU OrtEpDevice exists under Emscripten because the default device discovery reports a CPU only. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
A minimal build excludes core/session/plugin_ep from the session library, so Environment::CreateAndRegisterStaticPluginEps is compiled out, but the WebGPU provider is still built and linked. The combination produced a binary holding the EP that never registered it, with no diagnostic at configure, build or run time. Fail configure instead. This is a temporary guard. Letting minimal builds use a static plugin EP is worthwhile and needs the registration path to be available there first. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
Ran the full js/web WebGPU operator suite (2152 tests) in Edge against a WASM --use_webgpu static_plugin binary. All pass. Update the ORT Web migration section to record what the prototype established for each step: Emscripten OrtEpDevice synthesis, the three-place WASM export requirement, EP option prefix equivalence between the name-based and V2 paths, the canonical EP name change needed in session-options.ts, and the test-runner-cli --webgpu-ep forwarding gap. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
…ists Emscripten previously fell through to device_discovery_default.cc, which reports only a CPU device, so no OrtEpDevice could ever be created for WebGPU in a wasm build. Add core/platform/emscripten/device_discovery.cc, selected by a new Emscripten arm in onnxruntime_common.cmake. It reports the CPU device plus a GPU OrtHardwareDevice when a synchronous EM_ASM_INT check finds navigator.gpu. No factory change is needed: the existing loop in Factory::GetSupportedDevicesImpl filters on OrtHardwareDeviceType_GPU, so the discovered device flows through and picks up both allocator infos. vendor_id/device_id are left at 0 because a browser will not identify the GPU: requestAdapter() is async and unavailable at OrtEnv creation time, and GPUAdapterInfo masks vendor details anyway. The device is deliberately not tagged is_virtual, since it is backed by real hardware. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
GetAttr/GetAttrs were implemented as a try around the throwing Ort:: C++ wrappers, converting Ort::Exception into a Status. GetAttrOrDefault relies on that non-OK Status to substitute the default, which makes a missing optional attribute depend on catching an exception. Emscripten builds using --enable_wasm_api_exception_catching compile only the C API boundary translation units with exception catching enabled, so the catch never matched and the exception escaped GetAttrOrDefault. This showed up as 949 suite0 failures on a reduced-size WebGPU static_plugin wasm build. Call the non-throwing OrtApi::KernelInfoGetAttribute* functions directly and convert the returned OrtStatus* instead. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
Add OrtAppendExecutionProviderV2 to the wasm API, which selects an EP by device rather than by built-in EP name, and route the 'webgpu' backend through it so ORT Web uses the statically linked plugin EP. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
…edgchen1/webgpu_static_plugin
This was referenced Oct 12, 2026
Franklin Moormann (ooples)
pushed a commit
to ooples/AiDotNet
that referenced
this pull request
Oct 13, 2026
Updated [Microsoft.ML.OnnxRuntime](https://github.com/Microsoft/onnxruntime) from 1.30.0 to 1.31.0. <details> <summary>Release notes</summary> _Sourced from [Microsoft.ML.OnnxRuntime's releases](https://github.com/Microsoft/onnxruntime/releases)._ ## 1.31.0 ONNX Runtime 1.31.0 stabilizes model-package and EPContext data APIs, improves CPU model loading and quantized MoE inference, expands device-based execution-provider selection, and strengthens model-loading and runtime reliability. These notes cover changes since ONNX Runtime 1.30.0. CUDA and WebGPU kernel updates are summarized here; detailed provider notes are covered by their separate plugin EP releases. ## Highlights - Promoted the model-package API and EPContext data callbacks to stable C and C++ APIs, with EPContext callback support added across language bindings ([#33166](microsoft/onnxruntime#33166), [#32265](microsoft/onnxruntime#32265)). - Reduced CPU session-initialization overhead by parallelizing eligible weight prepacking, and accelerated block-wise INT4/INT8 QMoE experts with MLAS QNBit kernels and grouped expert dispatch ([#31691](microsoft/onnxruntime#31691), [#32644](microsoft/onnxruntime#32644), [#32668](microsoft/onnxruntime#32668)). - Added x86 FP16 LayerNorm/RMSNorm acceleration, Arm KleidiAI SVE2.1 FP16 GEMM support, and additional RISC-V vector kernels ([#32715](microsoft/onnxruntime#32715), [#32670](microsoft/onnxruntime#32670), [#32710](microsoft/onnxruntime#32710)). - Enabled CoreML participation in device-based EP selection, including Apple Neural Engine selection through `PREFER_NPU` ([#31975](microsoft/onnxruntime#31975)). - Added workspace-memory accounting and verification for constrained-memory graph partitioning, alongside broader model, graph, and tensor validation ([#31962](microsoft/onnxruntime#31962), [#32189](microsoft/onnxruntime#32189)). ## Announcements & Compatibility - [CUDA Plugin EP v0.3.0](https://github.com/microsoft/onnxruntime/releases/tag/plugin-ep-cuda/v0.3.0) and WebGPU Plugin EP v0.5.0 are matched with ONNX Runtime 1.31.0. For **contrib-op compatibility**, core and the plugin must use the same contributed-operator schemas; building both from the **same ONNX Runtime revision** is recommended. Schema mismatches can cause incorrect execution or crashes and may not be detected during plugin registration. - **`GatherBlockQuantized` behavior change:** out-of-range indices now produce zero output slices across CPU, CUDA, and WebGPU for both integer and floating-point quantized formats. This deliberately differs from ONNX `Gather` error semantics ([#32480](microsoft/onnxruntime#32480)). - **Experimental API migration:** model-package consumers should use `OrtApi::GetModelPackageApi` and the stable `OrtModelPackageApi` table. EPContext callback registration now uses stable APIs; the corresponding experimental lookup entries were removed. The stable native callback contract carries callback/state pointers, with payload limits enforced by application callbacks, bindings, or EPs rather than a native read-options policy ([#33166](microsoft/onnxruntime#33166), [#32265](microsoft/onnxruntime#32265)). - **ACL EP is deprecated** and will be removed in a future release. Source builds using `--use_acl` now receive a deprecation warning ([#32564](microsoft/onnxruntime#32564)). - The ONNX dependency remains at **1.22.0**. The initial ONNX 1.23 integration was reverted pending upstream fixes; this release does not ship that integration's new opset or FLOAT6 support ([#33073](microsoft/onnxruntime#33073)). - Supported native builds now default to **1DS telemetry**. Windows TraceLogging remains selectable with `--use_windows_telemetry` or `onnxruntime_USE_WINDOWS_TELEMETRY=ON`; telemetry can be disabled with `--no_telemetry` ([#32384](microsoft/onnxruntime#32384)). ## New Features ### Core APIs & Runtime - Stabilized the model-package C and C++ APIs for loading packages, selecting compatible model variants, and creating sessions ([#33166](microsoft/onnxruntime#33166)). - Stabilized named EPContext data read/write callbacks for application-managed storage. Added EP support negotiation so registered callbacks do not silently fall back to filesystem I/O ([#32265](microsoft/onnxruntime#32265)). - Extended the Compile API to write external initializers and EP context data to buffers, enabling in-memory compilation workflows for models larger than 2 GB ([#31347](microsoft/onnxruntime#31347)). - Added workspace-memory accounting, source reporting, and post-partition reservation verification. Set `session.strict_workspace_verification=1` to fail initialization on workspace declaration overruns or nonzero orphaned reservations; strict verification is not supported for ORT-format model loads ([#31962](microsoft/onnxruntime#31962), [#32189](microsoft/onnxruntime#32189)). - Added the opt-in source-build option `onnxruntime_DISABLE_DEVICE_DISCOVERY=ON` to skip platform accelerator probing and report only the CPU device ([#32592](microsoft/onnxruntime#32592)). ### Shared Contrib Operators These updates affect core operator schemas and cross-provider behavior, not only the separately released GPU plugins. - Extended `EngramGate` and `NGramHashMapping` for Qwen4-Exp, and added `VarlenNGramHashMapping` for packed DeepSeek Engram batching with request-local history. Packed hashing also supports Qwen4-Exp head offsets, EOS resets, and segment boundaries ([#32285](microsoft/onnxruntime#32285), [#32358](microsoft/onnxruntime#32358), [#32467](microsoft/onnxruntime#32467)). - Added the `activation` attribute to `GatedRMSNorm` for SiLU, its Swish alias, and Sigmoid gating across CPU, CUDA, and WebGPU. SiLU remains the default ([#32512](microsoft/onnxruntime#32512)). - Added weightless hyper-connection operators `BranchwiseRMSNorm`, `ScaledSiLU`, `HyperConnectionPreMix`, and `HyperConnectionPostMix`, with CPU, CUDA, and WebGPU implementations ([#32687](microsoft/onnxruntime#32687)). - Extended `GatherBlockQuantized` to FP8/FP4 data, full-axis blocks, and scale broadcasting, and improved CPU UINT8 dequantization. See the out-of-range-index behavior change above ([#32480](microsoft/onnxruntime#32480), [#32621](microsoft/onnxruntime#32621)). ### Plugin Execution Provider Infrastructure - Added support for statically linked plugin EPs, with a static WebGPU plugin build configuration ([#32395](microsoft/onnxruntime#32395)). - Preserved caller streams in single-tensor plugin data transfers and handled null plugin allocator returns ([#32666](microsoft/onnxruntime#32666), [#32683](microsoft/onnxruntime#32683)). - Deduplicated AutoEP custom-op domains and corrected EP assignment reporting after NHWC layout transformation ([#32711](microsoft/onnxruntime#32711), [#33184](microsoft/onnxruntime#33184)). - Added reference guidance for compiled-model compatibility validation, including multi-device scenarios ([#29168](microsoft/onnxruntime#29168)). ## Execution Provider Updates ### CUDA EP CUDA updates include sparse attention and packed continuous batching, expanded paged speculative decoding, INT2 and mixed-width QMoE execution, opt-in MatMul auto-tuning, improved MXFP4 support on Blackwell consumer GPUs, and reliability fixes. ... (truncated) Commits viewable in [compare view](microsoft/onnxruntime@v1.30.0...v1.31.0). </details> Updated [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 10.2.3 to 10.3.0. <details> <summary>Release notes</summary> _Sourced from [Swashbuckle.AspNetCore's releases](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)._ ## 10.3.0 ## What's Changed * Change nullability handling for schemas with `anyOf`, `allOf`, `oneOf` or `type = null` by @ldeluigi in domaindrivendev/Swashbuckle.AspNetCore#3976 * Handle leading slash on route prefix during index.html GET by @superstator in domaindrivendev/Swashbuckle.AspNetCore#4084 * Move NRT handling to DataContractResolver by @desjoerd in domaindrivendev/Swashbuckle.AspNetCore#3998 * Clarify nullable behaviour by @martincostello in domaindrivendev/Swashbuckle.AspNetCore#4094 * Fix review issues for caching and encoding by @martincostello in domaindrivendev/Swashbuckle.AspNetCore#4093 * Support multiple response types per status code by @DeagleGross in domaindrivendev/Swashbuckle.AspNetCore#4100 * Add coverage for `AddServer` across multiple documents by @RaphaelFakhri in domaindrivendev/Swashbuckle.AspNetCore#4115 * Fix Swagger sort key fallback for empty endpoint tags metadata by @AleksaMCode in domaindrivendev/Swashbuckle.AspNetCore#4125 * Fix parameter matching to consider location when names collide by @nonsoikem in domaindrivendev/Swashbuckle.AspNetCore#4126 * Emit form encoding for properties of a complex form parameter by @RaphaelFakhri in domaindrivendev/Swashbuckle.AspNetCore#4128 * Keep a property's own summary when comments come from several XML files by @RaphaelFakhri in domaindrivendev/Swashbuckle.AspNetCore#4129 * Strip query string from relative document URLs in Swagger UI by @GabeSilvaDev in domaindrivendev/Swashbuckle.AspNetCore#4152 * Document that System.Text.Json ignores `[EnumMember]` by @RaphaelFakhri in domaindrivendev/Swashbuckle.AspNetCore#4127 * Drop the regex route constraint from the default Swagger route by @RaphaelFakhri in domaindrivendev/Swashbuckle.AspNetCore#4130 * Serialize custom values in the UI `ConfigObject.AdditionalItems` by @RaphaelFakhri in domaindrivendev/Swashbuckle.AspNetCore#4132 * Use Minimal APIs JSON options when MVC is not registered by @RaphaelFakhri in domaindrivendev/Swashbuckle.AspNetCore#4116 * Resolve enum contracts against the underlying type under source generation by @RaphaelFakhri in domaindrivendev/Swashbuckle.AspNetCore#4131 ## New Contributors * @ldeluigi made their first contribution in domaindrivendev/Swashbuckle.AspNetCore#3976 * @superstator made their first contribution in domaindrivendev/Swashbuckle.AspNetCore#4084 * @desjoerd made their first contribution in domaindrivendev/Swashbuckle.AspNetCore#3998 * @RaphaelFakhri made their first contribution in domaindrivendev/Swashbuckle.AspNetCore#4115 * @AleksaMCode made their first contribution in domaindrivendev/Swashbuckle.AspNetCore#4125 * @nonsoikem made their first contribution in domaindrivendev/Swashbuckle.AspNetCore#4126 * @GabeSilvaDev made their first contribution in domaindrivendev/Swashbuckle.AspNetCore#4152 * @JulianThoms made their first contribution in domaindrivendev/Swashbuckle.AspNetCore#4182 **Full Changelog**: domaindrivendev/Swashbuckle.AspNetCore@v10.2.3...v10.3.0 Commits viewable in [compare view](domaindrivendev/Swashbuckle.AspNetCore@v10.2.3...v10.3.0). </details> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This was referenced Oct 13, 2026
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Enable support for statically linked plugin EPs in ORT.
Update the WebGPU EP to have an additional static plugin EP build configuration.
Motivation and Context
Eventually, we want to only have a plugin EP implementation for the WebGPU EP while allowing consumers like onnxruntime-web to continue to statically link the EP.
The longer-term goal is to move the WebGPU EP into a separate repo. Refer to the plan doc for more details.