{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/dotnet-tools-json/latest.json",
  "x-lintel": {
    "source": "https://www.schemastore.org/dotnet-tools.json",
    "sourceSha256": "a148c576160564498451526ae636069b68fd1b76fb696bc1d295633668cc5ee6",
    "fileMatch": [
      "dotnet-tools.json"
    ],
    "parsers": [
      "json"
    ]
  },
  "type": "object",
  "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"
          ],
          "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."
              }
            }
          },
          "additionalProperties": true
        }
      }
    }
  },
  "required": [
    "version",
    "isRoot",
    "tools"
  ],
  "additionalProperties": true,
  "allowTrailingCommas": false
}
