{ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://json.schemastore.org/pyproject.json", "$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"], "additionalProperties": false, "definitions": { "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", "additionalProperties": false, "anyOf": [ { "required": ["name"], "properties": { "name": true } }, { "required": ["email"], "properties": { "email": true } } ], "properties": { "name": { "type": "string" }, "email": { "type": "string", "format": "email" } }, "x-tombi-table-keys-order": "schema" }, "BuildSystem": { "type": "object", "additionalProperties": false, "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": "
Declares any Python level dependencies that must be installed in order to run the project’s build system successfully.
", "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", "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": "List of strings following the version specifier specification, representing dependencies required to execute the build system.
", "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": "String is formatted following the same module:object syntax as a setuptools entry point. It’s also legal to leave out the :object part.
list of directories to prepend to sys.path when loading the build backend, relative to project root
Each list item should be either:
include-group which specifies another group name to include into this oneThere are two kinds of metadata: static and dynamic.
[project] table directly and cannot be specified or changed by a tool.dynamic key and represents metadata that a tool will later provide.Valid name consists only of ASCII letters and numbers, period, underscore and hyphen. It must start and end with a letter or number.
", "x-taplo": { "links": { "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#name" } }, "type": "string", "pattern": "^([a-zA-Z\\d]|[a-zA-Z\\d][\\w.-]*[a-zA-Z\\d])$" }, "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": "Version of the project, as defined in the Version specifier specification, and preferably already normalized.
", "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": "Summary description of the project in one line. Tools may not accept multiple lines.
", "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": "Value can be a relative path to text / markdown (.md suffix) / reStructuredText (.rst suffix) readme file, or a table with either:
file key containing path of aforementioned readme file, ortext key containing the full readme text embedded inside pyproject.toml.Specifies the Python version(s) that the distribution is compatible with. Must be in the format specified in Version specifiers.
", "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": "For now it is a table with either:
file key specifying a relative path to a license file, ortext key containing full license contentNewer tool may accept a single SPDX license expression string instead of a table.
", "x-taplo": { "links": { "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#license" } }, "oneOf": [ { "type": "object", "additionalProperties": false, "required": ["file"], "properties": { "file": { "title": "License file path", "type": "string" } } }, { "type": "object", "additionalProperties": false, "required": ["text"], "properties": { "text": { "title": "License text", "type": "string" } } }, { "$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": "Relative paths or globs to paths of license files. Can be an empty list.
", "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": "#/definitions/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": "People or organizations considered as 'authors' of the project. Each author is a table with name key, email key, or both.
People or organizations considered as 'maintainers' of the project. Each maintainer is a table with name key, email key, or both.
List of keywords or tags that describe the project. They could be used by search engines to categorize the project.
", "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": "List of Trove classifiers that describe the project. PyPI use the classifiers to categorize projects.
", "x-taplo": { "links": { "key": "https://packaging.python.org/en/latest/specifications/pyproject-toml/#classifiers" } }, "x-tombi-array-values-order": "version-sort" }, "urls": { "type": "object", "additionalProperties": { "type": "string", "format": "uri" }, "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": "Table consisting one or multiple label: URL pairs. Common indexes like PyPI uses well-known Project URLs when presenting project pages.
Table of 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.
Table of 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.
Extra entry point groups 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.
An array of dependency specifier strings, each representing a mandatory dependent package of the project.
", "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", "patternProperties": { "^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9])$": { "type": "array", "items": { "type": "string" } } }, "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": "Each entry is a key/value pair, with the key specifying extra feature name (such as socks in requests[socks]), and value is an array of dependency specifier strings.
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].
One 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.
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.
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.