DFOS Extension Registry

Status — companion document, no clock of its own. This document defines no protocol rules; it is the single index of the names the specs register — service types under the core's open services namespace, JWS typ values under the core's typ convention, and the names the corpus mints in global registries it does not own (External Registrations). Each name's semantics live in its owner spec, which remains normative wherever the two could be read to disagree. A new name lands by adding its row here in the same PR that specifies it, never by minting locally (CONTRIBUTING, item 2). Discuss in the DFOS space.

Service Types

The services namespace is open: the two core types are structurally validated by every conformant verifier, and every other registered type is an opaque extension the core preserves verbatim and ignores — registering one requires no protocol or cross-language change. One row per type:

Service type Owner spec Validation Semantics
DfosRelay PROTOCOL core Transport locator — where to reach a relay serving this identity.
ContentAnchor PROTOCOL core Stable content reference — a contentId or artifact CID under a client-defined semantic label.
DfosAuthorizationServer SIWD consumer The canonical authorize origin able to produce this subject's signature under SIWD profile A.
DfosOrigin ORIGIN-BINDING consumer The identity's claimed web domain — the chain half of the bidirectional origin binding.
DfosDocumentGateway WEB-RELAY consumer Base URL of a document gateway serving this identity's content.
DfosProfile WEB-RELAY consumer The identity's profile document — a contentId (living chain) or artifact CID (immutable snapshot), dispatched by shape as anchors are.

Validationcore: structurally validated by every conformant verifier, and a malformed entry rejects at verification. consumer: opaque to the core (preserved verbatim, ignored); structural validation is an obligation of the owner spec's consumers. Everything else — ambiguity rules (DfosOrigin and DfosAuthorizationServer: one entry or none), field grammar, display discipline — is the owner spec's.

JWS typ Values

Every DFOS JWS envelope is typ-scoped: the protected header names exactly one registered value, and a verifier rejects any typ other than the one the presented context requires — the gate that keeps a JWS signed for one purpose from ever being presented as another. The cid column marks whether the envelope carries the protocol's cid header.

typ value Owner spec cid Semantics
did:dfos:identity-op PROTOCOL yes Identity chain operations.
did:dfos:content-op PROTOCOL yes Content chain operations.
did:dfos:artifact PROTOCOL yes Standalone signed inline documents.
did:dfos:countersign PROTOCOL yes Standalone witness attestations.
did:dfos:credential CREDENTIALS yes Authorization credentials — the cid is their revocation address.
did:dfos:revocation CREDENTIALS yes Credential revocation artifacts.
did:dfos:credit-claim CREDITS yes Document-plane credit claims — registered for typ routing; never relay-ingested.
did:dfos:sign-request SIGNING yes Sign-request envelopes — travel the signing-mailbox courier, never POST /proof/v1/operations.
did:dfos:siwd SIWD no Sign In With DFOS challenge proofs — delivered by web redirect or the signing mailbox; never relay-ingested.
did:dfos:siwd-ask SIWD no Loopback client ask proofs — the client's key-control proof over its own authorize request.
did:dfos:request-proof API-AUTH no API request proofs — ride the Authorization header of a credential-gated API request and die with the freshness window.
did:dfos:identity-proof API-AUTH no API identity proofs — the request proof's credential-less sibling: bind one exact request to a bare DID, authentication only.
did:dfos:key-add KEY-PROOF no Key introduction proofs — the candidate key's position-bound possession-and-consent proof; self-signed, presented to ceremonies and embedded in the introducing identity operation's keyProofs.

External Registrations

The corpus also mints names in two global namespaces DFOS does not own, and there the obligation runs outward: RFC 8615 §3 requires that an application minting a new well-known URI register its suffix in the IANA Well-Known URIs registry, and RFC 8552 §4.1.5 requires that a public specification calling for a global underscored DNS node name enter it in the IANA Underscored and Globally Scoped DNS Node Names registry. This table tracks those registrations the way the tables above track the internal ones — one row per name, corrected in place as the registries change. A Registered cell of is a name the registry does not list.

Name Registry Owner spec Registered
/.well-known/dfos-relay IANA Well-Known URIs (RFC 8615) WEB-RELAY
/.well-known/dfos-app.json IANA Well-Known URIs (RFC 8615) SIWD
/.well-known/dfos-did IANA Well-Known URIs (RFC 8615) ORIGIN-BINDING
/.well-known/dfos-key-proof IANA Well-Known URIs (RFC 8615) KEY-PROOF
_dfos (TXT) IANA Underscored DNS Node Names (RFC 8552) ORIGIN-BINDING

Registration is an act of the project's stewards, outside any PR; what a PR owns is this table's accuracy and the registration note in each minting spec. A future spec that mints a well-known path or an underscored name adds its row here in the same PR that specifies it, exactly as internal names do.

Registries That Live in Their Owner Spec

Names whose grammar is inseparable from their owner's machinery register there, not here — this section only says where: