{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://json.schemastore.org/dotnet-tools.json",
  "allowTrailingCommas": false,
  "type": "object",
  "required": ["version", "isRoot", "tools"],
  "additionalProperties": true,
  "properties": {
    "version": {
      "type": "integer",
      "title": ".NET Tools Manifest Version",
      "description": "Specifies the version of the local tool manifest file format."
    },
    "isRoot": {
      "type": "boolean",
      "title": "Root/Top-Most Manifest File Indicator",
      "description": "Indicates whether this is the root manifest file. If true, dotnet will not continue to search parent directories for additional dotnet-tools.json files."
    },
    "tools": {
      "type": "object",
      "title": "Local Tools",
      "description": "Mappings of .NET CLI tools that are available locally for the project. Each entry specifies a tool accessible by its NuGet package ID.",
      "patternProperties": {
        "^.*$": {
          "type": "object",
          "title": "Tool Configuration",
          "description": "Represents a single .NET CLI tool with its specific settings and commands.",
          "required": ["version", "commands"],
          "additionalProperties": true,
          "properties": {
            "version": {
              "type": ["string", "null"],
              "title": "Tool NuGet Version",
              "description": "Specifies the version of the NuGet package of the tool. If null, the latest version will be used."
            },
            "commands": {
              "type": ["array", "null"],
              "title": "Available Tool Commands",
              "description": "Lists all of the available commands provided by this tool. The way to invoke a command depends on the naming format of its executable. If the command is in the format `dotnet-<toolName>`, it should be invoked using 'dotnet <toolName>'. If the command is in the format '<toolName>', it can be directly invoked using just '<toolName>'. If null, no specific commands are specified.",
              "items": {
                "type": ["string", "null"],
                "title": "Tool Command",
                "description": "A command made available by this tool which can be invoked according to the naming convention of its executable. If the command is in the format `dotnet-<toolName>`, it should be invoked using 'dotnet <toolName>'. If the command is in the format '<toolName>', it can be directly invoked using just '<toolName>'. If null, no specific commands are specified."
              }
            }
          }
        }
      }
    }
  }
}
