This issue proposes that WASI adopt the Component Model's implements annotation feature (gated as 🏷️ in the Component Model's gated features), following the process described in CONTRIBUTING.md § Adopting Component Model features.
Feature
The 🏷️ gate covers the (implements "I") and (external-id ...) attributes on plain-named instance imports and exports (Explainer § Import and Export Definitions). The implements annotation records that a plain-named instance import or export implements a particular WIT interface, which allows a component to import (or export) more than one instance of the same interface under distinct names while preserving the semantic link to that interface for toolchains, bindings generators, hosts, and composition tooling:
(component
(import "primary" (implements "wasi:keyvalue/store") (instance ...))
(import "secondary" (implements "wasi:keyvalue/store") (instance ...))
)
In WIT, this is surfaced through plain-named interface imports:
world w {
import primary: store;
import secondary: store;
}
The companion external-id attribute closes the naming-expressivity gap for plain names, letting hosts distinguish concrete instances (e.g. (implements "wasi:keyvalue/store") (external-id "user-db-prod:region-a")).
Stability
Iteration and feedback
Implementation experience preceded and shaped the spec merge:
Feedback from these implementations was incorporated into the final design before the spec PRs merged.
WASI APIs that would depend on it
No impact on current set of 0.3.x WIT definitions. However importing multiple instances of the same interface is a long-standing need for WASI consumers whose hosts provide more than one backend:
Note that, per the adoption process, not all Component Model features are surfaced directly in WASI WIT definitions. Adopting 🏷️ does not require any change to already-released wasi:* packages; it makes the feature part of the baseline that runtimes and toolchains must support for the release that adopts it, so that the proposals above (and composition/virtualization tooling built around WASI worlds) can rely on it.
Requested action
Per CONTRIBUTING.md § Adopting Component Model features, we believe the stability criteria are met: the design is complete, and the feature has been through a phase of iteration and feedback across multiple implementations.
We therefore aim to add a vote to an upcoming WASI Subgroup meeting agenda to adopt the Component Model implements feature (🏷️) for inclusion in the next WASI 0.3.x release. Once adopted:
This issue proposes that WASI adopt the Component Model's
implementsannotation feature (gated as 🏷️ in the Component Model's gated features), following the process described in CONTRIBUTING.md § Adopting Component Model features.Feature
The 🏷️ gate covers the
(implements "I")and(external-id ...)attributes on plain-named instance imports and exports (Explainer § Import and Export Definitions). Theimplementsannotation records that a plain-named instance import or export implements a particular WIT interface, which allows a component to import (or export) more than one instance of the same interface under distinct names while preserving the semantic link to that interface for toolchains, bindings generators, hosts, and composition tooling:In WIT, this is surfaced through plain-named interface imports:
The companion
external-idattribute closes the naming-expressivity gap for plain names, letting hosts distinguish concrete instances (e.g.(implements "wasi:keyvalue/store") (external-id "user-db-prod:region-a")).Stability
(implements "I")to plainname imports to allow multiple imports component-model#613 (merged 2026-05-28), with theexternal-idfollow-up in Addexternal-idattribute component-model#672 (merged 2026-07-08).Iteration and feedback
Implementation experience preceded and shaped the spec merge:
wasm-tools component newbytecodealliance/wasm-tools#2187 (2025-05);(implements "...")component name support in Add(implements "...")component name support bytecodealliance/wasm-tools#2453 (2026-05-13, ahead of the spec PR merging); initialexternal-idsupport in Initial work forversionsuffixandexternal-idbytecodealliance/wasm-tools#2555 (2026-07-02).(implements "...")plumbed throughout inPlumb (implements "...") support throughout bytecodealliance/wasmtime#13361 (2026-05-20), integrated into
bindgen!inLoosely integrate
implementsintobindgen!bytecodealliance/wasmtime#13497 and #13513, resource support inSupport resources for implements bytecodealliance/wasmtime#13666, and
external-idplumbing inPlumb external-id on component import/export bytecodealliance/wasmtime#13874.
Feedback from these implementations was incorporated into the final design before the spec PRs merged.
WASI APIs that would depend on it
No impact on current set of 0.3.x WIT definitions. However importing multiple instances of the same interface is a long-standing need for WASI consumers whose hosts provide more than one backend:
Note that, per the adoption process, not all Component Model features are surfaced directly in WASI WIT definitions. Adopting 🏷️ does not require any change to already-released
wasi:*packages; it makes the feature part of the baseline that runtimes and toolchains must support for the release that adopts it, so that the proposals above (and composition/virtualization tooling built around WASI worlds) can rely on it.Requested action
Per CONTRIBUTING.md § Adopting Component Model features, we believe the stability criteria are met: the design is complete, and the feature has been through a phase of iteration and feedback across multiple implementations.
We therefore aim to add a vote to an upcoming WASI Subgroup meeting agenda to adopt the Component Model
implementsfeature (🏷️) for inclusion in the next WASI 0.3.x release. Once adopted:@since-gated) WASI APIs in the next release may depend on thefeature.
Model feature.
Model features required to implement that WASI version.