{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "title": "JSON schema for component.json files",
    "type": "object",
    "additionalProperties": true,
    "properties": {
        "private": {
            "description": "A boolean specifying whether the component is private, defaulting to  false.",
            "type": "boolean",
            "default": false
        },
        "name": {
            "description": "A public component MUST have a 'name'. This is what will be passed to  require().",
            "type": "string",
            "pattern": "^[0-9a-z-_]+$"
        },
        "repo": {
            "description": "The public component MUST have a 'repository' property, this is registry end-point consisting of  <username>/<project> , for example 'visionmedia/page.js' or 'component/dialog'.",
            "type": "string"
        },
        "description": {
            "description": "The component SHOULD have a 'description' property. This helps people find and understand your component.",
            "type": "string"
        },
        "version": {
            "description": "The public component MUST include a version, allowing other scripts to depend on specific releases of the component.",
            "type": "string"
        },
        "keywords": {
            "description": "Keywords are used when searching for a component. A public component SHOULD list a few keywords.",
            "type": "array",
            "items": {
                "type": "string",
                "minItems": 1
            }
        },
        "main": {
            "description": "It is recommended that you use 'index.js' for the main component file, however if you use another filename, you MUST define a 'main' field for that.",
            "type": "string"
        },
        "scripts": {
            "description": "The  scripts  field explicitly specifies the scripts for this component. For public components, these must be regular JavaScript files. For private components, these should be regular Javascript files.",
            "type": "array",
            "items": {
                "type": "string",
                "minItems": 1
            }
        },
        "styles": {
            "description": "The  styles  field explicitly specifies the stylesheets for this component. For public components, these must be regular CSS files. For private components, these should be regular CSS files.",
            "type": "array",
            "items": {
                "type": "string",
                "minItems": 1
            }
        },
        "json": {
            "description": "The  json  field explicitly specifies the  JSON  files for this component. Each file must be valid  JSON .",
            "type": "array",
            "items": {
                "type": "string",
                "minItems": 1
            }
        },
        "images": {
            "description": "The  images  field MUST be supported and fetched upon installation, this allows component build tools to rewrite stylesheet  url() s in order to accomodate various file serving techniques.",
            "type": "array",
            "items": {
                "type": "string",
                "minItems": 1
            }
        },
        "fonts": {
            "description": "The  fonts  field MUST be supported and fetched upon installation, this allows component build tools to rewrite stylesheet  url() s in order to accomodate various file serving techniques.",
            "type": "array",
            "items": {
                "type": "string",
                "minItems": 1
            }
        },
        "files": {
            "description": "In the future we will classify more file types, however for those which are not treated uniquely such as fonts may be placed in a  files  array to aid build and installation tools.",
            "type": "array",
            "items": {
                "type": "string",
                "minItems": 1
            }
        },
        "dependencies": {
            "description": "Runtime dependencies.",
            "type": "object",
            "additionalProperties": {
                "type": "string"
            }
        },
        "locals": {
            "description": "Local dependencies are already located on disk, these are not installed, but are however included in the builds, thus no versions need to be defined. Local components should be located in a directory specified within .paths.",
            "type": "array",
            "items": {
                "type": "string",
                "minItems": 1
            }
        },
        "remotes": {
            "description": "The public component must not contain any remotes.",
            "type": "array",
            "items": {
                "type": "string",
                "minItems": 1
            }
        },
        "paths": {
            "description": "The public component must not contain any paths.",
            "type": "array",
            "items": {
                "type": "string",
                "minItems": 1
            }
        },
        "templates": {
            "description": "The templates array MUST provide the contents of each file as a require-able module. For example the following must provide the HTML string via require('user.html').",
            "type": "array",
            "items": {
                "type": "string",
                "minItems": 1
            }
        },
        "demo": {
            "type": "string"
        },
        "development": {
            "$ref": "#"
        },
        "license": {
            "description": "The license string such as 'MIT' may be used for search output and other reporting, developers SHOULD specify this field",
            "type": "string"
        }
    }
}