Skip to main content
PR Start Date: 2026-10-13
Published Date: 2026-10-14
Authors: Compatibility:
  • Backwards-compatible
  • Forwards-compatible

Summary

Proposes a reorganization of the ODF specification from a single document into a set of interconnected standards.

Table of Contents

Motivation

The current spec has grown very large and covers an extensive breadth of topics starting from common terminology, metadata structure, and data layouts, and to transformations, checkpointing, engine protocols and many more. This is too much information in a single document already. We also see several more areas developing that are currently not reflected in the spec. From low-level things like encryption, privacy-preserving computations, and logical data hashing, to high-level things like IaC resource framework, node-level and decentralized authorization etc. These areas also need to be covered by a spec, but represent their own domains that would be better covered in standalone documents that reference other domains rather than being mixed with the rest.

Proposed Solution

We propose to split the current ODF specification into a set of interconnected standards, similarly to W3C Credentials Community Group, Open Container Initiative, and others.

Top-level Documents

Domain-independent documents that serve as an entry point into the specs:

Domains

Specs are grouped into domains that roughly follow the protocol stack, from the dataset structure up to network-level and node-level concerns. Rather than defining general-purpose primitives like hashing and identity in standalone specs, each spec explains how it applies established standards like Multiformats and W3C DID where it uses them. Each spec is a standalone document that can reference specs in its own or lower domains. Status legend:
  • Existing - content already exists in the current spec and will be moved
  • RFC - content exists in accepted RFCs but was never fully integrated into the spec
  • New - area not yet covered, the spec will be created as it matures

Datasets

Transformations

Exchange

Verification is not a standalone spec. Different kinds of verification (metadata chain integrity, data and checkpoint hashes, validity of transferred data, reproducibility of transformations, validity of query results) depend on the mechanics of the parts of the system they apply to, so each is specified in the corresponding spec. The Overview maps all verification layers to these specs.

Auth & Privacy

Automation

Reference

Schemas and API definitions that domain specs refer to, largely generated from machine-readable sources in the repository.

Repository Structure

Current layout of the repository:
Proposed layout of the repository:

Naming and Versioning

Each spec is stored as /specs/{domain}/{spec}.md, where both domain and spec names are the kebab-cased titles from the Domains tables, e.g. /specs/auth-and-privacy/authorization.md. Domain-independent documents (overview.md, glossary.md, reference.md) are stored at the root of /specs. All specs are versioned together as a single set, i.e. a release of ODF includes all specs at their current state. Releases are versioned by tagging the repository - the version is not written into the spec documents, neither as a whole nor per individual spec.

Common Spec Template

All spec files follow a common structure:
The RFCs field lists the RFCs that introduced or changed the spec, mirroring the Specs field in RFC headers, so the two are linked in both directions.

Drawbacks

  • Existing links to sections of the monolithic spec (from RFCs, docs, websites, and implementations) will break unless redirects or a stub document with pointers to new locations is maintained.
  • Readers lose a single linear narrative and need to navigate between multiple documents to understand the system as a whole. The Overview and Glossary specs are meant to mitigate this.
  • More documents means more maintenance overhead and a higher risk of duplication or inconsistency between specs. This increases the need for tooling that checks cross-references.
  • Publishing a set of specs requires more elaborate build and website tooling than rendering a single markdown file.

Rationale and alternatives

Splitting by domain aligns specs with their audiences and their rate of change: an engine implementer, a repository operator, and a node administrator care about different subsets of ODF, and the data format evolves much more slowly than node-level resources. It also allows new areas to start as standalone drafts without destabilizing mature parts of the spec, and makes it clear which parts of the spec an RFC affects. Alternatives considered:
  • Single document split into files at build time - would reduce the size of individual source files, but still presents one large document to readers and does not allow different parts of the spec to have different maturity levels.
  • Split by implementer role (e.g. engine, coordinator, repository contracts, as partially done in the current spec) - roles cut across many domains (e.g. a coordinator touches ingestion, hashing, metadata, and transfer), which would lead to duplication. Instead, roles are expected to be expressed as conformance profiles in the Overview spec that reference relevant domain specs.
  • Few coarse-grained specs (e.g. format, processing, and protocols, similarly to OCI) - simpler to navigate, but new areas like privacy, authorization, and automation would again bloat these documents.

Prior art

Unresolved questions

Future possibilities

  • Versioning specs independently, each with its own maturity level (similarly to W3C CSS modules), once some domains stabilize while others continue to evolve rapidly
  • Rust linter to ensure referential integrity
Last modified on October 15, 2026