Implementations
Reference implementations
Three reference implementations - Go, TypeScript, and Python. MIT licensed. Their behavior is normative where the specification is ambiguous.
Go - changespec-go
Requires Go 1.21 or later. Embeds the canonical schema.json at compile time via //go:embed. Strict Ed25519 via ed25519consensus.
Source: github.com/changespec/changespec-go
go get github.com/changespec/changespec-go@latest
package main
import (
"fmt"
"log"
"github.com/changespec/changespec-go/changespec"
)
func main() {
raw := []byte(`{
"specversion": "1.0",
"id": "cs_01HXYZ1234ABCD",
"vendor_id": "acme",
"category": "api_breaking",
"severity": "high",
"title": "confirm() now requires return_url parameter",
"summary": "The Payments API confirm() method now requires return_url.",
"published_at": "2026-04-10T14:00:00Z",
"source_type": "publisher_verified"
}`)
event, err := changespec.Parse(raw)
if err != nil {
log.Fatalf("invalid event: %v", err)
}
fmt.Printf("vendor: %s category: %s severity: %s\n",
event.VendorID, event.Category, event.Severity)
}
TypeScript - changespec-ts
Requires Node.js 18 or later. Zod-based schema validation. Extension field handling guards against prototype pollution. Source: github.com/changespec/changespec-ts
npm install changespec
import { parseEvent } from "changespec";
const raw = {
specversion: "1.0",
id: "cs_01HXYZ1234ABCD",
vendor_id: "acme",
category: "api_breaking",
severity: "high",
title: "confirm() now requires return_url parameter",
summary: "The Payments API confirm() method now requires return_url.",
published_at: "2026-04-10T14:00:00Z",
source_type: "publisher_verified",
};
const result = parseEvent(raw);
if (!result.success) {
console.error("validation errors:", result.error.issues);
process.exit(1);
}
const event = result.data;
console.log(`vendor: ${event.vendor_id} severity: ${event.severity}`);
Python - changespec-py
Requires Python 3.11 or later. Pydantic v2 model. Strict field validation with Annotated constraints. Source: github.com/changespec/changespec-py
pip install changespec
from changespec import parse_event, ChangeSpecValidationError
raw = {
"specversion": "1.0",
"id": "cs_01HXYZ1234ABCD",
"vendor_id": "acme",
"category": "api_breaking",
"severity": "high",
"title": "confirm() now requires return_url parameter",
"summary": "The Payments API confirm() method now requires return_url.",
"published_at": "2026-04-10T14:00:00Z",
"source_type": "publisher_verified",
}
try:
event = parse_event(raw)
print(f"vendor: {event.vendor_id} severity: {event.severity}")
except ChangeSpecValidationError as exc:
print(f"validation error: {exc}")
raise
Certified third-party implementations
Third-party implementations that have passed the conformance test suite at a defined level.
Certification levels
Each level is a strict superset of all lower levels.
| Level | Name | What it proves | Self-service |
|---|---|---|---|
| Level 1 | Syntactic | Correctly accepts all valid events and rejects all invalid events according to the JSON Schema. | Yes |
| Level 2 | Semantic | Correctly handles boundary conditions, edge cases, and semantic requirements beyond basic field presence. | Yes |
| Level 3 | Secure | Handles adversarial inputs safely. No panics, crashes, hangs, or unbounded memory use on malicious input. | Yes |
| Level 4 | Full Producer | A vendor's published events meet all MUST requirements for producers. Requires a sample of 20+ real events. | No - requires review |
Self-certification process (Levels 1-3)
- Clone the conformance suite: github.com/changespec/spec/tree/main/conformance
- Run the conformance runner for your language against the test vector directories.
- Confirm 0 failures.
- Ensure the test run is reproducible in a public CI system.
- Open a pull request or GitHub Discussion to submit your self-certification report.
- Add the appropriate badge to your implementation's README.
Submit your implementation
To have your implementation listed here:
- For certified implementations: run the conformance suite at github.com/changespec/spec/tree/main/conformance and open a GitHub Discussion with your results.
- For "ChangeSpec Compatible" listings without formal certification: submit a pull request to the spec repository.