{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/pyproject/latest.json",
  "title": "JSON schema for Python project metadata and configuration",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/SchemaStore/schemastore/master/src/schemas/json/pyproject.json",
    "sourceSha256": "f9f5f25a7f4ed0daf065dd2b2961146a638be19d03e9e7efcff7519aa75f5770",
    "fileMatch": [
      "pyproject.toml"
    ],
    "parsers": [
      "toml"
    ]
  },
  "type": "object",
  "properties": {
    "project": {
      "type": "object",
      "dependentSchemas": {
        "version": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "version"
                }
              }
            },
            "type": "object"
          }
        },
        "description": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "description"
                }
              }
            },
            "type": "object"
          }
        },
        "readme": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "readme"
                }
              }
            },
            "type": "object"
          }
        },
        "requires-python": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "requires-python"
                }
              }
            },
            "type": "object"
          }
        },
        "license": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "license"
                }
              }
            },
            "type": "object"
          }
        },
        "license-files": {
          "allOf": [
            {
              "not": {
                "required": [
                  "dynamic"
                ],
                "properties": {
                  "dynamic": {
                    "type": "array",
                    "contains": {
                      "const": "license-files"
                    }
                  }
                },
                "type": "object"
              }
            },
            {
              "properties": {
                "license": {
                  "type": "string"
                }
              }
            }
          ]
        },
        "authors": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "authors"
                }
              }
            },
            "type": "object"
          }
        },
        "maintainers": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "maintainers"
                }
              }
            },
            "type": "object"
          }
        },
        "keywords": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "keywords"
                }
              }
            },
            "type": "object"
          }
        },
        "classifiers": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "classifiers"
                }
              }
            },
            "type": "object"
          }
        },
        "urls": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "urls"
                }
              }
            },
            "type": "object"
          }
        },
        "scripts": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "scripts"
                }
              }
            },
            "type": "object"
          }
        },
        "gui-scripts": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "gui-scripts"
                }
              }
            },
            "type": "object"
          }
        },
        "entry-points": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "entry-points"
                }
              }
            },
            "type": "object"
          }
        },
        "dependencies": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "dependencies"
                }
              }
            },
            "type": "object"
          }
        },
        "optional-dependencies": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "optional-dependencies"
                }
              }
            },
            "type": "object"
          }
        },
        "import-names": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "import-names"
                }
              }
            },
            "type": "object"
          }
        },
        "import-namespaces": {
          "not": {
            "required": [
              "dynamic"
            ],
            "properties": {
              "dynamic": {
                "type": "array",
                "contains": {
                  "const": "import-namespaces"
                }
              }
            },
            "type": "object"
          }
        }
      },
      "required": [
        "name"
      ],
      "title": "Project core metadata",
      "description": "There are two kinds of metadata: _static_ and _dynamic_.\n- Static metadata is listed in the `[project]` table directly and cannot be specified or changed by a tool.\n- Dynamic metadata key names are listed inside the `dynamic` key and represents metadata that a tool will later provide.",
      "markdownDescription": "There are two kinds of metadata: _static_ and _dynamic_.\n- Static metadata is listed in the `[project]` table directly and cannot be specified or changed by a tool.\n- Dynamic metadata key names are listed inside the `dynamic` key and represents metadata that a tool will later provide.",
      "x-intellij-html-description": "<p>There are two kinds of metadata: <em>static</em> and <em>dynamic</em>.</p><ul><li>Static metadata is listed in the <code>[project]</code> table directly and cannot be specified or changed by a tool.</li><li>Dynamic metadata key names are listed inside the <code>dynamic</code> key and represents metadata that a tool will later provide.</li></ul>",
      "x-taplo": {
        "links": {
          "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#declaring-project-metadata-the-project-table",
          "initKeys": [
            "name",
            "version",
            "description",
            "readme",
            "license",
            "authors",
            "classifiers",
            "urls",
            "dependencies"
          ]
        }
      },
      "x-tombi-table-keys-order": "schema",
      "properties": {
        "name": {
          "title": "Project name",
          "description": "Valid name consists only of ASCII letters and numbers, period, underscore and hyphen. It must start and end with a letter or number.",
          "markdownDescription": "Valid name consists only of ASCII letters and numbers, period, underscore and hyphen. It must start and end with a letter or number.",
          "x-intellij-html-description": "<p>Valid name consists only of ASCII letters and numbers, period, underscore and hyphen. It must start and end with a letter or number.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#name"
            }
          },
          "type": "string",
          "pattern": "^([a-zA-Z0-9]|[a-zA-Z0-9][\\w.-]*[a-zA-Z0-9])$"
        },
        "version": {
          "type": "string",
          "pattern": "^v?((([0-9]+)!)?([0-9]+(\\.[0-9]+)*)([-_\\.]?(alpha|a|beta|b|preview|pre|c|rc)[-_\\.]?([0-9]+)?)?((-([0-9]+))|([-_\\.]?(post|rev|r)[-_\\.]?([0-9]+)?))?([-_\\.]?(dev)[-_\\.]?([0-9]+)?)?)(\\+([a-zA-Z0-9]+([-_\\.][a-zA-Z0-9]+)*))?$",
          "title": "Project version",
          "description": "Version of the project, as defined in the [Version specifier specification](https://packaging.python.org/en/latest/specifications/version-specifiers/), and preferably [already normalized](https://packaging.python.org/en/latest/specifications/version-specifiers/#normalization).",
          "markdownDescription": "Version of the project, as defined in the [Version specifier specification](https://packaging.python.org/en/latest/specifications/version-specifiers/), and preferably [already normalized](https://packaging.python.org/en/latest/specifications/version-specifiers/#normalization).",
          "x-intellij-html-description": "<p>Version of the project, as defined in the <a href=\"https://packaging.python.org/en/latest/specifications/version-specifiers/\">Version specifier specification</a>, and preferably <a href=\"https://packaging.python.org/en/latest/specifications/version-specifiers/#normalization\">already normalized</a>.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#version"
            }
          },
          "examples": [
            "42.0.1",
            "0.3.9rc7.post0.dev5"
          ]
        },
        "description": {
          "type": "string",
          "title": "Project summary description",
          "description": "Summary description of the project in one line. Tools may not accept multiple lines.",
          "markdownDescription": "Summary description of the project in one line. Tools may not accept multiple lines.",
          "x-intellij-html-description": "<p>Summary description of the project in one line. Tools may not accept multiple lines.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#description"
            }
          }
        },
        "readme": {
          "title": "Project full description",
          "description": "Value can be a relative path to text / markdown (`.md` suffix) / reStructuredText (`.rst` suffix) readme file, or a table with either:\n- `file` key containing path of aforementioned readme file, or\n- `text` key containing the full readme text embedded inside `pyproject.toml`.",
          "markdownDescription": "Value can be a relative path to text / markdown (`.md` suffix) / reStructuredText (`.rst` suffix) readme file, or a table with either:\n- `file` key containing path of aforementioned readme file, or\n- `text` key containing the full readme text embedded inside `pyproject.toml`.",
          "x-intellij-html-description": "<p>Value can be a relative path to text / markdown (<code>.md</code> suffix) / reStructuredText (<code>.rst</code> suffix) readme file, or a table with either:</p><ul><li><code>file</code> key containing path of aforementioned readme file, or</li><li><code>text</code> key containing the full readme text embedded inside <code>pyproject.toml</code>.</li></ul>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#readme"
            }
          },
          "oneOf": [
            {
              "title": "README file path",
              "type": "string"
            },
            {
              "x-tombi-table-keys-order": "schema",
              "type": "object",
              "required": [
                "file"
              ],
              "properties": {
                "file": {
                  "title": "README file path",
                  "type": "string"
                },
                "content-type": {
                  "title": "README content-type",
                  "description": "RFC 1341 compliant content-type (with optional charset, defaulting to UTF-8)",
                  "type": "string"
                }
              },
              "additionalProperties": false
            },
            {
              "x-tombi-table-keys-order": "schema",
              "type": "object",
              "required": [
                "text"
              ],
              "properties": {
                "text": {
                  "title": "README text",
                  "type": "string"
                },
                "content-type": {
                  "title": "README content-type",
                  "description": "RFC 1341 compliant content-type (with optional charset, defaulting to UTF-8)",
                  "type": "string"
                }
              },
              "additionalProperties": false
            },
            {
              "x-tombi-table-keys-order": "schema",
              "type": "object",
              "required": [
                "content-type"
              ],
              "properties": {
                "content-type": {
                  "title": "README content-type",
                  "description": "RFC 1341 compliant content-type (with optional charset, defaulting to UTF-8)",
                  "type": "string"
                }
              },
              "additionalProperties": false
            }
          ],
          "examples": [
            "README.md",
            {
              "file": "README.txt",
              "content-type": "text/plain"
            },
            {
              "text": "# Example project\n\nSome readme content",
              "content-type": "text/markdown"
            }
          ]
        },
        "requires-python": {
          "type": "string",
          "title": "Python version compatibility",
          "description": "Specifies the Python version(s) that the distribution is compatible with. Must be in the format specified in [Version specifiers](https://packaging.python.org/en/latest/specifications/version-specifiers/).",
          "markdownDescription": "Specifies the Python version(s) that the distribution is compatible with. Must be in the format specified in [Version specifiers](https://packaging.python.org/en/latest/specifications/version-specifiers/).",
          "x-intellij-html-description": "<p>Specifies the Python version(s) that the distribution is compatible with. Must be in the format specified in <a href=\"https://packaging.python.org/en/latest/specifications/version-specifiers/\">Version specifiers</a>.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#requires-python"
            }
          },
          "examples": [
            ">= 3.7"
          ]
        },
        "license": {
          "$comment": "PEP 639 specifies current behavior (text / file subkey) will be deprecated, but this PEP is still under provisional status.",
          "title": "Project license",
          "description": "For now it is a table with either:\n- `file` key specifying a relative path to a license file, or\n- `text` key containing full license content\n\nNewer tool may accept a single [SPDX license expression](https://spdx.github.io/spdx-spec/v2.2.2/SPDX-license-expressions/) string instead of a table.",
          "markdownDescription": "For now it is a table with either:\n- `file` key specifying a relative path to a license file, or\n- `text` key containing full license content\n\nNewer tool may accept a single [SPDX license expression](https://spdx.github.io/spdx-spec/v2.2.2/SPDX-license-expressions/) string instead of a table.",
          "x-intellij-html-description": "<p>For now it is a table with either:</p><ul><li><code>file</code> key specifying a relative path to a license file, or</li><li><code>text</code> key containing full license content</li></ul><p>Newer tool may accept a single <a href=\"https://spdx.github.io/spdx-spec/v2.2.2/SPDX-license-expressions/\">SPDX license expression</a> string instead of a table.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#license"
            }
          },
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "file": {
                  "title": "License file path",
                  "type": "string"
                }
              },
              "required": [
                "file"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "text": {
                  "title": "License text",
                  "type": "string"
                }
              },
              "required": [
                "text"
              ],
              "additionalProperties": false
            },
            {
              "$comment": "Maybe add 'deprecated' keyword to table usage when SPDX license expression usage is finalized. But that requires 2019-09 draft.",
              "type": "string"
            }
          ],
          "examples": [
            {
              "text": "To the extent possible under law, the author(s) who associated this software with CC0 have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty."
            },
            {
              "file": "LICENSE"
            },
            "MIT",
            "BSD-2-Clause OR Apache-2.0",
            "LicenseRef-Proprietary"
          ]
        },
        "license-files": {
          "$comment": "Still provisional under PEP 639",
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "License files",
          "description": "Relative paths or globs to paths of license files. Can be an empty list.",
          "markdownDescription": "Relative paths or globs to paths of license files. Can be an empty list.",
          "x-intellij-html-description": "<p>Relative paths or globs to paths of license files. Can be an empty list.</p>",
          "x-taplo": {
            "links": {
              "key": "https://peps.python.org/pep-0639/#add-license-files-key"
            }
          },
          "x-tombi-array-values-order": "version-sort"
        },
        "authors": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/projectAuthor"
          },
          "title": "Project authors",
          "description": "People or organizations considered as 'authors' of the project. Each author is a table with `name` key, `email` key, or both.",
          "markdownDescription": "People or organizations considered as 'authors' of the project. Each author is a table with `name` key, `email` key, or both.",
          "x-intellij-html-description": "<p>People or organizations considered as 'authors' of the project. Each author is a table with <code>name</code> key, <code>email</code> key, or both.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#authors-maintainers"
            }
          }
        },
        "maintainers": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/projectAuthor"
          },
          "title": "Project maintainers",
          "description": "People or organizations considered as 'maintainers' of the project. Each maintainer is a table with `name` key, `email` key, or both.",
          "markdownDescription": "People or organizations considered as 'maintainers' of the project. Each maintainer is a table with `name` key, `email` key, or both.",
          "x-intellij-html-description": "<p>People or organizations considered as 'maintainers' of the project. Each maintainer is a table with <code>name</code> key, <code>email</code> key, or both.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#authors-maintainers"
            }
          }
        },
        "keywords": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "uniqueItems": true,
          "title": "Project keywords",
          "description": "List of keywords or tags that describe the project. They could be used by search engines to categorize the project.",
          "markdownDescription": "List of keywords or tags that describe the project. They could be used by search engines to categorize the project.",
          "x-intellij-html-description": "<p>List of keywords or tags that describe the project. They could be used by search engines to categorize the project.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#keywords"
            }
          },
          "x-tombi-array-values-order": "version-sort"
        },
        "classifiers": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "uniqueItems": true,
          "title": "Applicable Trove classifiers",
          "description": "List of [Trove classifiers](https://pypi.org/classifiers/) that describe the project. PyPI use the classifiers to categorize projects.",
          "markdownDescription": "List of [Trove classifiers](https://pypi.org/classifiers/) that describe the project. PyPI use the classifiers to categorize projects.",
          "x-intellij-html-description": "<p>List of <a href=\"https://pypi.org/classifiers/\">Trove classifiers</a> that describe the project. PyPI use the classifiers to categorize projects.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#classifiers"
            }
          },
          "x-tombi-array-values-order": "version-sort"
        },
        "urls": {
          "type": "object",
          "examples": [
            {
              "homepage": "https://example.com/example-project"
            },
            {
              "\"home page\"": "https://example.com/example-project",
              "documentation": "https://doc.example.com/example-project/stable",
              "repository": "https://git.example.com/some/repo.git"
            }
          ],
          "title": "Project URLs",
          "description": "Table consisting one or multiple `label: URL` pairs. Common indexes like PyPI uses [well-known Project URLs](https://packaging.python.org/en/latest/specifications/well-known-project-urls/#well-known-labels) when presenting project pages.",
          "markdownDescription": "Table consisting one or multiple `label: URL` pairs. Common indexes like PyPI uses [well-known Project URLs](https://packaging.python.org/en/latest/specifications/well-known-project-urls/#well-known-labels) when presenting project pages.",
          "x-intellij-html-description": "<p>Table consisting one or multiple <code>label: URL</code> pairs. Common indexes like PyPI uses <a href=\"https://packaging.python.org/en/latest/specifications/well-known-project-urls/#well-known-labels\">well-known Project URLs</a> when presenting project pages.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#urls"
            }
          },
          "x-tombi-additional-key-label": "url_label",
          "x-tombi-table-keys-order": "version-sort",
          "additionalProperties": {
            "type": "string",
            "format": "uri"
          }
        },
        "scripts": {
          "type": "object",
          "examples": [
            {
              "mycmd": "package.module:object.function"
            }
          ],
          "title": "Console scripts",
          "description": "Table of [entry points](https://packaging.python.org/en/latest/specifications/entry-points/) that allows package installers to create a command-line wrapper for. Each key is the name of the script to be created, and each value is the function or object to all, in form of either `importable.module` or `importable.module:object.attr`. Windows platform treats `console_scripts` specially in that they are wrapped in a console executable, so they are attached to a console and can use `sys.stdin`, `sys.stdout` and `sys.stderr` for I/O.",
          "markdownDescription": "Table of [entry points](https://packaging.python.org/en/latest/specifications/entry-points/) that allows package installers to create a command-line wrapper for. Each key is the name of the script to be created, and each value is the function or object to all, in form of either `importable.module` or `importable.module:object.attr`. Windows platform treats `console_scripts` specially in that they are wrapped in a console executable, so they are attached to a console and can use `sys.stdin`, `sys.stdout` and `sys.stderr` for I/O.",
          "x-intellij-html-description": "<p>Table of <a href=\"https://packaging.python.org/en/latest/specifications/entry-points/\">entry points</a> that allows package installers to create a command-line wrapper for. Each key is the name of the script to be created, and each value is the function or object to all, in form of either <code>importable.module</code> or <code>importable.module:object.attr</code>. Windows platform treats <code>console_scripts</code> specially in that they are wrapped in a console executable, so they are attached to a console and can use <code>sys.stdin</code>, <code>sys.stdout</code> and <code>sys.stderr</code> for I/O.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/entry-points/#use-for-scripts"
            }
          },
          "x-tombi-additional-key-label": "script_name",
          "x-tombi-table-keys-order": "version-sort",
          "additionalProperties": {
            "type": "string"
          }
        },
        "gui-scripts": {
          "type": "object",
          "examples": [
            {
              "mycmd": "package.module:object.function"
            }
          ],
          "title": "GUI scripts",
          "description": "Table of [entry points](https://packaging.python.org/en/latest/specifications/entry-points/) that allows package installers to create a GUI wrapper for. Each key is the name of the script to be created, and each value is the function or object to all, in form of either `importable.module` or `importable.module:object.attr`. Windows platform treats `gui_scripts` specially in that they are wrapped in a GUI executable, so they can be started without a console, but cannot use standard streams unless application code redirects them.",
          "markdownDescription": "Table of [entry points](https://packaging.python.org/en/latest/specifications/entry-points/) that allows package installers to create a GUI wrapper for. Each key is the name of the script to be created, and each value is the function or object to all, in form of either `importable.module` or `importable.module:object.attr`. Windows platform treats `gui_scripts` specially in that they are wrapped in a GUI executable, so they can be started without a console, but cannot use standard streams unless application code redirects them.",
          "x-intellij-html-description": "<p>Table of <a href=\"https://packaging.python.org/en/latest/specifications/entry-points/\">entry points</a> that allows package installers to create a GUI wrapper for. Each key is the name of the script to be created, and each value is the function or object to all, in form of either <code>importable.module</code> or <code>importable.module:object.attr</code>. Windows platform treats <code>gui_scripts</code> specially in that they are wrapped in a GUI executable, so they can be started without a console, but cannot use standard streams unless application code redirects them.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/entry-points/#use-for-scripts"
            }
          },
          "x-tombi-additional-key-label": "script_name",
          "x-tombi-table-keys-order": "version-sort",
          "additionalProperties": {
            "type": "string"
          }
        },
        "entry-points": {
          "type": "object",
          "examples": [
            {
              "pygments.styles": {
                "monokai": "package.module:object.attribute"
              }
            }
          ],
          "additionalProperties": false,
          "propertyNames": {
            "not": {
              "anyOf": [
                {
                  "const": "console_scripts"
                },
                {
                  "const": "gui_scripts"
                }
              ]
            }
          },
          "title": "Other entry-point groups",
          "description": "Extra [entry point groups](https://packaging.python.org/en/latest/specifications/entry-points/) that allow applications to load plugins. For example, Pygments (a syntax highlighting tool) can use additional styles from separately installed packages through `[project.entry-points.\"pygments.styles\"]`. Each key is the name of the entry-point group, and each value is a table of entry points.",
          "markdownDescription": "Extra [entry point groups](https://packaging.python.org/en/latest/specifications/entry-points/) that allow applications to load plugins. For example, Pygments (a syntax highlighting tool) can use additional styles from separately installed packages through `[project.entry-points.\"pygments.styles\"]`. Each key is the name of the entry-point group, and each value is a table of entry points.",
          "x-intellij-html-description": "<p>Extra <a href=\"https://packaging.python.org/en/latest/specifications/entry-points/\">entry point groups</a> that allow applications to load plugins. For example, Pygments (a syntax highlighting tool) can use additional styles from separately installed packages through <code>[project.entry-points.\"pygments.styles\"]</code>. Each key is the name of the entry-point group, and each value is a table of entry points.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/entry-points/#use-for-plugins"
            }
          },
          "x-tombi-additional-key-label": "entry_point_group_name",
          "x-tombi-table-keys-order": "version-sort",
          "patternProperties": {
            "^\\w+(\\.\\w+)*$": {
              "type": "object",
              "x-tombi-additional-key-label": "entry_point_name",
              "additionalProperties": {
                "type": "string"
              }
            }
          }
        },
        "dependencies": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "uniqueItems": true,
          "title": "Project mandatory dependency requirements",
          "description": "An array of [dependency specifier](https://packaging.python.org/en/latest/specifications/dependency-specifiers/) strings, each representing a mandatory dependent package of the project.",
          "markdownDescription": "An array of [dependency specifier](https://packaging.python.org/en/latest/specifications/dependency-specifiers/) strings, each representing a mandatory dependent package of the project.",
          "x-intellij-html-description": "<p>An array of <a href=\"https://packaging.python.org/en/latest/specifications/dependency-specifiers/\">dependency specifier</a> strings, each representing a mandatory dependent package of the project.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#dependencies-optional-dependencies"
            }
          },
          "x-tombi-array-values-order": "version-sort",
          "examples": [
            [
              "attrs",
              "requests ~= 2.28"
            ]
          ]
        },
        "optional-dependencies": {
          "type": "object",
          "examples": [
            {
              "typing": [
                "boto3-stubs",
                "typing-extensions ~= 4.1"
              ]
            }
          ],
          "title": "Project extra dependency requirements",
          "description": "Each entry is a key/value pair, with the key specifying [extra feature name](https://packaging.python.org/en/latest/specifications/core-metadata/#provides-extra-multiple-use) (such as `socks` in `requests[socks]`), and value is an array of [dependency specifier](https://packaging.python.org/en/latest/specifications/dependency-specifiers/) strings.",
          "markdownDescription": "Each entry is a key/value pair, with the key specifying [extra feature name](https://packaging.python.org/en/latest/specifications/core-metadata/#provides-extra-multiple-use) (such as `socks` in `requests[socks]`), and value is an array of [dependency specifier](https://packaging.python.org/en/latest/specifications/dependency-specifiers/) strings.",
          "x-intellij-html-description": "<p>Each entry is a key/value pair, with the key specifying <a href=\"https://packaging.python.org/en/latest/specifications/core-metadata/#provides-extra-multiple-use\">extra feature name</a> (such as <code>socks</code> in <code>requests[socks]</code>), and value is an array of <a href=\"https://packaging.python.org/en/latest/specifications/dependency-specifiers/\">dependency specifier</a> strings.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#dependencies-optional-dependencies"
            }
          },
          "x-tombi-additional-key-label": "package_name",
          "x-tombi-table-keys-order": "version-sort",
          "patternProperties": {
            "^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9])$": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        },
        "import-names": {
          "$ref": "#/$defs/importNames",
          "description": "An array of strings specifying the import names that the project exclusively provides when installed.",
          "markdownDescription": "An array of strings specifying the import names that the project exclusively provides when installed.",
          "x-intellij-html-description": "An array of strings specifying the import names that the project exclusively provides when installed.",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#import-names"
            }
          },
          "examples": [
            [
              "my_package",
              "_internal ; private"
            ]
          ]
        },
        "import-namespaces": {
          "$ref": "#/$defs/importNames",
          "description": "An array of strings specifying the import names that the project provides when installed, but not exclusively.",
          "markdownDescription": "An array of strings specifying the import names that the project provides when installed, but not exclusively.",
          "x-intellij-html-description": "An array of strings specifying the import names that the project provides when installed, but not exclusively.",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#import-namespaces"
            }
          },
          "examples": [
            [
              "my_package",
              "_internal ; private"
            ]
          ]
        },
        "dynamic": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "version",
              "description",
              "readme",
              "requires-python",
              "license",
              "license-files",
              "authors",
              "maintainers",
              "keywords",
              "classifiers",
              "urls",
              "scripts",
              "gui-scripts",
              "entry-points",
              "dependencies",
              "optional-dependencies",
              "import-names",
              "import-namespaces"
            ]
          },
          "uniqueItems": true,
          "title": "Dynamic metadata values",
          "description": "Specifies which keys are intentionally unspecified under `[project]` table so build backend can/will provide such metadata dynamically. Each key must be listed only once. It is an error to both list a key in `dynamic` and use the key directly in `[project]`.\nOne of the most common usage is `version`, which allows build backend to retrieve project version from source code or version control system instead of hardcoding it in `pyproject.toml`.",
          "markdownDescription": "Specifies which keys are intentionally unspecified under `[project]` table so build backend can/will provide such metadata dynamically. Each key must be listed only once. It is an error to both list a key in `dynamic` and use the key directly in `[project]`.\nOne of the most common usage is `version`, which allows build backend to retrieve project version from source code or version control system instead of hardcoding it in `pyproject.toml`.",
          "x-tombi-array-values-order": "version-sort",
          "x-intellij-html-description": "<p>Specifies which keys are intentionally unspecified under <code>[project]</code> table so build backend can/will provide such metadata dynamically. Each key must be listed only once. It is an error to both list a key in <code>dynamic</code> and use the key directly in <code>[project]</code>.</p><p>One of the most common usage is <code>version</code>, which allows build backend to retrieve project version from source code or version control system instead of hardcoding it in <code>pyproject.toml</code>.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#dynamic"
            }
          },
          "examples": [
            [
              "version"
            ]
          ]
        }
      },
      "oneOf": [
        {
          "required": [
            "dynamic"
          ],
          "properties": {
            "dynamic": {
              "type": "array",
              "contains": {
                "const": "version"
              }
            }
          },
          "type": "object"
        },
        {
          "required": [
            "version"
          ],
          "properties": {
            "version": true
          },
          "type": "object"
        }
      ],
      "additionalProperties": false
    },
    "dependency-groups": {
      "title": "PEP 735 dependency groups",
      "description": "Named groups of dependencies, similar to `requirements.txt` files, which launchers, IDEs, and other tools can find and identify by name. Each item in `[dependency-groups]` is defined as mapping of group name to list of [dependency specifiers](https://packaging.python.org/en/latest/specifications/dependency-specifiers/).",
      "markdownDescription": "Named groups of dependencies, similar to `requirements.txt` files, which launchers, IDEs, and other tools can find and identify by name. Each item in `[dependency-groups]` is defined as mapping of group name to list of [dependency specifiers](https://packaging.python.org/en/latest/specifications/dependency-specifiers/).",
      "type": "object",
      "properties": {
        "dev": {
          "$ref": "#/$defs/DependencyGroup"
        }
      },
      "additionalProperties": false,
      "x-taplo": {
        "links": {
          "key": "https://peps.python.org/pep-0735/"
        }
      },
      "x-intellij-html-description": "<p>Named groups of dependencies, similar to <code>requirements.txt</code> files, which launchers, IDEs, and other tools can find and identify by name. Each item in <code>[dependency-groups]</code> is defined as mapping of group name to list of <a href=\"https://packaging.python.org/en/latest/specifications/dependency-specifiers/\">dependency specifiers</a>.</p>",
      "x-tombi-additional-key-label": "group_name",
      "x-tombi-table-keys-order": {
        "properties": "version-sort",
        "patternProperties": "version-sort"
      },
      "patternProperties": {
        "^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9])$": {
          "$ref": "#/$defs/DependencyGroup"
        }
      }
    },
    "build-system": {
      "$ref": "#/$defs/BuildSystem"
    },
    "tool": {
      "type": "object",
      "examples": [
        {
          "tool": {
            "isort": {
              "profile": "black"
            }
          }
        }
      ],
      "title": "Tool-specific configuration",
      "description": "Every tool that is used by the project can have users specify configuration data as long as they use a sub-table within `[tool]`. Generally a project can use the subtable `tool.$NAME` if, and only if, they own the entry for `$NAME` in the Cheeseshop/PyPI.",
      "markdownDescription": "Every tool that is used by the project can have users specify configuration data as long as they use a sub-table within `[tool]`. Generally a project can use the subtable `tool.$NAME` if, and only if, they own the entry for `$NAME` in the Cheeseshop/PyPI.",
      "x-intellij-html-description": "<p>Every tool that is used by the project can have users specify configuration data as long as they use a sub-table within <code>[tool]</code>. Generally a project can use the subtable <code>tool.$NAME</code> if, and only if, they own the entry for <code>$NAME</code> in the Cheeseshop/PyPI.</p>",
      "x-taplo": {
        "links": {
          "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#arbitrary-tool-configuration-the-tool-table"
        }
      },
      "x-tombi-additional-key-label": "tool_name",
      "x-tombi-table-keys-order": "version-sort",
      "properties": {
        "black": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--partial-black.json",
          "title": "Code Formatter",
          "description": "The uncompromising Python code formatter."
        },
        "cibuildwheel": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--partial-cibuildwheel.json",
          "title": "Wheel Builder",
          "description": "Build Python wheels for all platforms."
        },
        "mypy": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--partial-mypy.json",
          "title": "Static Type Checker",
          "description": "Optional static typing for Python."
        },
        "ruff": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--ruff.json",
          "title": "Linter and Formatter",
          "description": "An extremely fast Python linter and formatter, written in Rust."
        },
        "ty": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--ty.json",
          "title": "Type checker",
          "description": "An extremely fast Python type checker, written in Rust."
        },
        "hatch": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--hatch.json",
          "title": "Project Manager",
          "description": "Modern, extensible Python project management."
        },
        "maturin": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--maturin.json",
          "title": "Rust-Python Package Builder",
          "description": "Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages"
        },
        "scikit-build": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--partial-scikit-build.json",
          "title": "Build System Generator",
          "description": "Improved build system generator for Python C/C++/Fortran extensions"
        },
        "setuptools": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--partial-setuptools.json",
          "title": "Package Manager",
          "description": "Easily download, build, install, upgrade, and uninstall Python packages."
        },
        "setuptools_scm": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--partial-setuptools-scm.json",
          "title": "Version Manager",
          "description": "Manage Python package versions using SCM (e.g. Git)."
        },
        "pixi": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--partial-pixi.json",
          "title": "Package Manager and Task Runner",
          "description": "A package manager and task runner."
        },
        "poe": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--partial-poe.json",
          "title": "Task Runner",
          "description": "A task runner that works well with pyproject.toml files."
        },
        "poetry": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--partial-poetry.json",
          "title": "Package Manager",
          "description": "Python dependency management and packaging made easy."
        },
        "pdm": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--partial-pdm.json",
          "title": "Package Manager",
          "description": "A modern Python package manager with PEP 621 support."
        },
        "pyright": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--partial-pyright.json",
          "title": "Static Type Checker",
          "description": "Static type checker for Python."
        },
        "pytest": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--partial-pytest.json",
          "title": "Testing Framework",
          "description": "Standardized automated testing of Python packages"
        },
        "repo-review": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--partial-repo-review.json",
          "title": "Repository Reviewer",
          "description": "Review a repository for best practices."
        },
        "taskipy": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--partial-taskipy.json",
          "title": "Task Runner",
          "description": "The complementary task runner for python."
        },
        "tombi": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--tombi.json",
          "title": "TOML Toolkit",
          "description": "Tombi is a toolkit for TOML; providing a formatter/linter and language server"
        },
        "tox": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--tox.json",
          "title": "Testing Framework",
          "description": "Standardized automated testing of Python packages"
        },
        "uv": {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/pyproject/_shared/latest--uv.json",
          "title": "Package Manager",
          "description": "An extremely fast Python package installer and resolver, written in Rust."
        }
      },
      "additionalProperties": {
        "type": "object",
        "additionalProperties": true
      }
    }
  },
  "x-taplo-info": {
    "authors": [
      "zevisert (https://github.com/zevisert)"
    ],
    "pattern": [
      "^(.*(/|\\\\)pyproject\\.toml|pyproject\\.toml)$"
    ]
  },
  "additionalProperties": false,
  "$comment": "there are multiple resources describing pyproject.toml. The canonical reference is at https://packaging.python.org/en/latest/specifications/declaring-project-metadata/, which refers to multiple proposals such as PEP 517, PEP 518 and PEP 621",
  "x-tombi-toml-version": "v1.0.0",
  "x-tombi-table-keys-order": "schema",
  "x-tombi-string-formats": [
    "email",
    "uri"
  ],
  "$defs": {
    "importNames": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[A-Za-z_][A-Za-z_0-9]*(?:\\.[A-Za-z_][A-Za-z_0-9]*)*(?:\\s*;\\s*private)?$"
      },
      "x-tombi-array-values-order": "version-sort"
    },
    "projectAuthor": {
      "type": "object",
      "x-tombi-table-keys-order": "schema",
      "anyOf": [
        {
          "required": [
            "name"
          ],
          "properties": {
            "name": true
          },
          "type": "object"
        },
        {
          "required": [
            "email"
          ],
          "properties": {
            "email": true
          },
          "type": "object"
        }
      ],
      "properties": {
        "name": {
          "type": "string"
        },
        "email": {
          "type": "string",
          "format": "email"
        }
      },
      "additionalProperties": false
    },
    "BuildSystem": {
      "type": "object",
      "properties": {
        "requires": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "uniqueItems": true,
          "title": "Build system dependencies",
          "description": "List of strings following the version specifier specification, representing dependencies required to execute the build system.",
          "markdownDescription": "List of strings following the [version specifier specification](https://packaging.python.org/en/latest/specifications/version-specifiers/#version-specifiers), representing dependencies required to execute the build system.",
          "x-intellij-html-description": "<p>List of strings following the <a href=\"https://packaging.python.org/en/latest/specifications/version-specifiers/#version-specifiers\">version specifier specification</a>, representing dependencies required to execute the build system.</p>",
          "x-taplo": {
            "links": {
              "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#declaring-build-system-dependencies-the-build-system-table"
            }
          },
          "x-tombi-array-values-order": "version-sort",
          "examples": [
            "setuptools >= 64.0"
          ]
        },
        "build-backend": {
          "type": "string",
          "title": "Name of Python object used to perform the build",
          "description": "String is formatted following the same `module:object` syntax as a `setuptools` entry point. It’s also legal to leave out the `:object` part.",
          "markdownDescription": "String is formatted following the same `module:object` syntax as a `setuptools` entry point. It’s also legal to leave out the `:object` part.",
          "x-intellij-html-description": "<p>String is formatted following the same <code>module:object</code> syntax as a <code>setuptools</code> entry point. It’s also legal to leave out the <code>:object</code> part.</p>",
          "x-taplo": {
            "links": {
              "key": "https://peps.python.org/pep-0517/#source-trees"
            }
          },
          "examples": [
            "setuptools.build_meta",
            "my_build_backend:backend"
          ]
        },
        "backend-path": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "Build backend directories",
          "description": "list of directories to prepend to `sys.path` when loading the build backend, relative to project root",
          "markdownDescription": "list of directoriesrepend to `sys.path` when loading the build backend, relative to project root",
          "x-intellij-html-description": "<p>list of directories to prepend to <code>sys.path</code> when loading the build backend, relative to project root</p>",
          "x-taplo": {
            "links": {
              "key": "https://peps.python.org/pep-0517/#in-tree-build-backends"
            }
          },
          "x-tombi-table-keys-order": "version-sort"
        }
      },
      "required": [
        "requires"
      ],
      "title": "Project build system configuration",
      "description": "Declares any Python level dependencies that must be installed in order to run the project’s build system successfully.",
      "markdownDescription": "Declares any Python level dependencies that must be installed in order to run the project’s build system successfully.",
      "x-intellij-html-description": "<p>Declares any Python level dependencies that must be installed in order to run the project’s build system successfully.</p>",
      "x-taplo": {
        "links": {
          "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#declaring-build-system-dependencies-the-build-system-table"
        }
      },
      "x-tombi-table-keys-order": "schema",
      "additionalProperties": false
    },
    "DependencyGroup": {
      "type": "array",
      "title": "Dependency specifiers or include groups",
      "description": "Each list item should be either:\n- [dependency specifiers](https://packaging.python.org/en/latest/specifications/dependency-specifiers/), or\n- table with a single key `include-group` which specifies another group name to include into this one",
      "markdownDescription": "Each list item should be either:\n- [dependency specifiers](https://packaging.python.org/en/latest/specifications/dependency-specifiers/), or\n- table with a single key `include-group` which specifies another group name to include into this one",
      "x-intellij-html-description": "<p>Each list item should be either:</p><ul><li><a href=\"https://packaging.python.org/en/latest/specifications/dependency-specifiers/\">dependency specifiers</a>, or</li><li>table with a single key <code>include-group</code> which specifies another group name to include into this one</li></ul>",
      "x-tombi-array-values-order": {
        "oneOf": [
          "version-sort",
          "ascending"
        ]
      },
      "uniqueItems": true,
      "items": {
        "oneOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "x-tombi-array-values-order-by": "include-group",
            "properties": {
              "include-group": {
                "type": "string",
                "pattern": "^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9])$"
              }
            },
            "additionalProperties": false
          }
        ]
      }
    }
  }
}
