{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "additionalProperties": false,
  "id": "https://json.schemastore.org/pattern.json",
  "properties": {
    "id": {
      "description": "Unique id of this pattern",
      "type": "string",
      "minLength": 1
    },
    "name": {
      "description": "Machine readable name of the pattern",
      "type": "string",
      "minLength": 1,
      "pattern": "^[a-z]+(?:-[a-z]+)*$"
    },
    "displayName": {
      "description": "Human readable name of the pattern",
      "type": "string",
      "minLength": 1
    },
    "version": {
      "description": "Semantic version of the pattern",
      "type": "string",
      "pattern": "^\\d+\\.\\d+\\.\\d+(-[a-z]*){0,1}$"
    },
    "versions": {
      "description": "Available semantic versions of the pattern",
      "type": "array",
      "minItems": 1,
      "items": {
        "description": "Semantic version of the pattern",
        "type": "string",
        "pattern": "^\\d+\\.\\d+\\.\\d+(-[a-z]*){0,1}$"
      }
    },
    "flag": {
      "description": "Stability flag of the pattern",
      "type": "string",
      "pattern": "^alpha|beta|rc|stable$"
    },
    "tags": {
      "description": "Array of tags describing the pattern",
      "type": "array",
      "minItems": 1,
      "items": {
        "description": "Tag describing the pattern",
        "type": "string",
        "minLength": 1
      },
      "uniqueItems": true
    },
    "data": {
      "description": "Custom data object supplied by user",
      "type": "object",
      "minProperties": 1
    },
    "meta": {
      "description": "Custom meta data object supplied by user",
      "type": "object",
      "minProperties": 1
    },
    "options": {
      "description": "Custom options object supplied by user",
      "type": "object",
      "minProperties": 1
    },
    "patterns": {
      "description": "Dependencies of the pattern",
      "type": "object",
      "minProperties": 1,
      "patternProperties": {
        "^.+$": {
          "type": "string",
          "pattern": "^(/)?([^/\u0000]+(/)?)+$"
        }
      }
    },
    "demoPatterns": {
      "description": "Dependencies of the pattern used for demo purposes",
      "minProperties": 1,
      "patternProperties": {
        "^.+$": {
          "type": "string",
          "pattern": "^(/)?([^/\u0000]+(/)?)+$"
        }
      }
    },
    "overrides": {
      "description": "Options for overriding of core pattern behaviour",
      "type": "object",
      "minProperties": 1,
      "properties": {
        "files": {
          "description": "Custom mapping between patternplate files and paths to use in exchange for this pattern",
          "type": "object",
          "minProperties": 1,
          "patternProperties": {
            "^.+$": {
              "type": "string",
              "pattern": "^(/)?([^/\u0000]+(/)?)+$"
            }
          }
        },
        "demo": {
          "description": "Custom url to use as demo for this pattern",
          "type": "string"
        }
      }
    },
    "_patternplate": {
      "description": "Technical values saved by patternplate core",
      "type": "object"
    }
  },
  "required": ["name", "version"],
  "title": "pattern manifest",
  "type": "object"
}
