W3C Web of Things (WoT) enables applications to interact with and orchestrate connected Things at the Web scale. The standardized abstract interaction model exposed by the WoT Thing Description enables applications to scale and evolve independently of the individual Things. Through WoT Bindings, the abstract interactions can be bound to various network-level protocols, standards, and platforms for connected Things, which already have have millions of devices deployed in the field today. This is done through protocol-specific URI schemes, additional descriptive vocabularies, and examples that guide the implementors of WoT Things and Consumers alike.
This document defines a registry of WoT bindings that make it possible to have a record of the different bindings. Additionally, it sets the rules that govern this registry to guarantee a quality standard, long lifecycle and ease of use for the developers.
The Web of Things (WoT) has the goal of improving interoperability in IoT and enabling the integration of various IoT ecosystems and communities. While the [[WOT-THING-DESCRIPTION11]] defines the abstract operations and interaction affordances, bindings map these to concrete network messages. Thus, thanks to bindings, the W3C Web of Things support multiple protocols and media types in a descriptive approach by adding further information to Thing Descriptions.
As the number of such protocols and media types is vast and tends to change over time, this document defines a flexible mechanism called a Binding Registry. This document relies on the registry track mechanism of the W3C Process and extends it to be specific and fit to the purposes of WoT bindings.
This enables a binding to be written by people with a good understanding of the binding, who are not necessarily participants of the WoT Working Group, such as other organizations developing a standard that can be used with WoT. This also allows the WoT Working Group to focus on the core specifications and engage other communities at the same time.
The fundamental WoT terminology such as Thing, Consumer, Thing Description (TD), Interaction Model, Interaction Affordance, Property, Action, Event, Data Schema, Content Type, Protocol Binding, Binding Template, Servient, Vocabulary, WoT Interface, WoT Runtime, IoT Platform, etc. is defined in Section 3 of the WoT Architecture specification [[WOT-ARCHITECTURE]].
In addition, this specification introduces further definitions below. These terms sometimes don't use the term WoT. Please use the "WoT" prefix outside of the context of Web of Things.
This registry is currently not published as a W3C Registry yet, meaning it is not finalized and stable.
Thus, we are currently in a pilot phase where only a small number of bindings written by the WoT Working Group
are included. They are still managed using the rules explained in this section but will not leave the
Initial state of the lifecycle. After the pilot phase, the registry will be opened to external
submissions and the process defined here will be used to manage submissions and entries. This pilot exists to
test the process and the rules defined in this section.
A set of rules extending the Registry Definitions from the W3C Process Document can be found below and is structured as follows.
Each entry MUST contain the following information. All parts of the entry MUST not conflict with existing bindings.
| Information | Type | Description |
|---|---|---|
| Name of the binding |
string
|
Examples: HTTP Binding, CoAP Binding |
| Link to the binding document |
anyURI
|
Stable link whose content cannot change (e.g., a date, version number, etc.), which can be managed by
another entity than the custodian. Examples: https://www.w3.org/TR/wot/binding-templates/http-20240726/index.html
|
| Specification that the Binding Targets |
string followed
by an anyURI
|
The name and link of the specification that the binding is designed to target. Example: `MQTT 3.1.1 (https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html)` |
| Binding ontology prefix |
string
|
Examples: htv, modv, cov |
| Binding Identification in TD | any type |
URI Scheme or other TD terms reserved for this binding. Examples: "subprotocol":"sse",
"href":"http://example.com",
"contentType":"application/json"
Until a custodian review, no registration is needed. A full IANA registration is required for the final and stable version of the binding. The submitter SHOULD trigger the registration at IANA. If needed, the custodian MAY trigger the IANA registration. The submitter MAY do a provisional registration to simplify the process on the IANA side. |
| Supported TD version |
string or Array
of string
|
A binding SHOULD correspond to specific TD specification version(s).
Note: no uniqueness needed |
| Status |
enumeration of
[Initial, Current, Superseded, Obsolete]
|
One of Initial, Current, Superseded or Obsolete.
|
| Summary Document |
anyURI
|
Link to the summary document of a Binding. |
| Version |
string
|
A string that identifies a specific version of this binding. Example: 1.0-2026-01-15. See
Versioning for more information.
|
W.r.t. "Binding Identification in TD": These terms should be refined based on the additions/changes to the TD
2.0 mechanism, e.g., introducing a protocol term or putting restrictions on URI scheme and
subprotocol combination, data mapping, etc.
Each entry in the registry goes through a lifecycle managed by the Custodian. The state in the lifecycle can be seen in the registry itself, as well as the GitHub project that is used to track submissions and transition requests.
The mechanism is as follows:
An entry can have the following status values: Initial -> Current ->
Superseded or Obsolete
Initial: Document is correctly written but no implementation experience has been necessarily
documented.
Current: Custodian recommends it for new implementations and it has enough implementation
experience. While this is also called as stable, given that it can be superseded later, it is
recommended to use the term current.
Superseded: A previously "current" entry that is now superseded with a newer one
Obsolete: Custodian does not recommend the usage of this bindingThe diagram below represents the lifecycle sates and the possible transitions between them. Please refer to transitions for the requirements and process for each transitions.
This is inspired by the
TTWG Boilerplate.
Alternatives can be reconsidered if needed. Initial: provisional, draft, in development. Current: Final,
Stable. Outdated: Old, Deprecated (not preferred since it is still usable), Previous, Obsolete. Also see
https://www.w3.org/policies/process/#RecsObs
Different bindings may share the same version string, but each version of a binding MUST be unique within
that binding's history.
The version string SHOULD contain a UTC-based date in ISO 8601 format in the form of
YYYY-MM-DD.
The content of a registry entry MAY not be updated for a given version.
If anyone wants to submit a newer version of an entry, it MUST be a new submission.
As indicated in transition to superseded and
transition to obsolete, the newer versions results in
state changes.
Review of a new version of an existing binding SHOULD take the previous reviews into account.
No entry is ever deleted. Deprecated entries are moved to another table or are clearly marked deprecated, colored differently, and moved to the bottom.
The registry is managed by a Custodian and submissions and transitions are reviewed by Reviewers.
A change in the registry MUST be confirmed by the Custodian. The custodian of this registry is the WoT WG in the beginning. If the WoT WG no longer exists, the W3C Team or its delegated entity MUST be the Custodian. For example, a dedicated W3C community group can be created to maintain the registry. This way, the registry can be maintained for a long period.
What does the binding have to contain to go into the table.
A binding that uses a protocol MUST map at least one WoT operation (op keyword value such as
readproperty) to a protocol message and vice versa.
A binding that uses a serialization format via the contentType keyword MUST mention how the
Data Schema terms should be used to describe the messages.
This avoids submission of a binding like "XML Binding" that says "Use
contentType:application/xml and nothing more. That alone would not be enough to serialize
correct messages based on the data schema.
TODO: We will need additional mechanisms (including vocabulary terms) to ensure that it is possible to use other media types.
The WoT binding MAY be just one section of the document. In that case, the "Link to the binding document" in the registry entry MUST point to the specific location. PDF or similar document types MAY be submitted if the "Link to the binding document" in the registry entry contains a text pointing to the section. However, HTML and Webpages SHOULD be favored.
The WoT binding document MAY follow another copyright than the W3C copyright. The submitter is free to choose based on the process they or their organization follows.
The binding document linked in the registry entry SHOULD be open to read, use, and implement, but that is not required for the document to be added to the registry.
Reviewers MUST have access to the binding document and to the protocol or media type specification (what the binding specifies).
The submitter MUST fill in the GitHub form provided by the custodian to generate a summary document, which is hosted by the custodian together with the registry. This form contains the following:
Every transition including the initial submission is triggered by an issue, which can be made by the submitter, the custodian or anyone who creates an issue using the correct template. For each transition - defined in lifecycle status - the following sections explain the requirements and rules that need to be followed by the submitter, custodian and reviewers.
As a general rule, a transition MAY be triggered by the submitter, the custodian or anyone who creates an
issue using the correct template.
However, the custodian MUST notify the initial submitter and the organization related to the entry of any
transition request using the contact information provided in the submission issue.
In the case of no replies within 30 days from the initial submitter or the organization related to the
entry, the custodian MUST process the transition, consulting reviewers when necessary for the transition
in question.
The custodian MUST assign reviewers for the submission and transitions who are different from the initial
submitter and the organization related to the entry.
The custodian MUST wait 15 days after the end of the review process before making a decision on the
transition to allow for any further comments or discussions to take place.
The custodian MUST make a decision on the transition within 30 days after the end of the review process.
If there are other entries in the registry with Initial or Current status
targeting the same specification, the reviewers MUST take them into account.
For example, a newer version of the same binding would result in a transition to Superseded for
the older version, which should be used in the review.
While the custodian is tasked with assigning reviewers, the custodian MAY NOT be able to assign
reviewers
As there are no guarantees that reviewers complete their reviews, the custodian MAY reassign reviewers if
necessary.
The submitter MUST use the correct transition issue template for each transition request and conform to the requirements defined in the template.
The initial submission MUST be made using
the corresponding issue template
and conform to the requirements defined in the template.
Initial entry MUST be a correct document which complies with and
.
The reviewer does not need to check whether the binding tries to map readproperty to a
non-existent HTTP method. A successful initial document triggers a "Call for Implementation".
The custodian MUST assign at least one reviewer who is a WoT expert for an initial submission.
Initial to CurrentCurrent to Superseded
Superseding a binding allows the custodian to recommend a newer version of a binding while still keeping
the older version available for reference.
When a new version of a binding is accepted as Current, the previous
Current version MUST be transitioned to Superseded.
No additional reviews are necessary as the reviewers of the new version would have already reviewed the
previous version as part of their review process.
While this transition happens automatically with a new binding transitioning to current,
this transition issue template
MAY be used for triggering a transition additionally.
Current to Obsolete
An entry MAY be transitioned to Obsolete from Current if the that binding is
not recommended for use.
The transition to the obsolete state from current MUST be made using
the corresponding issue template
and conform to the requirements defined in the template.
Superseded to Obsolete
An entry MAY be transitioned to Obsolete from Superseded if the that binding
is not recommended for use anymore.
The transition to the obsolete state from superseded MUST be made using
the corresponding issue template
and conform to the requirements defined in the template.
Initial to Superseded
An entry MAY be transitioned to Superseded from Initial if another entry will
continue development and maintenance.
While this transition happens automatically with a new binding transitioning to initial or current,
this transition issue template
MAY be used for triggering a transition additionally.
Initial to Obsolete
An entry MAY be transitioned to Obsolete from Initial if the that binding is
not recommended for use or testing anymore.
The transition to the obsolete state from initial MUST be made using
the corresponding issue template
and conform to the requirements defined in the template.
The binding MUST contain the following sections in the order presented below. The binding CAN contain other sections anywhere, including between the required ones. The submitters are encouraged to look at the existing submissions. There MUST be at least one operation mapped to a protocol message/vocabulary term. The submitter SHOULD use the table template provided in the document for the vocabulary. Each entry after the first version of the binding MUST contain a changelog in the entry itself.
A binding may not fit newer or older versions of a TD specification (e.g., readproperty can
become readprop, or a new operation can arrive). Thus, when writing a binding, it must be
associated with one or more known TD specification versions.
The requirements for the machine-readable documents are as follows:
The binding entry SHOULD NOT conflict with other entries in the registry, such as its other versions or its dependents, by redefining the same concepts, such as redefining the URI Scheme, the vocabulary terms, or the default assignments. If a previously stable binding is being improved upon by the same organization, that previous binding MUST be deprecated once the new one reaches the stable status.
The namespace (prefix and its values) defined in a binding SHALL NOT be redefined or extended in any
other binding, e.g., cov:method values shall not be extended in LWM2M and
cov:newTerm shall not be added in LWM2M binding.
If parts of the entry require the existence of another binding, i.e., has dependencies, the dependency MUST first be submitted as a separate entry. For example, before LWM2M can be submitted, the CoAP Binding must exist.
The following table defines the WoT Binding Registry where each entry is a binding. Entries are ordered alphabetically according to their name.
The first entry is a placeholder example. It will be deleted once the first real entry is added. You can find the list of bindings that predate the registry mechanism at this Readme file.
| Name | Version | Status | Binding Document Link | Ontology Prefix | Identification in TD | Supported TD version | Summary Document |
|---|---|---|---|---|---|---|---|
| MyProtocol | 1.0 | Initial | https://example.com | myprot | URI Scheme my.prot:// |
1.0, 1.1 | https://example.com/summary |