{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "definitions": {
    "alias": {
      "type": "string",
      "description": "domain names (optionally including subdomains) added to the account, or a string for a suffixed URL using .now.sh or a Custom Deployment Suffix"
    },
    "env": {
      "type": "object",
      "description": "environment keys and values",
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  "description": "ZEIT Now project configuration file",
  "id": "https://json.schemastore.org/now.json",
  "properties": {
    "name": {
      "type": "string",
      "description": "name for the deployment",
      "maxLength": 52
    },
    "version": {
      "enum": [1, 2],
      "description": "the Now Platform version that the deployment should use and is known to work with",
      "default": 2
    },
    "alias": {
      "oneOf": [
        {
          "type": "array",
          "maxItems": 64,
          "items": {
            "$ref": "#/definitions/alias"
          }
        },
        {
          "$ref": "#/definitions/alias"
        }
      ]
    },
    "scope": {
      "type": "string",
      "description": "an ID or slug for teams, or an email address, username, or ID for users"
    },
    "env": {
      "$ref": "#/definitions/env",
      "description": "environment variables passed to the invoked Serverless Functions"
    },
    "build": {
      "type": "object",
      "properties": {
        "env": {
          "$ref": "#/definitions/env",
          "description": "environment variables passed to the Build processes"
        }
      }
    },
    "builds": {
      "type": "array",
      "description": "a list of build descriptions whose src references valid source files",
      "items": {
        "type": "object",
        "description": "build description",
        "required": ["src", "use"],
        "properties": {
          "src": {
            "type": "string",
            "description": "A glob expression or pathname. If more than one file is resolved, one build will be created per matched file. It can include `*` and `**`."
          },
          "use": {
            "type": "string",
            "description": "A npm module to be installed by the build process. It can include a semver compatible version (e.g.: `@org/proj@1`)."
          },
          "config": {
            "type": "object",
            "description": "An object including arbitrary metadata to be passed to the Builder."
          }
        }
      }
    },
    "routes": {
      "type": "array",
      "description": "a list of route definitions",
      "items": {
        "type": "object",
        "description": "route definition",
        "oneOf": [
          {
            "required": ["src"]
          },
          {
            "required": ["handle"]
          }
        ],
        "properties": {
          "src": {
            "type": "string",
            "description": "A PCRE-compatible regular expression that matches each incoming pathname (excluding querystring)."
          },
          "methods": {
            "type": "array",
            "description": "A set of HTTP method types. If no method is provided, requests with any HTTP method will be a candidate for the route.",
            "items": {
              "enum": [
                "GET",
                "HEAD",
                "POST",
                "PUT",
                "DELETE",
                "CONNECT",
                "OPTIONS",
                "TRACE",
                "PATCH"
              ]
            }
          },
          "dest": {
            "type": "string",
            "description": "A destination pathname or full URL, including querystring, with the ability to embed capture groups as $1, $2…"
          },
          "headers": {
            "type": "object",
            "description": "A set of headers to apply for responses.",
            "additionalProperties": {
              "type": "string"
            }
          },
          "status": {
            "type": "integer",
            "description": "A status code to respond with. Can be used in tandem with `Location:` header to implement redirects.",
            "minimum": 100,
            "maximum": 599
          },
          "continue": {
            "type": "boolean",
            "description": "A boolean to change matching behavior. If true, routing will continue even when the src is matched."
          },
          "handle": {
            "type": "string",
            "enum": ["filesystem"]
          }
        }
      }
    },
    "regions": {
      "type": "array",
      "description": "the deployment regions of the Serverless Functions that get created as a result of the build steps",
      "items": {
        "description": "region identifier",
        "type": "string"
      }
    },
    "public": {
      "type": "boolean",
      "description": "When set to true, both the source view and logs view will be publicly accessible (when the user is authenticated with ZEIT)."
    },
    "github": {
      "type": "object",
      "description": "Git integration options",
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "When set to false, Now for GitHub will not deploy the given project regardless of the GitHub app being installed.",
          "default": true
        },
        "autoAlias": {
          "type": "boolean",
          "description": "When set to false, Now for GitHub will not apply the alias upon merge.",
          "default": true
        },
        "silent": {
          "type": "boolean",
          "description": "When set to true, Now for GitHub will stop commenting on pull requests and commits.",
          "default": false
        },
        "autoJobCancelation": {
          "type": "boolean",
          "description": "When set to false, Now for GitHub will always build pushes in sequence without cancelling a build for the most recent commit.",
          "default": true
        }
      }
    }
  },
  "type": "object"
}
