{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "available": {
      "type": "boolean"
    },
    "deprecated": {
      "type": "boolean"
    },
    "exposable": {
      "type": "boolean"
    },
    "no_gui": {
      "type": "boolean"
    },
    "port": {
      "type": "integer",
      "minimum": 0,
      "maximum": 65535
    },
    "https": {
      "type": "boolean"
    },
    "uid": {
      "type": "integer"
    },
    "gid": {
      "type": "integer"
    },
    "force_expose": {
      "type": "boolean"
    },
    "generate_vapid_keys": {
      "type": "boolean"
    },
    "requirements": {
      "type": "object",
      "properties": {
        "ports": {
          "type": "array",
          "items": [
            {
              "type": "integer"
            }
          ]
        }
      }
    },
    "supported_architectures": {
      "type": "array",
      "items": [
        {
          "type": "string"
        }
      ]
    },
    "id": {
      "type": "string",
      "pattern": "^[a-z0-9-_]+$"
    },
    "tipi_version": {
      "type": "integer"
    },
    "version": {
      "type": "string"
    },
    "categories": {
      "type": "array",
      "items": [
        {
          "type": "string"
        },
        {
          "type": "string"
        }
      ]
    },
    "description": {
      "type": "string"
    },
    "short_desc": {
      "type": "string"
    },
    "author": {
      "type": "string"
    },
    "source": {
      "type": "string",
      "format": "uri"
    },
    "website": {
      "type": "string",
      "format": "uri"
    },
    "url_suffix": {
      "type": "string",
      "pattern": "^/[a-z0-9-_/]+$"
    },
    "form_fields": {
      "type": "array",
      "items": [
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string"
            },
            "label": {
              "type": "string"
            },
            "max": {
              "type": "integer"
            },
            "min": {
              "type": "integer"
            },
            "required": {
              "type": "boolean"
            },
            "env_variable": {
              "type": "string"
            }
          },
          "required": ["type", "label", "env_variable"]
        }
      ]
    },
    "dynamic_config": {
      "type": "boolean"
    }
  },
  "required": [
    "name",
    "available",
    "port",
    "id",
    "tipi_version",
    "version",
    "categories",
    "description",
    "short_desc",
    "author",
    "source",
    "form_fields"
  ]
}
