Skip to main content

Format your pyproject.toml file

Project description

Apply a consistent format to your pyproject.toml file with comment support. See changelog here.

Recent Changes

  • ✨ feat(pyproject-fmt): drop redundant wheel from setuptools build requires by @gaborbernat in #373

  • Update Python dependencies by @gaborbernat in #368 <a id=”2.23.0”></a>

Philosophy

This tool aims to be an opinionated formatter, with similar objectives to black. This means it deliberately does not support a wide variety of configuration settings. In return, you get consistency, predictability, and smaller diffs.

Use

Via CLI

pyproject-fmt is a CLI tool that needs a Python interpreter (version 3.10 or higher) to run. We recommend either pipx or uv to install pyproject-fmt into an isolated environment. This has the added benefit that later you will be able to upgrade pyproject-fmt without affecting other parts of the system. We provide a method for pip too here, but we discourage that path if you can:

# install uv per https://docs.astral.sh/uv/#getting-started
uv tool install pyproject-fmt
pyproject-fmt --help

Via pre-commit hook

See pre-commit/pre-commit for instructions, sample .pre-commit-config.yaml:

- repo: https://github.com/tox-dev/pyproject-fmt
  # Use the sha / tag you want to point at
  # or use `pre-commit autoupdate` to get the latest version
  rev: ""
  hooks:
    - id: pyproject-fmt

Via Python

You can use pyproject-fmt as a Python module to format TOML content programmatically.

from pyproject_fmt import run

# Format a pyproject.toml file and return the exit code
exit_code = run(["path/to/pyproject.toml"])

The run function accepts command-line arguments as a list and returns an exit code (0 for success, non-zero for failure).

The tool.pyproject-fmt table is used when present in the pyproject.toml file:

[tool.pyproject-fmt]

# After how many columns split arrays/dicts into multiple lines and wrap long strings;
# use a trailing comma in arrays to force multiline format instead of lowering this value
column_width = 120

# Number of spaces for indentation
indent = 2

# Keep full version numbers (e.g., 1.0.0 instead of 1.0) in dependency specifiers
keep_full_version = false

# Automatically generate Python version classifiers based on requires-python
# Set to false to disable automatic classifier generation
generate_python_version_classifiers = true

# Maximum Python version for generating version classifiers
max_supported_python = "3.14"

# Table format: "short" collapses sub-tables to dotted keys, "long" expands to [table.subtable] headers
table_format = "short"

# Extra newlines between sub-tables in the same group (e.g. "\n" for one blank line between sub-tables)
sub_table_spacing = ""

# Extra newlines between root table groups (e.g. "\n" for one blank line, "\n\n" for two)
separate_root_table = "\n"

# List of tables to force expand regardless of table_format setting
expand_tables = []

# List of tables to force collapse regardless of table_format or expand_tables settings
collapse_tables = []

# List of key patterns to skip string wrapping (supports wildcards like *.parse or tool.bumpversion.*)
skip_wrap_for_keys = []

If not set they will default to values from the CLI.

Shared configuration file

You can place formatting settings in a standalone pyproject-fmt.toml file instead of (or in addition to) the [tool.pyproject-fmt] table. This is useful for monorepos or when you want to share the same configuration across multiple projects without duplicating it in each pyproject.toml.

The formatter searches for pyproject-fmt.toml starting from the directory of the file being formatted and walking up to the filesystem root. The first match wins. You can also pass an explicit path via --config:

pyproject-fmt --config /path/to/pyproject-fmt.toml pyproject.toml

The shared config file uses the same keys as the [tool.pyproject-fmt] table, but without the table header:

column_width = 120
indent = 2
table_format = "short"
sub_table_spacing = ""
separate_root_table = "\n"
max_supported_python = "3.14"

When both a shared config file and a [tool.pyproject-fmt] table exist, per-file settings from the [tool.pyproject-fmt] table take precedence over the shared config file.

Python version classifiers

This tool will automatically generate the Programming Language :: Python :: 3.X classifiers for you. To do so it needs to know the range of Python interpreter versions you support:

  • The lower bound can be set via the requires-python key in the pyproject.toml configuration file (defaults to the oldest non end of line CPython at the time of the release).

  • The upper bound, by default, will assume the latest stable release of CPython at the time of the release, but can be changed via CLI flag or the config file.

Table formatting

You can control how sub-tables are formatted in your pyproject.toml file. There are two formatting styles:

Short format (collapsed) - The default behavior where sub-tables are collapsed into dotted keys. Use this for a compact representation:

[project]
name = "myproject"
urls.homepage = "https://example.com"
urls.repository = "https://github.com/example/myproject"
scripts.mycli = "mypackage:main"

Long format (expanded) - Sub-tables are expanded into separate [table.subtable] sections. Use this for readability when tables have many keys or complex values:

[project]
name = "myproject"

[project.urls]
homepage = "https://example.com"
repository = "https://github.com/example/myproject"

[project.scripts]
mycli = "mypackage:main"

Table spacing

The sub_table_spacing and separate_root_table options control the blank lines inserted between tables. Each option takes a string of \n characters where each \n adds one blank line:

  • sub_table_spacing (default "") controls spacing between sub-tables within the same group. For example, between [tool.ruff] and [tool.ruff.lint]. Set to "\n" to add a blank line between sub-tables.

  • separate_root_table (default "\n") controls spacing between different root table groups. For example, between [project] and [tool.ruff].

[tool.pyproject-fmt]
sub_table_spacing = "\n"  # Add blank line between sub-tables
separate_root_table = "\n"  # One blank line between root table groups (default)

Configuration priority

The formatting behavior is determined by a priority system that allows you to set a global default while overriding specific tables:

  1. collapse_tables - Highest priority, forces specific tables to be collapsed regardless of other settings

  2. expand_tables - Medium priority, forces specific tables to be expanded

  3. table_format - Lowest priority, sets the default behavior for all tables not explicitly configured

This three-tier approach lets you fine-tune formatting for specific tables while maintaining a consistent default. For example:

[tool.pyproject-fmt]
table_format = "short"  # Collapse most tables
expand_tables = ["project.entry-points"]  # But expand entry-points

Specificity rules

Table selectors follow CSS-like specificity rules: more specific selectors win over less specific ones. When determining whether to collapse or expand a table, the formatter checks from most specific to least specific until it finds a match.

For example, with this configuration:

[tool.pyproject-fmt]
table_format = "long"  # Expand all tables by default
collapse_tables = ["project"]  # Collapse project sub-tables
expand_tables = ["project.optional-dependencies"]  # But expand this specific one

The behavior will be:

  • project.urls → collapsed (matches project in collapse_tables)

  • project.scripts → collapsed (matches project in collapse_tables)

  • project.optional-dependencies → expanded (matches exactly in expand_tables, more specific than project)

  • tool.ruff.lint → expanded (no match in collapse/expand, uses table_format default)

This allows you to set broad rules for parent tables while making exceptions for specific sub-tables. The specificity check walks up the table hierarchy: for project.optional-dependencies, it first checks if project.optional-dependencies is in collapse_tables or expand_tables, then checks project, then falls back to the table_format default.

Supported tables

The following sub-tables can be formatted with this configuration:

Project tables:

  • project.urls - Project URLs (homepage, repository, documentation, changelog)

  • project.scripts - Console script entry points

  • project.gui-scripts - GUI script entry points

  • project.entry-points - Custom entry point groups

  • project.optional-dependencies - Optional dependency groups

Tool tables:

  • tool.ruff.format - Ruff formatter settings

  • tool.ruff.lint - Ruff linter settings

  • Any other tool sub-tables

Array of tables:

  • project.authors - Can be inline tables or [[project.authors]]

  • project.maintainers - Can be inline tables or [[project.maintainers]]

  • Any [[table]] entries throughout the file

Array of tables ([[table]]) are automatically collapsed to inline arrays when each inline table fits within the configured column_width. For example:

# Before
[[tool.commitizen.customize.questions]]
type = "list"

[[tool.commitizen.customize.questions]]
type = "input"

# After (with table_format = "short")
[tool.commitizen]
customize.questions = [{ type = "list" }, { type = "input" }]

If any inline table exceeds column_width, the array of tables remains in [[...]] format to maintain readability and TOML 1.0.0 compatibility (inline tables cannot span multiple lines).

String wrapping

By default, the formatter wraps long strings that exceed the column width using line continuations. However, some strings such as regex patterns should not be wrapped because wrapping can break their functionality.

You can configure which keys should skip string wrapping using the skip_wrap_for_keys option:

[tool.pyproject-fmt]
skip_wrap_for_keys = ["*.parse", "*.regex", "tool.bumpversion.*"]

Pattern matching

The skip_wrap_for_keys option supports glob-like patterns:

  • Exact match: tool.bumpversion.parse matches only that specific key

  • Wildcard suffix: *.parse matches any key ending with .parse (e.g., tool.bumpversion.parse, project.parse)

  • Wildcard prefix: tool.bumpversion.* matches any key under tool.bumpversion (e.g., tool.bumpversion.parse, tool.bumpversion.serialize)

  • Global wildcard: * skips wrapping for all strings

Examples: ["*.parse", "*.regex"] to preserve regex fields, ["tool.bumpversion.*"] for a specific tool section, or ["*"] to skip all string wrapping.

pyproject-fmt is an opinionated formatter, much like black is for Python code. The tool intentionally provides minimal configuration options because the goal is to establish a single standard format that all pyproject.toml files follow.

Benefits of this approach:

  • Less time configuring tools

  • Smaller diffs when committing changes

  • Easier code reviews since formatting is never a question

While a few key options exist (column_width, indent, table_format, sub_table_spacing, separate_root_table), the tool does not expose dozens of toggles. You get what the maintainers have chosen to be the right balance of readability, consistency, and usability. The column_width setting controls when arrays are split into multiple lines and when string values are wrapped using line continuations.

General Formatting

These rules apply uniformly across the entire pyproject.toml file.

Table Ordering

Tables are reordered into a consistent structure:

  1. [build-system]

  2. [project]

  3. [dependency-groups]

  4. [tool.*] sections in the order:

    1. Build backends: poetry, poetry-dynamic-versioning, pdm, setuptools, distutils, setuptools_scm, hatch, flit, scikit-build, meson-python, maturin, pixi, whey, py-build-cmake, sphinx-theme-builder, uv

    2. Builders: cibuildwheel, nuitka

    3. Linters/formatters: autopep8, black, yapf, djlint, ruff, isort, flake8, pycln, nbqa, pylint, repo-review, codespell, docformatter, pydoclint, interrogate, tomlsort, check-manifest, check-sdist, check-wheel-contents, deptry, vulture, pyproject-fmt, typos, bandit

    4. Type checkers: mypy, pyrefly, pyright, ty, django-stubs

    5. Testing: pytest, pytest_env, pytest-enabler, coverage

    6. Task runners: doit, spin, tox

    7. Release tools: bumpversion, commitizen, jupyter-releaser, semantic_release, tbump, towncrier, vendoring

    8. Any other tool.* in alphabetical order

  5. Any other tables (alphabetically)

String Quotes

All strings use double quotes by default. Single quotes are only used when the value contains double quotes:

# Before
name = 'my-package'
description = "He said \"hello\""

# After
name = "my-package"
description = 'He said "hello"'

Key Quotes

TOML keys are normalized to the simplest valid form. Keys that are valid bare keys (containing only A-Za-z0-9_-) have redundant quotes stripped. Single-quoted (literal) keys that require quoting are converted to double-quoted (basic) strings with proper escaping. This applies to all keys: table headers, key-value pairs, and inline table keys:

# Before
[tool."ruff"]
"line-length" = 120
lint.per-file-ignores.'tests/*' = ["S101"]

# After
[tool.ruff]
line-length = 120
lint.per-file-ignores."tests/*" = ["S101"]

Backslashes and double quotes within literal keys are escaped during conversion:

# Before
lint.per-file-ignores.'path\to\file' = ["E501"]

# After
lint.per-file-ignores."path\\to\\file" = ["E501"]

Array Formatting

Arrays are formatted based on line length, trailing comma presence, and comments:

# Short arrays stay on one line
keywords = ["python", "toml"]

# Long arrays that exceed column_width are expanded and get a trailing comma
dependencies = [
    "requests>=2.28",
    "click>=8.0",
]

# Trailing commas signal intent to keep multiline format
classifiers = [
    "Development Status :: 4 - Beta",
]

# Arrays with comments are always multiline
lint.ignore = [
    "E501",  # Line too long
    "E701",
]

Multiline formatting rules:

An array becomes multiline when any of these conditions are met:

  1. Trailing comma present - A trailing comma signals intent to keep multiline format

  2. Exceeds column width - Arrays longer than column_width are expanded (and get a trailing comma added)

  3. Contains comments - Arrays with inline or leading comments are always multiline

String Wrapping

Strings that exceed column_width (including the key name and " = " prefix) are wrapped into multi-line triple-quoted strings using line continuations:

# Before (exceeds column_width)
description = "A very long description that goes beyond the configured column width limit"

# After
description = """\
  A very long description that goes beyond the \
  configured column width limit\
  """

Wrapping prefers breaking at spaces and at " :: " separators (common in Python classifiers). Strings inside inline tables are never wrapped. Strings that contain actual newlines are preserved as multi-line strings without adding line continuations. Use skip_wrap_for_keys to prevent wrapping for specific keys.

Table Formatting

Sub-tables can be formatted in two styles controlled by table_format:

Short format (collapsed to dotted keys):

[project]
urls.homepage = "https://example.com"
urls.repository = "https://github.com/example/project"

Long format (expanded to table headers):

[project.urls]
homepage = "https://example.com"
repository = "https://github.com/example/project"

Table spacing:

By default, different table groups (e.g. [project] and [tool.ruff]) are separated by a blank line, while sub-tables within the same group (e.g. [tool.ruff] and [tool.ruff.lint]) are kept compact with no blank line between them. You can control this with sub_table_spacing and separate_root_table. Each option takes a string of \n characters where each \n adds one blank line. For example, setting sub_table_spacing = "\n" adds a blank line between sub-tables:

[tool.ruff]
line-length = 120

[tool.ruff.lint]
select = ["E", "W"]

Comment Preservation

All comments are preserved during formatting:

  • Inline comments - Comments after a value on the same line stay with that value

  • Leading comments - Comments on the line before an entry stay with the entry below

  • Block comments - Multi-line comment blocks are preserved

Inline comment alignment:

Inline comments within arrays are aligned independently per array, based on that array’s longest value:

# Before - comments at inconsistent positions
lint.ignore = [
  "COM812", # Conflict with formatter
  "CPY", # No copyright statements
  "ISC001",   # Another rule
]

# After - comments align to longest value in this array
lint.ignore = [
  "COM812",  # Conflict with formatter
  "CPY",     # No copyright statements
  "ISC001",  # Another rule
]

Table-Specific Handling

Beyond general formatting, each table has specific key ordering and value normalization rules.

[build-system]

The PEP 517 / PEP 518 table that declares how your project is built. See the packaging specification.

Keys are ordered build-backendrequiresbackend-path, and requires is normalized and sorted. A redundant wheel requirement is removed when the build backend is setuptools.

Key ordering: build-backendrequiresbackend-path

Value normalization:

  • requires: dependencies normalized per PEP 508 and sorted alphabetically by package name

  • backend-path: entries sorted alphabetically

Redundant wheel removal:

A bare wheel entry is removed from requires when build-backend is setuptools.build_meta or setuptools.build_meta:__legacy__: setuptools either injects wheel dynamically when building (before version 70.1) or bundles its own copy of bdist_wheel (70.1 and later), so listing it has no effect. The entry is kept when it carries a version constraint, extras, or markers (it then expresses intent the backend’s dynamic injection would honor), when backend-path is set (an in-tree backend may import wheel directly), or when setuptools itself is missing from requires.

# Before
[build-system]
requires = ["setuptools >= 45", "wheel"]
build-backend = "setuptools.build_meta"

# After
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools>=45"]

[project]

The PEP 621 core metadata table. See the packaging specification.

Keys follow the canonical metadata order; name, dependencies, classifiers, and keywords are normalized and sorted.

Key ordering: nameversionimport-namesimport-namespacesdescriptionreadmekeywordslicenselicense-filesmaintainersauthorsrequires-pythonclassifiersdynamicdependenciesoptional-dependenciesurlsscriptsgui-scriptsentry-points

Field normalizations:

name

Converted to canonical format (lowercase with hyphens): My_Packagemy-package

description

Whitespace normalized: multiple spaces collapsed, consistent spacing after periods.

license

License expression operators (and, or, with) uppercased: MIT or Apache-2.0MIT OR Apache-2.0

requires-python

Whitespace removed: >= 3.9>=3.9

keywords

Deduplicated (case-insensitive) and sorted alphabetically.

dynamic

Sorted alphabetically.

import-names / import-namespaces

Semicolon spacing normalized (foo;barfoo; bar), entries sorted alphabetically.

classifiers

Deduplicated and sorted alphabetically.

authors / maintainers

Sorted by name, then email. Keys within each entry ordered: nameemail.

Dependency normalization: every dependency array (dependencies, optional-dependencies.*) is normalized per PEP 508 (spaces removed, redundant .0 suffixes stripped unless keep_full_version = true) and sorted alphabetically by canonical package name:

# Before
dependencies = ["requests >= 2.0.0", "click~=8.0"]

# After
dependencies = ["click>=8", "requests>=2"]

Optional-dependency extra names are normalized to lowercase with hyphens:

# Before
[project.optional-dependencies]
Dev_Tools = ["pytest"]

# After
[project.optional-dependencies]
dev-tools = ["pytest"]

Python version classifiers are generated automatically from requires-python and max_supported_python. Disable with generate_python_version_classifiers = false:

# With requires-python = ">=3.10" and max_supported_python = "3.14"
classifiers = [
    "Programming Language :: Python :: 3 :: Only",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: 3.14",
]

Entry points: inline tables within entry-points are expanded to dotted keys:

# Before
entry-points.console_scripts = { mycli = "mypackage:main" }

# After
entry-points.console_scripts.mycli = "mypackage:main"

Authors / maintainers can be inline tables or an expanded array of tables (controlled by table_format, expand_tables, and collapse_tables):

# Short format (inline)
authors = [{ name = "Alice", email = "alice@example.com" }]

# Long format (array of tables)
[[project.authors]]
name = "Alice"
email = "alice@example.com"

[dependency-groups]

The PEP 735 table for named groups of development dependencies. See the packaging specification.

Groups are ordered devtesttypedocs → others alphabetically; each group is normalized and sorted.

Key ordering: devtesttypedocs → others alphabetically

Value normalization:

  • all dependencies normalized per PEP 508

  • sorted with regular dependencies first, then include-group entries

# Before
[dependency-groups]
dev = [{ include-group = "test" }, "ruff>=0.4", "mypy>=1"]

# After
[dependency-groups]
dev = ["mypy>=1", "ruff>=0.4", { include-group = "test" }]

[tool.poetry]

Poetry is a Python dependency management and packaging tool. See its pyproject.toml reference.

Covers both Poetry 1.x (legacy metadata under [tool.poetry]) and Poetry 2.x (metadata moved to [project], Poetry-specific keys still here). Metadata is ordered by section, Poetry-specific inline tables get canonical key order, and set-semantic arrays are sorted while order-significant ones are preserved.

Top-level key ordering:

  1. Identity: nameversiondescriptionpackage-mode

  2. License & authorship: licenseauthorsmaintainers

  3. Documentation: readmehomepagerepositorydocumentation

  4. Discovery: keywordsclassifiers

  5. Packaging contents: packagesincludeexcludebuild

  6. Dependencies (sub-tables): dependenciesdev-dependenciesgroupextras

  7. Entry points / distribution: scriptspluginsurlssource

  8. Poetry runtime constraints: requires-poetryrequires-pluginsbuild-constraints

Sub-table key ordering:

[tool.poetry.dependencies] / [tool.poetry.dev-dependencies] / per-group dependencies

python first (interpreter constraint), all other package names alphabetized.

[tool.poetry.group.<name>]

optionalinclude-groupsdependencies.

[tool.poetry.extras], [tool.poetry.scripts], [tool.poetry.urls], [tool.poetry.plugins.*], [tool.poetry.requires-plugins], [tool.poetry.build-constraints]

Keys alphabetized.

[tool.poetry.build]

scriptgenerate-setup-file.

[[tool.poetry.source]]

Each entry’s keys ordered nameurlprioritylinksindexed, with the deprecated default and secondary keys placed last. Array order itself is preserved (priority ordering is semantically significant).

Sorted arrays:

  • keywords, classifiers: deduplicated (case-insensitive) and sorted alphabetically.

  • exclude: sorted alphabetically.

  • [tool.poetry.extras] values (each extras.<name>): sorted alphabetically.

  • [tool.poetry.group.<name>.include-groups]: sorted alphabetically.

  • Per-dependency extras arrays (in dependencies, dev-dependencies, per-group dependencies, requires-plugins, build-constraints): sorted alphabetically.

Preserved as written (order is semantically significant): authors, maintainers, packages, include, readme (when an array), multi-constraint dependency arrays, and [[tool.poetry.source]] entries.

Inline-table key ordering: when a Poetry-specific inline table is detected (via discriminator keys unique to Poetry’s schema), its keys are reordered:

  • Sources ({ priority = ... }, { secondary = ... }, { links = ... }, { indexed = ... }): nameurlprioritylinksindexeddefaultsecondary.

  • Git dependencies ({ git = ... }): gitbranchtagrevsubdirectorypythonplatformmarkersallow-prereleasesallows-prereleasesoptionalextrasdevelop.

  • Path dependencies ({ path = ... }): pathdevelopsubdirectorypythonplatformmarkersoptionalextras.

  • File dependencies ({ file = ... }): filesubdirectorypythonplatformmarkersoptionalextras.

Inline tables that don’t match any Poetry-specific schema (for example [[project.authors]] inline form { name = "...", email = "..." }) are left untouched.

# Before
[[tool.poetry.source]]
priority = "primary"
url = "https://pypi.example.com/simple"
name = "private"

[tool.poetry.dependencies]
zebra = "^1.0"
python = "^3.11"
foo = { branch = "main", git = "https://github.com/example/foo" }

# After
[tool.poetry]
dependencies.python = "^3.11"
dependencies.foo = { git = "https://github.com/example/foo", branch = "main" }
dependencies.zebra = "^1.0"
source = [ { name = "private", url = "https://pypi.example.com/simple", priority = "primary" } ]

[tool.pdm.*]

PDM is a modern Python package and dependency manager. See its build configuration reference.

Top-level keys are ordered distribution → resolution → version → build → scripts → source → dev-dependencies → publish → options; name and glob arrays are sorted, while source-entry order is preserved.

Top-level key ordering: distribution / package-type / plugins → resolution → version → build → scripts → source → dev-dependencies → publish → options.

Sub-table ordering (collapsed to dotted keys):

  • version: sourcepathgetterwrite_towrite_templatetag_regextag_filterfallback_versionversion_format.

  • build: includesexcludessource-includespackage-diris-purelibrun-setuptoolscustom-hookeditable-backend.

  • [[tool.pdm.source]] (array of tables, order preserved): per-entry nameurltypeverify_sslinclude_packagesexclude_packages.

Sorted arrays: plugins, build.includes, build.excludes, build.source-includes, resolution.excludes, every dev-dependencies.<group> value array, and include_packages / exclude_packages inside source entries.

[tool.setuptools] and [tool.setuptools_scm]

setuptools is a long-standing build backend and packaging library; setuptools_scm derives the package version from SCM tags. See the setuptools pyproject.toml reference and the setuptools_scm configuration reference.

Keys in both tables are grouped (discovery → data → metadata → deprecated); name and glob arrays are sorted, while literal lists like packages are preserved.

[tool.setuptools] top-level key ordering (grouped):

  1. Packaging discovery: py-modulespackages.find.* / packages.find-namespace.*packagespackage-dir

  2. Package data: include-package-datapackage-dataexclude-package-data

  3. Dynamic metadata: dynamic

  4. Extensions / build customization: ext-modulescmdclass

  5. Distribution metadata: platformsprovidesobsoleteslicense-files

  6. Data files: data-files

  7. Deprecated / obsolete (pushed last): script-filesnamespace-packageszip-safeeager-resourcesdependency-links

[tool.setuptools.packages.find] / [tool.setuptools.packages.find-namespace] inner ordering: whereincludeexcludenamespaces.

[tool.setuptools.package-data] / [tool.setuptools.exclude-package-data] / [tool.setuptools.data-files] ordering: the catch-all "*" pattern always goes first, then the other package patterns alphabetically; each value (an array of glob patterns) is sorted alphabetically.

[tool.setuptools.dynamic] ordering: field names alphabetized. Inline-table directives (e.g. version = { attr = "pkg.__version__" } or readme = { file = "README.md", content-type = "text/markdown" }) get their keys ordered attrfilecontent-type.

Sorted arrays:

  • py-modules, platforms, provides, obsoletes, script-files, namespace-packages, eager-resources: alphabetized.

  • packages.find.include / packages.find.exclude / packages.find-namespace.*: alphabetized.

  • Values inside package-data / exclude-package-data / data-files tables: alphabetized.

Preserved as written (order is meaningful): packages (literal list, first match wins), license-files (PEP 639 concatenation order), and everything under [[tool.setuptools.ext-modules]] (compiler and linker argv arrays).

[tool.setuptools_scm] key ordering (grouped):

  1. Version output: version_fileversion_file_template

  2. Version computation: version_schemelocal_schemeversion_clsnormalize

  3. Root discovery: rootrelative_tofallback_rootparentsearch_parent_directoriesdist_name

  4. Tag / parse: tag_regexparseparentdir_prefix_versionfallback_version

  5. Nested SCM-specific tables: scm.git.pre_parsescm.git.describe_command

  6. Deprecated (pushed last): git_describe_command (use scm.git.describe_command) → write_to (use version_file) → write_to_template (use version_file_template) → version_class (use version_cls) → template

# Before
[tool.setuptools]
zip-safe = false
py-modules = ["foo", "bar"]
packages = ["my_pkg"]

[tool.setuptools.packages.find]
namespaces = true
where = ["src"]
include = ["my_pkg*"]

[tool.setuptools.dynamic]
readme = { content-type = "text/markdown", file = "README.md" }

# After
[tool.setuptools]
py-modules = [ "bar", "foo" ]
packages.find.where = [ "src" ]
packages.find.include = [ "my_pkg*" ]
packages.find.namespaces = true
packages = [ "my_pkg" ]
dynamic.readme = { file = "README.md", content-type = "text/markdown" }
zip-safe = false

[tool.hatch.*]

Hatch is a modern, extensible Python project manager built around the Hatchling build backend. See its build configuration reference.

Keys across the many [tool.hatch.*] sub-tables are grouped (version → metadata → build → publish → workspace → environments); name and path arrays are sorted, while build-hook and matrix order are preserved.

Key ordering: keys at [tool.hatch] level (after collapse, dotted version.* / build.* / metadata.* / envs.* / publish.* / workspace.*):

  1. Version: version.sourceversion.pathversion.patternversion.expressionversion.schemeversion.validate-bumpversion.fallback-versionversion.raw-options.

  2. Metadata: metadata.allow-direct-referencesmetadata.allow-ambiguous-featuresmetadata.hooks.

  3. Build: build.dev-mode-dirsbuild.directorybuild.sourcesbuild.packagesbuild.includebuild.excludebuild.force-includebuild.artifactsbuild.ignore-vcsbuild.skip-excluded-dirsbuild.reproduciblebuild.hooks → wheel target (packages, include, exclude, force-include, artifacts, hooks, shared-data, extra-metadata, etc.) → sdist target (include, exclude, force-include, support-legacy, strict-naming).

  4. Publish: publish.index.disablepublish.index.repospublish.index.

  5. Workspace: workspace.membersworkspace.exclude.

  6. Environments (envs.<name>.*): each environment’s keys follow typetemplatedetacheddescriptionplatformspythonpathinstallerskip-installsystem-packagesdev-modefeaturesdependenciesextra-dependenciesextra-argspre-install-commandspost-install-commandsenv-includeenv-excludeenv-varsscriptsmatrixmatrix-name-formatoverrides.

Sorted arrays:

  • Build: include, exclude, force-include, artifacts, packages, sources, dev-mode-dirs, and the matching build.targets.wheel.* / build.targets.sdist.* arrays.

  • Environments: per-env dependencies, extra-dependencies, features, platforms, env-include, env-exclude, pre-install-commands, post-install-commands.

  • Workspace: members, exclude.

scripts and env-vars sub-tables under each environment have their inner keys alphabetized.

Preserved as written: build-hook order and matrix entry order (both carry semantic meaning).

[tool.scikit-build]

scikit-build-core is a CMake-based build backend for Python C/C++ extensions. See its configuration reference.

Keys are ordered meta → build → cmake → ninja → sdist → wheel → install → editable → logging → metadata → search → generateoverrides; name and path lists are sorted, while cmake/ninja argv are preserved.

Key ordering: meta keys (minimum-version, build-dir, fail, experimental, strict-config) → buildcmakeninjasdistwheelinstalleditablelogging / messagesmetadatasearchgenerate (array of tables) → overrides (array of tables).

Sorted arrays: include, exclude, packages, files, targets, components, exclude-fields.

Preserved as written: args and define (CLI argv for cmake/ninja).

[tool.maturin]

Maturin builds and publishes Rust-based Python extension modules. See its configuration reference.

Keys are ordered module identity → source layout → cargo settings → compatibility/strip → behavior; set-semantic arrays are sorted, while cargo/rustc argv are preserved.

Key ordering: module identity (module-name, bindings, python-source, python-packages, python-bin-path) → source layout (src, manifest-path, include, exclude, sdist-include, sdist-generator, data) → cargo settings (features, no-default-features, all-features, cargo-extra-args, rustc-extra-args, config, profile, target, target-dir) → compatibility / strip (compatibility, auditwheel, skip-auditwheel, strip, frozen, locked, offline, zig) → behavior (use-cross).

Sorted arrays: python-packages, include, exclude, sdist-include, features (all set semantics).

Preserved as written: cargo-extra-args / rustc-extra-args (CLI argv).

[tool.pixi]

Pixi is a cross-platform conda/PyPI package and environment manager. See its pyproject.toml reference.

Keys are grouped by function (workspace metadata → configuration → dependencies → environments → build); channel and platform arrays are sorted.

Key ordering:

  1. Workspace metadata: workspace.nameworkspace.versionworkspace.descriptionworkspace.authorsworkspace.licenseworkspace.license-fileworkspace.readmeworkspace.homepageworkspace.repositoryworkspace.documentation

  2. Workspace configuration: workspace.channelsworkspace.platformsworkspace.channel-priorityworkspace.solve-strategyworkspace.conda-pypi-mapworkspace.requires-pixiworkspace.exclude-newerworkspace.previewworkspace.build-variantsworkspace.build-variants-files

  3. Dependencies: dependencieshost-dependenciesbuild-dependenciesrun-dependenciesconstraintspypi-dependenciespypi-options

  4. Development: dev

  5. Environment setup: system-requirementsactivationtasks

  6. Targeting: targetfeatureenvironments

  7. Package build: package

Sorted arrays: workspace.channels, workspace.platforms, workspace.preview, workspace.build-variants-files.

[tool.uv]

uv is a fast Python package and project manager from Astral. See its settings reference.

Keys are grouped by function (Python → dependencies → sources → resolution → build → network → publishing → workspace); package-name arrays and the sources table are sorted alphabetically.

Key ordering:

  1. Version & Python: required-versionpython-preferencepython-downloads

  2. Dependencies: dev-dependenciesdefault-groupsdependency-groupsconstraint-dependenciesoverride-dependenciesexclude-dependenciesdependency-metadata

  3. Sources & indexes: sourcesindexindex-urlextra-index-urlfind-linksno-indexindex-strategykeyring-provider

  4. Package handling: no-binary*no-build*no-sources*reinstall*upgrade*

  5. Resolution: resolutionprereleasefork-strategyenvironmentsrequired-environmentsexclude-newer*

  6. Build & Install: compile-bytecodelink-modeconfig-settings*extra-build-*concurrent-buildsconcurrent-downloadsconcurrent-installs

  7. Network & Security: allow-insecure-hostnative-tlsofflineno-cachecache-dirhttp-proxyhttps-proxyno-proxy

  8. Publishing: publish-urlcheck-urltrusted-publishing

  9. Python management: python-install-mirrorpypy-install-mirrorpython-downloads-json-url

  10. Workspace & Project: managedpackageworkspaceconflictscache-keysbuild-backend

  11. Other: pippreviewtorch-backend

Sorted arrays:

Package-name arrays

constraint-dependencies, override-dependencies, dev-dependencies, exclude-dependencies, no-binary-package, no-build-package, no-build-isolation-package, no-sources-package, reinstall-package, upgrade-package

Other arrays

environments, required-environments, allow-insecure-host, no-proxy, workspace.members, workspace.exclude

Sources table: sources entries are sorted alphabetically by package name:

# Before
[tool.uv.sources]
zebra = { git = "..." }
alpha = { path = "..." }

# After
[tool.uv.sources]
alpha = { path = "..." }
zebra = { git = "..." }

pip subsection: [tool.uv.pip] follows the same rules, with arrays like extra, no-binary-package, no-build-package, reinstall-package, and upgrade-package sorted alphabetically.

[tool.cibuildwheel]

cibuildwheel builds Python wheels across platforms in CI. See its options reference.

Keys are ordered selection → build config → build phases → test phases → platform images → per-platform sub-tables → overrides; set-semantic arrays are sorted, while argv-like lists are preserved.

Key ordering: selection (build, skip, test-skip, archs, enable, free-threaded-support) → build configuration (build-frontend, build-verbosity, config-settings, dependency-versions, environment, environment-pass) → build phases (before-all, before-build, repair-wheel-command) → test phases (before-test, test-command, test-requires, test-extras, test-groups, test-sources) → platform images (manylinux-*-image, musllinux-*-image) → container-engine → per-platform sub-tables (linux, macos, windows, android, ios, pyodide) → overrides last.

Per-platform sub-tables follow the same inner ordering. [[tool.cibuildwheel.overrides]] entries place select first (required), then the regular cibuildwheel keys; the array order itself is preserved (later overrides win).

Sorted arrays: enable, test-extras, test-groups.

Preserved as written: most other array-valued keys (test-requires, before-all, test-command, the various environment* fields) are CLI argv or ordered lists.

[tool.autopep8]

autopep8 automatically formats Python code to conform to PEP 8. See its configuration reference.

Keys are ordered length/indent → mode → rules → behavior; rule lists are sorted.

Key ordering: length/indent → mode (in-place, recursive, diff, list-fixes) → rules (ignore, select, exclude) → behavior.

Sorted arrays: ignore, select, exclude.

[tool.black]

Black is an opinionated Python code formatter. See its configuration reference.

Keys follow Black’s option grouping; target-version and enable-unstable-feature arrays are alphabetized.

Key ordering:

  1. required-versiontarget-versionline-length

  2. File selection: includeextend-excludeforce-excludeexclude

  3. Behavior: skip-string-normalizationskip-magic-trailing-commapreviewunstableenable-unstable-featurefastworkers

  4. Output: colorverbosequiet

Sorted arrays: target-version (so py39 precedes py310), enable-unstable-feature.

The include / exclude family are regex strings, not arrays, so they’re left as-is.

[tool.yapf]

YAPF is a configurable Python code formatter from Google. See its configuration reference.

A single flat table: based_on_style comes first (it sets the defaults), then the rest in a fixed order.

Key ordering: based_on_style first (sets defaults), then column_limit, indent_width, continuation_indent_width, then the remaining keys alphabetized.

[tool.djlint]

djLint is a linter and formatter for HTML templates (Django, Jinja, and more). See its configuration reference.

Keys are ordered profile/scope → formatting → linting → ignores → output; exclude and block lists are sorted.

Key ordering: profile/scope → formatting → linting → ignores → output.

Sorted arrays: exclude, extend_exclude, custom_blocks, custom_html, ignore, ignore_blocks.

[tool.ruff]

Ruff is a fast Python linter and formatter written in Rust. See its settings reference.

Keys follow Ruff’s option grouping (global → paths → behavior → output → formatlint); rule-code, path, and name arrays are sorted with natural ordering (RUF1 < RUF9 < RUF10).

Key ordering:

  1. Global settings: required-versionextendtarget-versionline-lengthindent-widthtab-size

  2. Path settings: builtinsnamespace-packagessrcincludeextend-includeexcludeextend-excludeforce-excluderespect-gitignore

  3. Behavior flags: previewfixunsafe-fixesfix-onlyshow-fixesshow-source

  4. Output settings: output-formatcache-dir

  5. format.* keys

  6. lint.* keys: selectextend-selectignoreextend-ignoreper-file-ignoresfixableunfixable → plugin configurations

Sorted arrays: alphabetical with natural ordering (RUF1 < RUF9 < RUF10):

# These arrays are sorted:
lint.select = ["E", "F", "I", "RUF"]
lint.ignore = ["E501", "E701"]

# Per-file-ignores values are also sorted:
lint.per-file-ignores."tests/*.py" = ["D103", "S101"]

The full set of sorted array keys:

Top-level

exclude, extend-exclude, include, extend-include, builtins, namespace-packages, src

Format

format.exclude

Lint

select, extend-select, ignore, extend-ignore, fixable, extend-fixable, unfixable, extend-safe-fixes, extend-unsafe-fixes, external, task-tags, exclude, typing-modules, allowed-confusables, logger-objects

Per-file patterns

lint.per-file-ignores.*, lint.extend-per-file-ignores.*

Plugin arrays

lint.flake8-bandit.hardcoded-tmp-directory, lint.flake8-bandit.hardcoded-tmp-directory-extend, lint.flake8-boolean-trap.extend-allowed-calls, lint.flake8-bugbear.extend-immutable-calls, lint.flake8-builtins.builtins-ignorelist, lint.flake8-gettext.extend-function-names, lint.flake8-gettext.function-names, lint.flake8-import-conventions.banned-from, lint.flake8-pytest-style.raises-extend-require-match-for, lint.flake8-pytest-style.raises-require-match-for, lint.flake8-self.extend-ignore-names, lint.flake8-self.ignore-names, lint.flake8-tidy-imports.banned-module-level-imports, lint.flake8-type-checking.exempt-modules, lint.flake8-type-checking.runtime-evaluated-base-classes, lint.flake8-type-checking.runtime-evaluated-decorators, lint.isort.constants, lint.isort.default-section, lint.isort.extra-standard-library, lint.isort.forced-separate, lint.isort.no-lines-before, lint.isort.required-imports, lint.isort.single-line-exclusions, lint.isort.variables, lint.pep8-naming.classmethod-decorators, lint.pep8-naming.extend-ignore-names, lint.pep8-naming.ignore-names, lint.pep8-naming.staticmethod-decorators, lint.pydocstyle.ignore-decorators, lint.pydocstyle.property-decorators, lint.pyflakes.extend-generics, lint.pylint.allow-dunder-method-names, lint.pylint.allow-magic-value-types

[tool.isort]

isort sorts and organizes Python imports. See its configuration options.

profile comes first (it sets the defaults everything else overrides), then output style, known sources, separation, skip patterns, and import edits; name lists are sorted, while sequence-sensitive lists are preserved.

Key ordering:

  1. profile: sets defaults that the keys below override

  2. Output style: line, wrap, indent, and multi-line options

  3. Known sources: sectionsdefault_sectionknown_standard_libraryextra_standard_libraryknown_third_partyknown_first_partyknown_local_folderknown_other

  4. Forced separation, skip patterns, import add/remove, and section heading comments

Sorted arrays: known_standard_library, extra_standard_library, known_third_party, known_first_party, known_local_folder, known_other, namespace_packages, src_paths, skip, skip_glob, extend_skip, extend_skip_glob, supported_extensions, blocked_extensions, single_line_exclusions, forced_separate, treat_comments_as_code, treat_all_comments_as_code, constants, variables.

Preserved as written (sequence is significant): sections (output section order), no_lines_before, add_imports, remove_imports, required_imports, force_to_top.

[tool.pylint.*]

Pylint is a comprehensive static analyzer and linter for Python. See its configuration reference.

Sub-tables follow Pylint’s checker-group order; all rule, name, and path lists are sorted by leaf key name regardless of sub-table.

Sub-table order: main (and legacy alias master) → messages_controlreportsbasicformatdesignclassesexceptionsimportsloggingmethod_argsrefactoringsimilaritiesspellingstringtypecheckvariablesmiscellaneous.

Sorted arrays: enable, disable, load-plugins, extension-pkg-allow-list, extension-pkg-whitelist, ignore, ignore-patterns, ignore-paths, ignored-modules, ignored-classes, ignored-argument-names, good-names, bad-names, logging-modules, valid-classmethod-first-arg, valid-metaclass-classmethod-first-arg, callbacks, additional-builtins, allowed-redefined-builtins, preferred-modules, deprecated-modules, known-third-party, known-standard-library, allowed-modules, expected-line-ending-format, overgeneral-exceptions, defining-attr-methods, exclude-protected. Matching is on the leaf key name regardless of which sub-table it appears in.

[tool.codespell]

codespell checks code and text for common misspellings. See its configuration reference.

Keys are ordered dictionaries → scope → fix behavior → output; word and path lists are sorted.

Key ordering: dictionaries (builtin, dictionary, ignore-words, ignore-words-list, ignore-regex, ignore-multiline-regex, exclude-file) → scope (skip, uri-ignore-words-list, check-filenames, check-hidden, hidden, regex, user-input) → fix behavior (write-changes, interactive, enable-colors, disable-colors) → output (count, quiet-level, summary).

Sorted arrays: builtin, dictionary, skip, ignore-words-list, uri-ignore-words-list.

[tool.docformatter]

docformatter formats Python docstrings to follow PEP 257. See its configuration reference.

Keys are ordered behavior → format width → wrap/summary tweaks → other.

Key ordering: behavior (in-place, recursive, check, diff, black, pep257, non-strict) → format width (line-length, wrap-summaries, wrap-descriptions, tab-width) → wrap/summary tweaks → other.

[tool.interrogate]

interrogate measures docstring coverage of a Python codebase. See its configuration reference.

Keys are ordered threshold → ignore flags → exclude → output; exclude and regex lists are sorted.

Key ordering: threshold → ignore flags → exclude → output.

Sorted arrays: exclude, extend-exclude, ignore-regex.

[tool.check-manifest]

check-manifest checks that MANIFEST.in is complete for an sdist. See its configuration reference.

Keys are ordered ignoreignore-bad-ideasignore-default-rules; both glob lists are sorted.

Key ordering: ignoreignore-bad-ideasignore-default-rules.

Sorted arrays: ignore and ignore-bad-ideas (file-glob lists).

[tool.deptry]

deptry finds unused, missing, and transitive dependencies in Python projects. See its usage reference.

Keys are ordered scope/exclude → ignore rules → per-rule ignores → behavior → mapping; the ignore and path lists are sorted.

Key ordering: scope/exclude → ignore rules → per-rule ignores → behavior → mapping.

Sorted arrays: the ignore_* / exclude / requirements_files / pep621_dev_dependency_groups / known_first_party lists.

[tool.vulture]

Vulture finds unused (dead) Python code. See its configuration reference.

Keys are ordered paths → ignore → behavior → output; path and name lists are sorted.

Key ordering: paths → ignore (exclude, ignore_names, ignore_decorators) → behavior (make_whitelist, min_confidence, sort_by_size) → output (verbose).

Sorted arrays: paths, exclude, ignore_names, ignore_decorators.

[tool.bandit]

Bandit finds common security issues in Python code. See its configuration reference.

Keys are ordered exclude_dirstargetstestsskips → per-plugin sub-tables; all array values are alphabetized.

Key ordering: exclude_dirstargetstestsskips → per-plugin sub-tables (assert_used, hardcoded_tmp_directory, etc.).

Sorted arrays: all array values (rule IDs, directory paths, function-name lists, all set semantics).

[tool.mypy]

mypy is a static type checker for Python. See its configuration reference.

Covers all documented mypy options plus the [[tool.mypy.overrides]] array of tables, reordered to match mypy’s configuration reference; set-semantic arrays are sorted, while plugins and mypy_path are preserved.

Top-level key ordering (sectioned):

  1. Import discovery: mypy_pathfilesmodulespackagesexcludeexclude_gitignorenamespace_packagesexplicit_package_basesignore_missing_importsfollow_untyped_importsfollow_importsfollow_imports_for_stubspython_executableno_site_packagesno_silence_site_packages

  2. Platform configuration: python_versionplatformalways_truealways_false

  3. Disallow dynamic typing: disallow_any_unimporteddisallow_any_exprdisallow_any_decorateddisallow_any_explicitdisallow_any_genericsdisallow_subclassing_any

  4. Untyped definitions and calls: disallow_untyped_callsuntyped_calls_excludedisallow_untyped_defsdisallow_incomplete_defscheck_untyped_defsdisallow_untyped_decorators

  5. None and Optional: implicit_optionalstrict_optional

  6. Configuring warnings: warn_redundant_castswarn_unused_ignoreswarn_no_returnwarn_return_anywarn_unreachabledeprecated_calls_exclude

  7. Suppressing errors: ignore_errors

  8. Miscellaneous strictness: allow_untyped_globalsallow_redefinitionlocal_partial_typesdisable_error_codeenable_error_codeextra_checksimplicit_reexportstrict_equalitystrict_bytesstrict

  9. Configuring error messages: show_error_contextshow_column_numbersshow_error_endhide_error_codesshow_error_code_linksprettycolor_outputerror_summaryshow_absolute_path

  10. Incremental mode: incrementalcache_dirsqlite_cachecache_fine_grainedskip_version_checkskip_cache_mtime_checks

  11. Advanced options: pluginspdbshow_tracebackraise_exceptionscustom_typing_modulecustom_typeshed_dirwarn_incomplete_stubnative_parser

  12. Report generation: any_exprs_reportcobertura_xml_reporthtml_reportlinecount_reportlinecoverage_reportlineprecision_reporttxt_reportxml_reportxslt_html_reportxslt_txt_report

  13. Miscellaneous: junit_xmljunit_formatscripts_are_moduleswarn_unused_configsverbosity

  14. overrides last.

Overrides entry key ordering: in each [[tool.mypy.overrides]] entry, module comes first (required), then per-module overridable keys in the same logical grouping as the parent table (import behavior, platform markers, disallow dynamic typing, untyped defs/calls, optional handling, warnings, suppression, miscellaneous strictness).

Sorted arrays:

  • Top-level: files, modules, packages, exclude, always_true, always_false, untyped_calls_exclude, deprecated_calls_exclude, disable_error_code, enable_error_code.

  • Inside overrides entries: module (when an array of patterns), always_true, always_false, disable_error_code, enable_error_code.

Preserved as written: plugins (run in declared order; reordering changes behavior) and mypy_path (a search path with priority semantics).

Inline-table handling: when [[tool.mypy.overrides]] collapses to overrides = [{...}, {...}] under the default table_format = "short", key order inside each entry is normalized via discriminators unique to mypy (disable_error_code / enable_error_code / ignore_missing_imports / follow_untyped_imports / ignore_errors / warn_unused_ignores / disallow_untyped_defs / check_untyped_defs). The arrays inside each inline entry are sorted in place, so disable_error_code = [...] is alphabetized whether the override is expanded or collapsed.

# Before
[[tool.mypy.overrides]]
ignore_missing_imports = true
disable_error_code = ["import-untyped", "attr-defined"]
module = "third_party.*"

# After
[tool.mypy]
overrides = [
  { module = "third_party.*", ignore_missing_imports = true, disable_error_code = [ "attr-defined", "import-untyped" ] },
]

[tool.pyrefly]

Pyrefly is Meta’s fast Python type checker and language server, written in Rust. See its configuration reference.

Keys follow a fixed platform → paths → behavior → errors order; path arrays are sorted.

Key ordering: python_versionpython_platformpython_interpreterproject_includesproject_excludessearch_pathsite_package_pathuse_untyped_importsreplace_imports_with_anyignore_errors_in_generated_codeerrors.

Sorted arrays: the path arrays.

[tool.pyright] and [tool.basedpyright]

Pyright is Microsoft’s fast Python type checker; basedpyright is a community fork sharing the same schema. See the pyright configuration reference and the basedpyright config-files reference.

Keys are ordered platform → mode flags → paths → strict-flavor toggles → defineConstantreport* rules (alphabetized) → executionEnvironments; path arrays are sorted.

Key ordering:

  1. Platform / interpreter: pythonVersionpythonPlatformpythonPathvenvvenvPathtypeshedPathstubPath

  2. Mode flags: typeCheckingModestrictfailOnWarningsuseLibraryCodeForTypes

  3. Paths: includeexcludeignoreextraPaths

  4. Strict-flavor toggles: strictListInference, strictDictionaryInference, strictSetInference, strictParameterNoneValue, enableExperimentalFeatures, enableTypeIgnoreComments, analyzeUnannotatedFunctions, disableBytesTypePromotions, deprecateTypingAliases

  5. defineConstant

  6. All report* rules, alphabetized

  7. executionEnvironments (last)

The report* rules (70+ in pyright; basedpyright adds more) are collected from the input and inserted alphabetically rather than hardcoded, so new diagnostic rules don’t require formatter changes.

Sorted arrays: include, exclude, ignore, extraPaths, strict.

[tool.ty]

ty is Astral’s fast Python type checker, written in Rust. See its configuration reference.

Keys are ordered srcrespect-ignore-filesenvironmentrulesterminaloverrides; the src array is sorted.

Key ordering: srcrespect-ignore-filesenvironmentrulesterminaloverrides (last).

Sorted arrays: src.

The schema is still pre-1.0; unknown keys are alphabetized after the canonical set.

[tool.pytest.ini_options]

pytest is a feature-rich testing framework for Python. See its configuration reference.

Keys in the ini_options block follow the pytest reference order; set-semantic arrays are sorted, while addopts and pythonpath are preserved.

Key ordering: pytest itself → discovery → CLI arguments → markers/parametrize → warnings → doctest → output → logging (capture / CLI / file) → JUnit XML → cache and tmp_path → assertion / faulthandler.

Sorted arrays (set semantics): testpaths, norecursedirs, collect_ignore, collect_ignore_glob, python_files, python_classes, python_functions, markers, filterwarnings, doctest_optionflags, usefixtures, required_plugins.

Preserved as written: addopts (CLI argv, order matters) and pythonpath (a search path with priority semantics).

# Before
[tool.pytest.ini_options]
log_cli_level = "INFO"
markers = [ "slow: marks tests as slow", "fast: marks tests as fast" ]
addopts = [ "--strict-markers", "-ra" ]
testpaths = [ "tests" ]
minversion = "8"

# After
[tool.pytest]
ini_options.minversion = "8"
ini_options.testpaths = [ "tests" ]
ini_options.addopts = [ "--strict-markers", "-ra" ]
ini_options.markers = [ "fast: marks tests as fast", "slow: marks tests as slow" ]
ini_options.log_cli_level = "INFO"

[tool.coverage]

coverage.py measures code coverage of Python programs. See its configuration reference.

Keys follow coverage.py’s workflow phases (run → paths → report → output formats) with related options kept adjacent; set-semantic arrays are sorted.

Key ordering: coverage.py’s workflow phases:

  1. Run phase (run.*): data collection

    • Source selection: sourcesource_pkgssource_dirs

    • File filtering: includeomit

    • Measurement: branchcover_pylibtimid

    • Execution context: command_lineconcurrencycontextdynamic_context

    • Data management: data_fileparallelrelative_files

    • Extensions: plugins

    • Debugging: debugdebug_filedisable_warnings

    • Other: corepatchsigterm

  2. Paths (paths.*): path mapping between source locations

  3. Report phase (report.*): general reporting

    • Thresholds: fail_underprecision

    • File filtering: includeomitinclude_namespace_packages

    • Line exclusion: exclude_linesexclude_also

    • Partial branches: partial_branchespartial_also

    • Output control: skip_coveredskip_emptyshow_missing

    • Formatting: formatsort

    • Error handling: ignore_errors

  4. Output formats (after report)

    • html.*: directorytitleextra_cssshow_contextsskip_coveredskip_empty

    • json.*: outputpretty_printshow_contexts

    • lcov.*: outputline_checksums

    • xml.*: outputpackage_depth

Related options stay adjacent: include / omit, exclude_lines / exclude_also, partial_branches / partial_also, and skip_covered / skip_empty.

Sorted arrays:

Run phase

source, source_pkgs, source_dirs, include, omit, concurrency, plugins, debug, disable_warnings

Report phase

include, omit, exclude_lines, exclude_also, partial_branches, partial_also

# Before (alphabetical)
[tool.coverage]
report.exclude_also = ["if TYPE_CHECKING:"]
report.omit = ["tests/*"]
run.branch = true
run.omit = ["tests/*"]

# After (workflow order with groupings)
[tool.coverage]
run.branch = true
run.omit = ["tests/*"]
report.omit = ["tests/*"]
report.exclude_also = ["if TYPE_CHECKING:"]

[tool.tox]

tox automates and standardizes testing across multiple Python environments. See its configuration reference.

A [tool.tox] block in pyproject.toml reuses the tox-toml-fmt rules, so it is formatted identically to a standalone tox.toml.

Reuses the rules from tox-toml-fmt: alias normalization (envlistenv_list, setenvset_env, etc.), canonical key ordering for the root table and every env table, PEP 508 requirement normalization and sorting in deps and constraints, sorted pass_env (inline-table entries first), version-aware env_list sorting (py313 before py312 before py311), and inline-table reordering for replace, prefix, product, and value directives.

See the tox-toml-fmt documentation for the full schema and per-key behavior; the only difference here is the namespace (tool.tox instead of the root table).

[tool.bumpversion]

bump-my-version (the successor to bumpversion) updates version strings across files and tags releases. See its configuration reference.

Keys are ordered identity → format → tag → commit → behavior → files / parts.

Key ordering: identity (current_version) → format (parse, serialize, search, replace, regex, ignore_missing_*) → tag (tag, sign_tags, tag_name, tag_message) → commit (allow_dirty, commit, commit_args, message, moveable_tags) → behavior → files / parts (arrays of tables, last).

[tool.commitizen]

Commitizen enforces conventional commits and automates version bumps and changelogs. See its configuration reference.

Keys are ordered rule selection → version source → bump behavior → tag/sign → changelog → hooks → customize.

Key ordering: rule selection (name, schema, schema_pattern, allowed_prefixes) → version source (version, version_scheme, version_provider, version_files) → bump behavior → tag/sign → changelog → hooks (pre_bump_hooks, post_bump_hooks) → customize.

Sorted arrays: version_files, allowed_prefixes, extras, extra_files.

[tool.semantic_release]

python-semantic-release automates versioning and releases from commit history. See its configuration reference.

Keys are ordered tag/version → assets → version source → repo → commit parser → branches → publish → changelog → remote; version and asset lists are sorted.

Key ordering: tag/version → assets → version source → repo → commit parser → branches → publish → changelog → remote.

Sorted arrays: version_variables, version_toml, assets, exclude_commit_patterns.

[tool.towncrier]

towncrier builds release notes from news-fragment files. See its configuration reference.

Keys are ordered package identity → news location → rendering → behavior → type / section; the ignore glob list is sorted, while changelog display order is preserved.

Key ordering: package identity (name, version, package, package_dir) → news location (directory, filename, start_string, template, title_format, issue_format, underlines) → rendering (wrap, all_bullets, single_file, orphan_prefix, create_eof_newline, create_add_extension) → behavior (ignore) → type and section (arrays of tables, last).

[[tool.towncrier.type]] entries get keys ordered directorynameshowcontent; [[tool.towncrier.section]] entries get pathnameshowcontent. Array order is preserved (display order in the rendered changelog).

Sorted arrays: ignore (file globs to skip).

Other Tables

Any unrecognized tables are preserved and reordered according to standard table ordering rules. Keys within unknown tables are not reordered or normalized. Requires-Dist: tomli>=2.4.1; python_version<’3.11’

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyproject_fmt-2.24.0.tar.gz (281.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyproject_fmt-2.24.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl (5.5 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ x86-64

pyproject_fmt-2.24.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded PyPymacOS 11.0+ ARM64

pyproject_fmt-2.24.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded PyPymacOS 10.12+ x86-64

pyproject_fmt-2.24.0-cp315-cp315t-musllinux_1_2_x86_64.whl (5.6 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ x86-64

pyproject_fmt-2.24.0-cp315-cp315t-musllinux_1_2_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ ARM64

pyproject_fmt-2.24.0-cp315-cp315t-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.28+ x86-64

pyproject_fmt-2.24.0-cp315-cp315t-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.28+ ARM64

pyproject_fmt-2.24.0-cp315-cp315t-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.15tmacOS 11.0+ ARM64

pyproject_fmt-2.24.0-cp315-cp315t-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.15tmacOS 10.12+ x86-64

pyproject_fmt-2.24.0-cp314-cp314t-win_arm64.whl (4.8 MB view details)

Uploaded CPython 3.14tWindows ARM64

pyproject_fmt-2.24.0-cp314-cp314t-win_amd64.whl (5.3 MB view details)

Uploaded CPython 3.14tWindows x86-64

pyproject_fmt-2.24.0-cp314-cp314t-musllinux_1_2_x86_64.whl (5.6 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

pyproject_fmt-2.24.0-cp314-cp314t-musllinux_1_2_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

pyproject_fmt-2.24.0-cp314-cp314t-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64

pyproject_fmt-2.24.0-cp314-cp314t-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

pyproject_fmt-2.24.0-cp314-cp314t-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

pyproject_fmt-2.24.0-cp314-cp314t-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.14tmacOS 10.12+ x86-64

pyproject_fmt-2.24.0-cp313-cp313t-win_arm64.whl (4.8 MB view details)

Uploaded CPython 3.13tWindows ARM64

pyproject_fmt-2.24.0-cp313-cp313t-win_amd64.whl (5.3 MB view details)

Uploaded CPython 3.13tWindows x86-64

pyproject_fmt-2.24.0-cp313-cp313t-musllinux_1_2_x86_64.whl (5.6 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

pyproject_fmt-2.24.0-cp313-cp313t-musllinux_1_2_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

pyproject_fmt-2.24.0-cp313-cp313t-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ x86-64

pyproject_fmt-2.24.0-cp313-cp313t-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ ARM64

pyproject_fmt-2.24.0-cp313-cp313t-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

pyproject_fmt-2.24.0-cp313-cp313t-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.13tmacOS 10.12+ x86-64

pyproject_fmt-2.24.0-cp310-abi3-win_arm64.whl (4.8 MB view details)

Uploaded CPython 3.10+Windows ARM64

pyproject_fmt-2.24.0-cp310-abi3-win_amd64.whl (5.3 MB view details)

Uploaded CPython 3.10+Windows x86-64

pyproject_fmt-2.24.0-cp310-abi3-musllinux_1_2_x86_64.whl (5.6 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

pyproject_fmt-2.24.0-cp310-abi3-musllinux_1_2_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

pyproject_fmt-2.24.0-cp310-abi3-manylinux_2_31_riscv64.whl (5.2 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.31+ riscv64

pyproject_fmt-2.24.0-cp310-abi3-manylinux_2_28_x86_64.whl (5.5 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ x86-64

pyproject_fmt-2.24.0-cp310-abi3-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

pyproject_fmt-2.24.0-cp310-abi3-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

pyproject_fmt-2.24.0-cp310-abi3-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file pyproject_fmt-2.24.0.tar.gz.

File metadata

  • Download URL: pyproject_fmt-2.24.0.tar.gz
  • Upload date:
  • Size: 281.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for pyproject_fmt-2.24.0.tar.gz
Algorithm Hash digest
SHA256 0505e1d33be51a8307ebb0c3a6c6739271c4ead341c05b612481f5b8c59fa1cd
MD5 299a0a317eea1c7be702b206f130ffff
BLAKE2b-256 c972f3f9a8f89625fd7234523815b6e3d2e99d75e04d41a811a8052a4da32442

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0.tar.gz:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d1501634d6d5c9e7a3668e511345b768ee18db08accaf55c9487f0e68345e71a
MD5 64e5445636d4cd1a86736cd376ba259b
BLAKE2b-256 533c6493e0ea78466c332f88bc55effa16c4553ea3087a65d0f251b9c49d6ac0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 69a273741522cb16ce07fc3922926c67baf01dbd83b33be6bc91fadca0990278
MD5 9d38e91f0fddcee402c197539f11fd72
BLAKE2b-256 47a2438a4a5f2f68a560ed8b8a72717050caade180481da35d099c3577447c26

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 85d685525ac4f159c229bb1aaca1d95e4692246c914c55ebeb2011f89def8895
MD5 a73c4e9d6b7f235b0fe2e751b84206e7
BLAKE2b-256 59824ac846298752735cd52495984de99f8d650c8d02f5c041be64475507dc96

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp315-cp315t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp315-cp315t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0c765817775769983896d857154845599d3167bcc969327f8b7fc65d09b26742
MD5 a589a29accbfe8ca88778316d254328f
BLAKE2b-256 f3d0829353995633b212fe775d03c9a19e3d2eab9cbe1e199cc4261347c1602c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp315-cp315t-musllinux_1_2_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp315-cp315t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp315-cp315t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 727437d8e845371b8950f94ff4b25a034124b51a936321e8861f7911c0957032
MD5 794ffa58f5299e815abdd0f9350bf993
BLAKE2b-256 1e28e80f420cbceacb278c94e6a216a44ae17b7abdf20657e7468d7a35cacd00

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp315-cp315t-musllinux_1_2_aarch64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp315-cp315t-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp315-cp315t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 18803b02c5c04024198fe63bce5ae58770426eea46ad4f8a9e5bf05f71ec97ad
MD5 125b670ef2eda530c2a7fa72e5474bb0
BLAKE2b-256 b62b00976ddd0cd46b6d083c7ce6db999435f126c4420b1fbdb8b72326eed4bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp315-cp315t-manylinux_2_28_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp315-cp315t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp315-cp315t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 12bc33dac7613de97d5d91f6f0c41747ed0d7c688c516c9682f435d0209a469a
MD5 c219182d54a949180766086c9224cf3b
BLAKE2b-256 1551110de42fe0a8e7e03ccdb416f87653c018f68fbe42f79d1eda853967f878

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp315-cp315t-manylinux_2_28_aarch64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp315-cp315t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp315-cp315t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 26370ae6fcae75866729b5d4d6094b87787f289a19fa38788f18b640531127a5
MD5 82ee5f01f02215e558da99191467d478
BLAKE2b-256 49ed0b03fc63659531460dd195072ba5eb46950b7d8a2fffea2dd74f1dd3eef1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp315-cp315t-macosx_11_0_arm64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp315-cp315t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp315-cp315t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e68cf1edb09e3295f98b224f51a7df22d2b48d6b3d4100bf5784a1307e9c589b
MD5 de3a15d8910865532c95c86d74e33139
BLAKE2b-256 de128526db17a98c54199720de767d4c92521f07ff6372231b6457b70efe0d56

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp315-cp315t-macosx_10_12_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp314-cp314t-win_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 326e1b77ae82fe0591e7054ef803e91f1b731e810902a20063d78f700b69af59
MD5 90aac9e46446bc48438efc412433761e
BLAKE2b-256 b9d071a1c157dedd11ff52e6db84da60df34a09a227b6f5f69707bb6432c733c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp314-cp314t-win_arm64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 dc496146a03e19d55631f5b8ed731e08ff2b9c7de06030e4ab75c9cb292fe400
MD5 b9abaea97eedc400ddad1e85ab213bc2
BLAKE2b-256 ae446bee0e4ec0c66e72ef3b797275be3cbdd5c0285be6539a950e5f479d2a28

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp314-cp314t-win_amd64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 89dd348e5ae5202b6e59a91a42ce8aaed08e5dbbf8076bb54ad7b0a2302a20ad
MD5 c93254a477b679aa720cfccde37c47bf
BLAKE2b-256 cedaa0a115ad897677edf722c74af8093cfe04937e5c030370e1022958e7d18f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp314-cp314t-musllinux_1_2_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 09f936dccaa0dba9b361609b09dfd98ec9bb28856b9c01a582595f04557d4059
MD5 10fca7786ada52f558a8f4735239c109
BLAKE2b-256 91e39a110f7e8aad61a7cf76fbf4a03dba76730bde632343f52023a1c229ea7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp314-cp314t-musllinux_1_2_aarch64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp314-cp314t-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp314-cp314t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b224e75ad3b8149e5d41092dbecad70beb83cbf1a1e5bfcec190ae2a6bcb2237
MD5 ce093c4772d71ad8a5543f4e630bba06
BLAKE2b-256 bb2a18599dd4564c727e5b761d96980864686079d7cc9fec8a8c98434f6f3e23

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp314-cp314t-manylinux_2_28_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp314-cp314t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5908d6c87e6cf965ff0fe8474bc1d5730737e3cc9143b7966b2e113f5096bda7
MD5 b0c6823434db6d4fdb1db1c27ff733da
BLAKE2b-256 28adae7693cb28f99e856463152502559d65b1241a5bfaed615e5ba41a1f4348

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp314-cp314t-manylinux_2_28_aarch64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b93ec30067a7b0fe8d5d01c81f52c53f74619040bd075f1ab056c5a938410992
MD5 cdf25e34dfe6b70d1901c5807aa3ad7a
BLAKE2b-256 acb755a56529b9ae586b61d3aa467b272fd18b30d0c10cbf28eb74a42b6926f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp314-cp314t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9c8368b61192b01815f9cc5c6bde071edebfcdb1f1812717fc06abbfbda89618
MD5 11461bfc02621660fda4dfbd0de87aeb
BLAKE2b-256 c5e35607432e810197e495c1497e438fff327bffa2c0d637317f65998aa97f34

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp314-cp314t-macosx_10_12_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp313-cp313t-win_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp313-cp313t-win_arm64.whl
Algorithm Hash digest
SHA256 cf18ad9013cf1f1258415aeb320f7052312ef45d18d30d05ad2e91f88a0e5cba
MD5 2a1c804cdb014d79ad899d3a3522e8ed
BLAKE2b-256 6be31bc229ee0430358053120ba6063fd74145c2e4a84e28af81a9364f36fd5b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp313-cp313t-win_arm64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp313-cp313t-win_amd64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 9ee430c3e6721eb26c855d7ac585491fcba1bf7c6fad5343a70cb5a4028860dc
MD5 7aafbee5c664c5c2465cf788c9776c69
BLAKE2b-256 269b49b97b61888c1a0ad4398f619943bb6807c21be8502c0f245f4340f78da1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp313-cp313t-win_amd64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b9cbfe35d2e076ed6b2bad14c4a297bf7c54c935258309b2aaaede74cb3e1635
MD5 95e982f6b76db2bcd17f868357c8a17c
BLAKE2b-256 184f0dd52134947fa7179c5e308a3215734e41576074950f3a2ddcf806988604

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp313-cp313t-musllinux_1_2_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp313-cp313t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 fa35c3b85eb96473be31ad80877ccf3049ab41f75e5875c851999578ce9e8d52
MD5 824d1aea76a9a37dbb8ed0c8947db40a
BLAKE2b-256 e80c595aa91ece315aff023bcb274b73ada5107ceb2d49d69e2bd6ac9b95dd34

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp313-cp313t-musllinux_1_2_aarch64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp313-cp313t-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp313-cp313t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 98dfb027247655f5a3efd4f65869113a8dfca2a714f0819584250129d2cf32f0
MD5 9faaddf22790fef9ded3afb6a3413af5
BLAKE2b-256 333a1099ac9e2c2c59d8bdf19909eba7fa1cc1c8683737e9e69a4ee736233ab7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp313-cp313t-manylinux_2_28_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp313-cp313t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp313-cp313t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f777590a02ec1a25cfae7f7b6a3cae7d69325a9327d6372b878bcc49d4ac6e87
MD5 df556eba93d3d428af1051a5fbad84f6
BLAKE2b-256 652b8dfde80ba65b5e02a20dc79a253ab9ce836ff87a91fb362bfb022f2c5150

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp313-cp313t-manylinux_2_28_aarch64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp313-cp313t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f488a0c0585b7d61df7f868932d8be596ef878ceb6824d81e2acc4972b00753c
MD5 0693d7be587182e24b2989df535a3a36
BLAKE2b-256 12878282588d0728973ba5468fcd7fc423ecbc62f332329c49d5fb00085153d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp313-cp313t-macosx_11_0_arm64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp313-cp313t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp313-cp313t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1e82488aace668fb97f91cbb5d70da3daaeb613e4bfeeb63c798dded9d1419e6
MD5 5d5d433af315f374233a60755f69bf54
BLAKE2b-256 5d18d94d93e864dbd8d122f9f3225440da8b6918f6b0ff76febceb7b18b20564

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp313-cp313t-macosx_10_12_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp310-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 960c7b06333a9ac871a51854f2bbcbee46882e1ce9eb1507aae3a5b5172d10e2
MD5 800484d880c94596061d8a76c7a92ece
BLAKE2b-256 5e75b1c012f28a5efe2862a3abe83fa8d1e625631f458c376e4f0cb973625eb2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp310-abi3-win_arm64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 eba2bfad2b2b8e4e61d4e5d70cb8a971bbe3c3cdf7dcfc57d0bc8f38932e531e
MD5 edfadb5afa22c29c6117117bf7501e21
BLAKE2b-256 33201bff3d50035b292efd82e5c98d62edb5adabf20f0b81d76dde8166621785

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp310-abi3-win_amd64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 924694f1d0d93493394b58f7cf5f5434fe667c38c226753806a4f37d61462de6
MD5 e02f25358dca83f9583deb0e9206ca8e
BLAKE2b-256 e6c183127ec44ad30ab3303492fceed2a9167ba0f9d1447a81cd2d1cefbd8494

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp310-abi3-musllinux_1_2_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 69fba42e906cff1396e75a4181445ee9ad66f3d2c6505dc59c7abd914f154674
MD5 e02af971e9158d44f94fcfc440318994
BLAKE2b-256 d81d6e0fd0ccc8bf57d4b9c2a4558055fe89b63b370a0c69aa6947fbf64aa259

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp310-abi3-musllinux_1_2_aarch64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp310-abi3-manylinux_2_31_riscv64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp310-abi3-manylinux_2_31_riscv64.whl
Algorithm Hash digest
SHA256 acabad831ec31c7b89ab358d46a6dca692996ff127d5cf53afd5eff2affc78fd
MD5 aad17205545ece4ebbe21fa8c65797bb
BLAKE2b-256 fbf13179d8adb6d771360eaee488695f3314fd1e6b0d4bb51f3d8e4902f177f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp310-abi3-manylinux_2_31_riscv64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dd75e92ebcf61be93b2678382ad7978876cef7e434e4962cabbe666f0643133a
MD5 dd0d8d679d2ef71dbcaf032998a81eaa
BLAKE2b-256 22501b71b69451ce5c7a7a747d0c1c54768e15881a393d529e30443b49406674

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp310-abi3-manylinux_2_28_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2ef36499160059c776f50c8e03089206427f7e044249a6725037aa002246c17b
MD5 5eee23b85b1d144f6659572dd9c128e7
BLAKE2b-256 d91f9c01d608addadf31c72740fd9c1a0f9162b48f1928a14ae78fba784f1373

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp310-abi3-manylinux_2_28_aarch64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c1db2cc4c95baaac98c706ec1f5ebe508dfac33415290d4453296543cd6e4932
MD5 2aec67d25787966d081ae326922c70fc
BLAKE2b-256 b862cca1a455dc5dcd42b199b08e151a3cf35810ae007bdf8a9ea9a1a7a9607b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.24.0-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.24.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e6f8ae0d995da9b4f0e9d811d577276af01899d4558388e71be4937d571081e5
MD5 006787f305818bb705179757a69c7017
BLAKE2b-256 e88fe42c52e0e4eae43b796a1497adc627f0cd2575a15660716f891be60af70a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.24.0-cp310-abi3-macosx_10_12_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page