{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://openknowhow.org/okh.schema.json",
"title": "Manifest",
"description": "This is a JSON schema, which can validate an 'okh.yml' file, which holds a projects Open Know-How (Open Source Hardware) meta-data. This schema is based on the specification in ",
"$comment": "NOTE: The properies 'ui-hidden' and 'ui-recommended' used in this schema, are non-standardised, and currently unused. They could be used to create a form, and are here for consistency with .",
"type": "object",
"properties": {
"title": {
"description": "Name of the hardware",
"type": "string",
"examples": [
"My Cool Project",
"Ultimate Garden-Hose"
]
},
"description": {
"description": "Description of the hardware",
"type": "string",
"examples": [
"A 3D printed hose for a standard garden.",
"A loom with only wooden and 3D printed parts."
]
},
"intended-use": {
"description": "Intended use for the hardware",
"ui-recommended": true,
"type": "string",
"examples": [
"Allows computing under rough environmental conditions.",
"To produce electricity in windy areas, far from the grid."
]
},
"keywords": {
"description": "Keywords for the product",
"ui-recommended": "at least 1",
"type": "array",
"items": {
"type": "string",
"examples": [
"garden-hose",
"free-floating",
"low-tech",
"renewable"
]
},
"minItems": 1,
"uniqueItems": true
},
"project-link": {
"description": "Link to the project",
"$ref": "#/$defs/webUrl",
"examples": [
"TODO"
]
},
"image": {
"description": "Link to an image",
"ui-recommended": true,
"$ref": "#/$defs/relPathOrWebUrl",
"examples": [
"TODO"
]
},
"made": {
"description": "Someone has made this hardware",
"type": "boolean",
"default": false
},
"made-independently": {
"description": "Someone independent has made this hardware",
"type": "boolean",
"default": false
},
"license": {
"type": "object",
"properties": {
"hardware": {
"description": "The license under which the hardware is released",
"ui-recommended": true,
"$ref": "#/$defs/spdxLicenseExpression"
},
"documentation": {
"description": "The license under which the documentation is released",
"ui-recommended": true,
"$ref": "#/$defs/spdxLicenseExpression"
},
"software": {
"description": "The format should be an SPDX identifier. See https://spdx.org/licenses/",
"ui-recommended": true,
"$ref": "#/$defs/spdxLicenseExpression"
}
},
"anyOf": [
{ "required": [ "hardware" ] },
{ "required": [ "documentation" ] },
{ "required": [ "software" ] }
],
"additionalProperties": true
},
"licensor": {
"description": "Who granted the license?",
"$ref": "#/$defs/person",
"required": [ "name" ]
},
"okh-manifest-version": {
"description": "TODO",
"type": "string",
"const": "1.0.0",
"ui-hidden": true
},
"date-created": {
"description": "TODO",
"$ref": "#/$defs/date"
},
"date-updated": {
"$ref": "#/$defs/date",
"ui-hidden": true
},
"manifest-author": {
"description": "Author of this manifest file (you)",
"$ref": "#/$defs/person",
"required": ["name", "email"]
},
"manifest-language": {
"description": "Language of the original, as a BCP 47 language tag",
"$ref": "#/$defs/language"
},
"manifest-is-translation": {
"description": "If this manifest is a translation, fill in the following section",
"$ref": "#/$defs/translation"
},
"contact": {
"allOf": [{ "$ref": "#/$defs/person" }],
"properties": {
"social": {
"type": "array",
"items": {
"type": "object",
"properties": {
"platform": {
"type": "string",
"examples": [
"ssb",
"Telegram"
]
},
"user-handle": {
"type": "string",
"examples": [
"scoobiedoo",
"JohnDoe",
"JaneDoe",
"MrNobody",
"MsSomewhere_at_least"
]
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
},
"contributors": {
"ui-recommended": true,
"type": "array",
"items": {
"$ref": "#/$defs/person",
"required": [ "name" ]
}
},
"version": {
"type": ["string", "number"],
"examples": [
"2.3.4",
"0.0.1-24-g6a8a3a7",
"v0.3.1",
"6a8a3a7",
61
]
},
"development-stage": {
"type": "string",
"examples": [
"idea",
"prototype",
"product"
]
},
"documentation-home": {
"$ref": "#/$defs/relPathOrWebUrl",
"examples": [
"TODO URL"
]
},
"archive-download": {
"$ref": "#/$defs/relPathOrWebUrl",
"examples": [
"TODO URL"
]
},
"design-files": {
"ui-recommended": true,
"$ref": "#/$defs/documents"
},
"documentation-language": {
"description": "Language the documentation is written in, as a BCP 47 language tag",
"$ref": "#/$defs/language"
},
"documentation-is-translation": {
"description": "If the documentation is a translation, fill in the following section",
"$ref": "#/$defs/translation"
},
"schematics": {
"ui-recommended": "where applicable",
"$ref": "#/$defs/documents"
},
"bom": {
"description": "Bill of Materials",
"ui-recommended": true,
"$ref": "#/$defs/relPathOrWebUrl",
"examples": [
"TODO URL"
]
},
"tool-list": {
"description": "List of tools",
"ui-recommended": true,
"$ref": "#/$defs/relPathOrWebUrl",
"examples": [
"TODO URL"
]
},
"making-instructions": {
"ui-recommended": true,
"$ref": "#/$defs/documents"
},
"manufacturing-files": {
"ui-recommended": "where applicable",
"$ref": "#/$defs/documents"
},
"risk-assessment": {
"ui-recommended": true,
"$ref": "#/$defs/documents"
},
"tool-settings": {
"ui-recommended": "where applicable",
"$ref": "#/$defs/documents"
},
"quality-instructions": {
"$ref": "#/$defs/documents"
},
"operating-instructions": {
"ui-recommended": true,
"$ref": "#/$defs/documents"
},
"maintenance-instructions": {
"ui-recommended": true,
"$ref": "#/$defs/documents"
},
"disposal-instructions": {
"ui-recommended": true,
"$ref": "#/$defs/documents"
},
"software": {
"ui-recommended": "where applicable",
"$ref": "#/$defs/documents"
},
"health-safety-notice": {
"type": "string",
"examples": [
"TODO"
]
},
"standards-used": {
"type": "array",
"items": {
"type": "object",
"properties": {
"standard-title": {
"description": "Title of the standard used in developing the design or documentation",
"type": "string",
"examples": [
"DIN SPEC 3105-1",
"BCP 47 - International language tag",
"DIN A4 - European paper standard"
]
},
"publisher": {
"description": "Publisher of the standard",
"type": "string",
"examples": [
"ISO",
"IANA",
"DIN",
"OSEG"
]
},
"reference": {
"description": "Reference indentifier of the standard (e.g. 'ISO 9001')",
"type": "string",
"examples": [
"ISO 9001",
"ISO 1234",
"ISO 9876",
"DIN A4",
"DIN SPEC 3105-1"
]
},
"certification": {
"description": "If certification has been granted confirming compliance with the standard",
"type": "array",
"items": {
"type": "object",
"properties": {
"certifier": {
"description": "Individual or organisation granting the certification. Use 'Self' for self-certification",
"type": "string",
"examples": [
"Self",
"OrganizationX",
"PersonY",
"Big Corp. Inc."
]
},
"date-awarded": {
"description": "Date certification was granted",
"$ref": "#/$defs/date"
},
"link": {
"description": "Link to evidence of certification (e.g. certificate). Use an an absolute path to an external resource or an absolute or relative path to evidence within the documentation.",
"$ref": "#/$defs/webUrl",
"examples": [
"TODO"
]
}
},
"additionalProperties": true
}
}
},
"required": [ "standard-title" ],
"additionalProperties": true
}
},
"derivative-of": {
"description": "This project is a derivative of",
"$ref": "#/$defs/otherProject"
},
"variant-of": {
"description": "This project is a variant of",
"$ref": "#/$defs/otherProject"
},
"sub": {
"description": "This project uses the following sub-parts",
"$comment": "Deprecation warning: In newer versions, this is called 'sub-parts', not 'sub' anymore",
"deprecated": true,
"type": "array",
"items": {
"$ref": "#/$defs/otherProject"
}
},
"sub-parts": {
"description": "This project uses the following sub-parts",
"type": "array",
"items": {
"$ref": "#/$defs/otherProject"
}
}
},
"$defs": {
"webUrl": {
"type": "string",
"format": "uri",
"pattern": "^https?://"
},
"relPath": {
"type": "string",
"$comment": "A relative file-path to a dir or file below the root - as much as one can check for that with a regex",
"not": {
"anyOf": [
{
"$comment": "no protocol",
"pattern": "^[a-z]*:"
},
{
"$comment": "no URL-absolute path without protocol",
"pattern": "^//"
},
{
"$comment": "no parent-dir-references",
"pattern": "(?:.*/)?\\.\\.(?:/.*)?"
}
]
}
},
"relPathOrWebUrl": {
"type": "string",
"anyOf": [
{
"$comment": "A full web URL",
"format": "uri",
"pattern": "^https?://"
},
{
"$ref": "#/$defs/relPath"
}
]
},
"email": {
"type": "string",
"format": "email",
"examples": [
"jane.doe@email.com",
"john.doe@email.com",
"ester.something@good.org"
]
},
"date": {
"type": "string",
"format": "date",
"examples": [
"2000-04-06",
"0001-0-0",
"1984-10-1"
]
},
"language": {
"description": "Language as a BCP 47 language tag",
"type": "string",
"pattern": "^((?(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))|((?([A-Za-z]{2,3}(-(?[A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-(?