Skip to content

Publishing and Versioning

Universal Manifest is designed to be adopted by external systems. That requires stable, HTTPS-hosted, versioned URLs for core artifacts.

The key principle:

  • immutable, versioned artifacts under /ns/universal-manifest/vX.Y/

At minimum, per version:

  • JSON-LD context: /ns/universal-manifest/vX.Y/schema.jsonld
  • JSON Schema: /ns/universal-manifest/vX.Y/schema.json

Example (v0.1):

  • https://universalmanifest.net/ns/universal-manifest/v0.1/schema.jsonld
  • https://universalmanifest.net/ns/universal-manifest/v0.1/schema.json

Once published, versioned artifacts MUST NOT change in-place.

If a change is needed:

  • create a new version folder (e.g. v0.1v0.2)
  • publish new versioned URLs

If a latest/ alias exists, it MUST:

  • redirect to a concrete version (301/302), and
  • MUST NOT serve mutable content directly
  • .jsonld SHOULD be application/ld+json
  • .json SHOULD be application/schema+json (or application/json)

To support browser tooling:

  • Access-Control-Allow-Origin: * (or a permissive allowlist)

For immutable versioned paths:

  • Cache-Control: public, max-age=31536000, immutable

For latest/ redirects:

  • short cache (or no-store) so it can change when a new version ships

During v0.x:

  • breaking changes are allowed, but MUST be reflected by a new version folder (v0.1v0.2)
  • include a short migration note in the newer version docs (when relevant)

External implementers typically adopt from:

  • fixtures (valid + invalid)
  • conformance checklists
  • well-known names registry (non-normative guidance)

This is why the harness and fixtures are published on this site:

  • /harness/fixtures/…
  • Release procedure: Publishing → Releasing
  • Domain split and responsibilities: Publishing → Domain Split