blob: f05c1bb287dd01c8b3b6f329c09877002c27f7d9 [file]
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://security.apache.org/schemas/project-coordinates.schema.json",
"title": "Apache project security coordinates",
"description": "Hand-maintained security coordinates for Apache projects, keyed by PMC/committee id. Consumed by scripts/project-page.py to build the projects overview and by external tools.",
"type": "object",
"propertyNames": {
"pattern": "^(\\$schema|[a-z0-9][a-z0-9-]*)$"
},
"properties": {
"$schema": {
"type": "string",
"description": "Optional reference to this schema so editors validate the file. Ignored by the site generator (keys starting with '$' are not treated as projects)."
}
},
"additionalProperties": {
"$ref": "#/$defs/project"
},
"$defs": {
"urlOrNull": {
"type": ["string", "null"],
"format": "uri"
},
"project": {
"type": "object",
"description": "Security coordinates for a single project. The six core fields are always present (null when unknown) so consumers need no per-field presence checks.",
"required": [
"name",
"security_model_link",
"security_model_source",
"advisory_link",
"contact",
"logo_link"
],
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Human-readable project name, e.g. \"Apache Kafka\"."
},
"security_model_link": {
"$ref": "#/$defs/urlOrNull",
"description": "URL of the project's human-facing (HTML) security page or threat model, shown on the site. Null when the project has none."
},
"security_model_source": {
"$ref": "#/$defs/urlOrNull",
"description": "URL of an AI-friendly plain-text/Markdown version of the security page. Not rendered on the site; used by external tooling to fetch text instead of HTML. Null when unavailable."
},
"advisory_link": {
"$ref": "#/$defs/urlOrNull",
"description": "URL of the project's published list of security advisories. Null when the project has none."
},
"contact": {
"type": "string",
"format": "email",
"minLength": 1,
"description": "Security reporting address. Defaults to security@apache.org when the project has no dedicated list."
},
"logo_link": {
"$ref": "#/$defs/urlOrNull",
"description": "URL of the project logo shown next to its name. Null when no logo is available."
},
"contributing": {
"$ref": "#/$defs/urlOrNull",
"description": "Optional URL of the project's contributing guide."
},
"dependency_advisory_triage": {
"$ref": "#/$defs/urlOrNull",
"description": "Optional URL of the project's dependency-advisory triage data (e.g. VEX or suppression file)."
}
}
}
}
}