Skip to main content

diff

Compare two event spec versions and validate that the declared SchemaVer bump matches the detected changes.

Synopsis

event-spec diff [from.yaml to.yaml]
event-spec diff <ns/name> [from-ver to-ver]
event-spec diff [--source <name>]

Modes

Mode 1 — Explicit file paths (no registry required)

event-spec diff specs/ecommerce/product_viewed/1-0-0.yaml \
specs/ecommerce/product_viewed/2-0-0.yaml

Mode 2 — Registry-aware with explicit versions

event-spec diff ecommerce/product_viewed 1-0-0 2-0-0

Mode 3 — Diff the two latest active versions

event-spec diff ecommerce/product_viewed

Mode 4 — All events from workspace source configs

# All sources
event-spec diff

# Single source
event-spec diff --source web-app

Flags

FlagDefaultDescription
--breakingfalseShow only breaking changes
--formattextOutput format: text | json
--source""Source name (mode 4)

Output

Text format

BREAKING property_removed currency
BREAKING type_changed category: string → integer
OK property_added description

Version: declared 2-0-0, required 2-0-0 — ok

JSON format

{
"namespace": "ecommerce",
"name": "product_viewed",
"from_version": "1-0-0",
"to_version": "2-0-0",
"changes": [
{ "kind": "property_removed", "property": "currency", "breaking": true },
{ "kind": "type_changed", "property": "category", "breaking": true, "from": "string", "to": "integer" }
],
"version_valid": true,
"required_version": "2-0-0"
}

Exit codes

CodeMeaning
0No inconsistencies
1Version bump is inconsistent with detected changes
2Parse or configuration error

Breaking change rules

ChangeBreaking
Remove a propertyYes
Add a required propertyYes
Rename a propertyYes
Change property typeYes
Make optional → requiredYes
Remove enum valueYes
Add optional propertyNo
Make required → optionalNo
Add enum valueNo
Description-only changeNo

CI usage

# Fail CI if any breaking changes are declared with an incorrect version bump
event-spec diff --format json --breaking