Skip to content

The sempods specification

A pod is a person's or an organisation's own store of linked data: they hold it, they say who may read and write which part of it, and applications talk to it over HTTP. This site is the contract such a pod implements. It is written so that somebody who has never seen the reference implementation can build a conformant pod in a language of their choosing — and can tell whether they succeeded.

This specification is not yet binding

Until the 0.1 release it is descriptive: it was extracted from the reference implementation, so where the text and that code disagree today, the code is right. At 0.1 that reverses and a deviation becomes the implementation's bug. Governance says what the switch is and when it happens.

Core and modules

Core is not optional. Contexts, grants, auth, CRUD, SPARQL and find are what makes a pod a pod. Something implementing a subset of them is something else, and should not use the name.

Modules are optional and versioned separately. OIDC, media and MCP each add a surface a pod may choose to offer. A pod may implement core 0.1 alongside media 0.2.

"Optional" only means something if a client can ask, so a pod announces what it implements at GET {pod}/_system/conformance — see the core chapter.

The chapter map, the requirement scheme and what an identifier promises are on the specification page.

Try it

The HTTP surface is described in OpenAPI and rendered with a client you can send requests from. Anonymous reads and SPARQL need no token, so the read surface can be explored without registering anything.

Elsewhere

  • Vocabulary — the sps: terms, and what stability they promise.
  • sempods-kotlin — the reference implementation. It is one implementation of this contract, not the definition of it.
  • The repository — where the text is edited, and where a disagreement with it is filed.