Skip to main content

pyproject-fmt formats pyproject.toml files without discarding comments. It uses a small configuration surface to keep results stable across projects. See the release history for version changes.

Install

The command requires Python 3.10 or later. An isolated tool environment avoids dependency conflicts with the target project.

uv tool install pyproject-fmt
pyproject-fmt --help

Pre-commit

Add the hook to .pre-commit-config.yaml and set rev to the required release:

- repo: https://github.com/tox-dev/pyproject-fmt
  rev: ""
  hooks:
    - id: pyproject-fmt

See pre-commit/pre-commit for installation and update commands.

Python API

run accepts command-line arguments and returns the process exit code:

from pyproject_fmt import run

exit_code = run(["path/to/pyproject.toml"])

See the configuration reference for settings and the formatting reference for the rules applied to each table.

Project settings

Put per-file settings in [tool.pyproject-fmt]:

[tool.pyproject-fmt]
column_width = 120
indent = 2
keep_full_version = false
generate_python_version_classifiers = true
max_supported_python = "3.15"
table_format = "short"
sub_table_spacing = ""
separate_root_table = "\n"
expand_tables = []
collapse_tables = []
skip_wrap_for_keys = []

These values match the command defaults. keep_full_version retains redundant zero components in dependency versions. Classifier generation reads the lower bound from project.requires-python and uses max_supported_python as its upper bound.

column_width controls array expansion and string wrapping. A trailing comma keeps an array multiline regardless of its width. indent controls continuation indentation.

Shared settings

A standalone pyproject-fmt.toml can hold settings for several projects. The file uses the same keys without the [tool.pyproject-fmt] header:

column_width = 120
indent = 2
table_format = "short"
max_supported_python = "3.15"

For each input, the formatter searches from the input’s directory toward the filesystem root and uses the nearest pyproject-fmt.toml. --config selects a file directly:

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

Command-line values establish defaults, the shared file overrides them, and [tool.pyproject-fmt] has final precedence. The formatter validates file settings with the command-line converters. An unknown key or invalid value stops formatting and reports its source.

Command-line interface

Python classifiers

Classifier generation adds Programming Language :: Python :: 3.X entries for supported minor releases. The requires-python constraint supplies the lower edge and max_supported_python caps the result. The formatter interprets the constraint under PEP 440:

  • ~=3.10 includes 3.10 and later minor releases up to the configured cap.

  • ~=3.10.0 includes the 3.10 series.

  • !=3.10 excludes that release, not the complete 3.10 series.

  • A constraint with no matching Python 3 release, such as >=4, produces no version classifiers.

Use generate_python_version_classifiers = false or --no-generate-python-version-classifiers to retain the input classifier list.

Table shape

table_format = "short" folds child tables into dotted keys. "long" writes child headers. Array-of-table entries fold into inline tables when each entry fits within column_width.

expand_tables and collapse_tables override the default by table path. The closest matching path wins, with collapse_tables winning a tie. This configuration collapses most project children but expands optional dependencies:

[tool.pyproject-fmt]
table_format = "long"
collapse_tables = ["project"]
expand_tables = ["project.optional-dependencies"]

The result folds project.urls and writes [project.optional-dependencies] as a header. Selectors also apply to tool tables and arrays of tables.

Spacing

sub_table_spacing inserts text between child tables in one group. separate_root_table inserts text between root groups. Each \n adds one blank line:

[tool.pyproject-fmt]
sub_table_spacing = "\n"
separate_root_table = "\n"

String wrapping

skip_wrap_for_keys excludes matching keys from line-continuation wrapping:

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

Patterns match dotted key segments:

  • tool.bumpversion.parse names one key.

  • *.parse names any path ending in parse.

  • tool.bumpversion.* names direct children of tool.bumpversion.

  • tool.*.parse names one segment between tool and parse.

  • * names every key.

A quoted "*" segment names a literal asterisk.

This reference separates file-wide rules from the key order and array policy for recognized tables. See the configuration reference for available settings.

General Formatting

These rules cover the complete pyproject.toml file.

Table Ordering

The formatter writes tables in this order:

  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. Other tables, alphabetically

String Quotes

Strings use double quotes unless the value contains one:

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

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

Key Quotes

The formatter removes quotes from bare keys containing A-Za-z0-9_-. Keys that need quotes use escaped double quotes. The rule covers headers, assignments, and inline tables:

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

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

Conversion escapes backslashes and double quotes in literal keys:

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

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

Array Formatting

Short arrays stay on one line:

# Before
keywords = ["python", "toml"]

# After
keywords = [ "python", "toml" ]

An array that exceeds column_width expands and gains a trailing comma:

# Before
[project]
keywords = ["web", "toml", "pyproject", "formatting"]

# After
[project]
keywords = [
  "formatting",
  "pyproject",
  "toml",
  "web",
]

A trailing comma retains multiline form at any width:

# Before
classifiers = ["Development Status :: 4 - Beta",]

# After
classifiers = [
  "Development Status :: 4 - Beta",
]

A member comment also retains multiline form:

lint.ignore = [
  "E501", # too long
  "E701",
]

An array uses multiline form when it has a trailing comma, exceeds column_width, or contains a member comment.

String Wrapping

The formatter wraps a string that pushes its line past column_width. Continuations account for the key or nested indent. A key wider than the limit keeps its value on one line because wrapping cannot shorten that prefix.

# Before
description = "Format your pyproject.toml file in place"

# After
description = """\
  Format your pyproject.toml file in \
  place\
  """

Wrapping prefers spaces and " :: " separators. It skips inline-table strings and strings containing newlines. skip_wrap_for_keys excludes selected paths.

Table Formatting

table_format selects a child-table shape.

Short form uses dotted keys:

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

Long form uses headers:

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

Child headers follow the same rank as their dotted keys. Unlisted children follow alphabetically, so [tool.coverage.run] precedes [tool.coverage.report] in long form just as run.* precedes report.* in short form:

# Before
[tool.coverage.report]
skip_covered = true

[tool.coverage.run]
branch = true

# After
[tool.coverage.run]
branch = true
[tool.coverage.report]
skip_covered = true

Root groups have one blank line between them. Child tables stay adjacent unless sub_table_spacing adds a gap:

# Before
[tool.ruff]
line-length = 120

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

# After
[tool.ruff]
line-length = 120

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

See the configuration reference for table overrides and spacing.

Array of Tables

Short form folds an array of tables when each entry fits within column_width:

# 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 one entry exceeds the limit, [[...]] headers remain because TOML 1.0 inline tables cannot span lines.

Comment Preservation

Comments move with the value or entry they describe. Within an array, trailing comments align against that array’s longest value:

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

# After
lint.ignore = [
  "COM812", # Conflict with formatter
  "CPY",    # No copyright statements
  "ISC001", # Another rule
]

Disabled Keys

A comment containing one valid assignment, such as # default = true, represents a disabled field. The formatter temporarily enables the assignment, formats it with its table, and restores the comment marker. This keeps the field beside its active peers:

# Before
[[tool.uv.index]]
name = "pypi"
authenticate = "never"
# default = true
# ignore-error-codes = [400,401,403]

# After
[[tool.uv.index]]
name = "pypi"
authenticate = "never"
# default = true
# ignore-error-codes = [ 400, 401, 403 ]

Prose, multiline blocks, and commented headers remain ordinary comments. The check is structural: prose that parses as one assignment receives disabled-field formatting. Rephrase such prose to avoid that interpretation. An assignment wider than column_width also remains an ordinary comment.

Group Markers

An isolated # Group: comment divides an array, table, or section list into independent sort ranges. Group order and the marker position stay fixed. Matching ignores case; trailing comments do not create boundaries.

The formatter sorts the entries inside each group:

# Before
[project]
dependencies = [
  # Group: web
  "flask",
  "django",
  # Group: db
  "sqlalchemy",
  "psycopg2",
]

# After
[project]
dependencies = [
  # Group: web
  "django",
  "flask",
  # Group: db
  "psycopg2",
  "sqlalchemy",
]

The same marker can precede a table key or [tool.*] header.

Line Endings

Output retains the input’s line ending. Mixed files use the more frequent ending, with ties resolved to \n. Stdout uses \n.

Table-Specific Handling

Recognized tables add the rules below.

[build-system]

The PEP 517 / PEP 518 table declares the project’s build process. See the packaging specification.

Keys follow build-backendrequiresbackend-path. requires receives normalized spelling and package-name order.

Key ordering: build-backendrequiresbackend-path

Value normalization:

  • requires: PEP 508 spelling and package-name order

  • backend-path: input order, which controls the frontend’s search

Preserved as written: every requirement the file declares. Setuptools has bundled bdist_wheel since 70.1, so a wheel entry beside it can be redundant, but no specifier says which release a resolver will pick for a given build, and removing a dependency the author declared can leave that build unable to run.

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

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

[project]

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

Keys follow the canonical metadata order. The formatter normalizes the name, dependency arrays, classifiers, and keywords, and validates the version.

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

Field normalizations:

name

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

version

Kept verbatim, because it is the exact version published in the package metadata, and normalizing would rewrite for example, CalVer 2026.08.10 to 2026.8.10. The formatter rejects values outside PEP 440, reports the error, and leaves the file untouched.

description

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

license

Uppercases license expression operators (and, or, with): MIT or Apache-2.0MIT OR Apache-2.0. The formatter rewrites a value after it parses as an SPDX expression over registered license and exception identifiers, so free-form text that happens to read like one (MIT or later) retains its input spelling.

requires-python

Whitespace removed: >= 3.9>=3.9

keywords

Deduplicated (case-insensitive) and sorted alphabetically.

dynamic

Sorted alphabetically.

import-names / import-namespaces

Uses PEP 794 spelling: a dotted name of Python identifiers followed by its optional modifier (pkg.sub ;privatepkg.sub; private). Valid entries sort alphabetically; other values retain their input spelling.

classifiers

Deduplicated and sorted alphabetically.

authors / maintainers

Retain published order. Each entry uses nameemail key order.

Dependency normalization: dependency arrays use PEP 508 spelling and canonical package-name order. The formatter removes spaces and redundant .0 suffixes unless keep_full_version = true:

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

# After
[project]
dependencies = [ "click~=8.0", "requests>=2" ]

A direct-reference dependency keeps a space before its marker separator, because PEP 508 only ends the URL at whitespace; without it, installers read the ; and the marker as part of the URL and reject the entry:

# Before
[project]
dependencies = ["pkg @ git+https://github.com/user/repo.git@main ; python_version>='3.10'"]

# After
[project]
dependencies = [ "pkg @ git+https://github.com/user/repo.git@main ; python_version>='3.10'" ]

Optional-dependency extra names use lowercase with hyphens:

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

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

Python version classifiers derive from requires-python and max_supported_python (here 3.15). Disable generation with generate_python_version_classifiers = false:

# Before
[project]
requires-python = ">=3.10"

# After
[project]
requires-python = ">=3.10"
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",
  "Programming Language :: Python :: 3.15",
]

Entry points: inline tables within entry-points expand to dotted keys:

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

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

Authors / maintainers can be inline tables (short format):

# Before
[project]
authors = [{ name = "Alice", email = "alice@example.com" }]

# After
[project]
authors = [ { name = "Alice", email = "alice@example.com" } ]

or an expanded array of tables (long format, controlled by table_format, expand_tables, and collapse_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 follow devtesttypedocs → other names alphabetically. Each group receives normalized dependency spelling and package-name order.

Key ordering: devtesttypedocs → others alphabetically

Value normalization:

  • all dependencies normalized per PEP 508

  • an include-group pulls its group into its current position; requirements between two inclusions sort

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

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

[tool.poetry]

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

Covers Poetry 1.x metadata under [tool.poetry] and Poetry 2.x tool-specific keys. Sections and inline tables follow Poetry’s documented order. Set-like arrays sort; sequence-dependent arrays retain input order.

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 last. Entries retain priority order.

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 order: authors, maintainers, packages, include, readme (when an array), multi-constraint dependency arrays, and [[tool.poetry.source]] entries.

Inline-table key ordering: Poetry discriminator keys select one of these orders:

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

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

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

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

Inline tables outside these schemas, such as { name = "...", email = "..." }, retain their input order.

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

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

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

[tool.pdm.*]

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

Top-level keys follow distribution → resolution → version → build → scripts → source → dev-dependencies → publish → options. Name and glob arrays sort; source entries retain priority order.

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 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.

Both tables group keys by discovery → data → metadata → deprecated. Name and glob arrays sort; literal lists such as packages retain input order.

[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 sorts 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, namespace-packages, eager-resources: alphabetized.

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

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

Preserved order: packages (literal list, first match wins), license-files (PEP 639 concatenation order), script-files and the data-files lists (installed in order, which decides which of two files sharing a name reaches the installation), 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"]

[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
dynamic.readme = { file = "README.md", content-type = "text/markdown" }
zip-safe = false

[tool.hatch.*]

Hatch is a Python project manager based on the Hatchling build backend. See its build configuration reference.

Hatch tables group keys by version → metadata → build → publish → workspace → environments. Name and path arrays sort; build hooks and matrix entries retain input order.

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: packages, sources, dev-mode-dirs, and build.targets.wheel.packages. include, exclude, force-include and artifacts keep their order, since hatch reads them the way a gitignore is read, where a !pattern after a broader one takes back what it matched.

  • Environments: per-env dependencies, extra-dependencies, features, platforms, env-include, env-exclude. pre-install-commands and post-install-commands keep their order, since hatch runs them in list order.

  • 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 follow meta → build → cmake → ninja → sdist → wheel → install → editable → logging → metadata → search → generateoverrides. Name and path lists sort; cmake and ninja arguments retain input order.

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

Sorted arrays: files, exclude-fields.

Preserved as written: packages (a later path can replace what an earlier one installed), include and exclude (read the way a gitignore is read, where a later negation takes back an earlier match), targets and components (cmake runs and installs them in order), and args and define (CLI argv for cmake/ninja).

[tool.maturin]

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

Keys follow module identity → source layout → cargo settings → compatibility/strip → behavior. Set-like arrays sort; cargo and rustc arguments retain input order.

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

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

Preserved as written: exclude (an ordered override program, where a !pattern after a broader one takes back what it matched) and rustc-args / unstable-flags (CLI argv).

[tool.pixi]

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

Keys follow workspace metadata → configuration → dependencies → environments → build. A platform array containing plain names sorts.

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.platforms and workspace.preview, where every entry is a plain name.

Preserved as written: workspace.channels and workspace.build-variants-files, since pixi reads both in input order and lets the earlier entry win, and a workspace.platforms holding a rich platform table, since that names no platform to sort by and pixi runs the first entry the host satisfies.

[tool.uv]

uv is Astral’s Python package and project manager. See its settings reference.

Keys follow Python → dependencies → sources → resolution → build → network → publishing → workspace. Package-name arrays and the sources table sort 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: entries sort by package name:

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

# After
[tool.uv]
sources.alpha = { path = "..." }
sources.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 follow selection → build config → build phases → test phases → platform images → per-platform sub-tables → overrides. Set-like arrays sort; argument lists retain input order.

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. overrides entries, whether written as [[tool.cibuildwheel.overrides]] or as inline tables in overrides = [...], place select first (required), then the regular cibuildwheel keys. Entries retain order because 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 formats Python code to conform to PEP 8. See its configuration reference.

Keys follow length/indent → mode → rules → behavior. Rule lists sort.

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 a Python code formatter. See its configuration reference.

Keys follow Black’s option groups. target-version and enable-unstable-feature sort alphabetically.

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 and exclude family hold regex strings, so they retain input spelling.

[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 follow profile/scope → formatting → linting → ignores → output. Exclude and block lists sort.

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 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 use natural order (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); per-file-ignores values follow the same order:

# Before
[tool.ruff]
lint.select = ["F", "E", "RUF", "I"]
lint.ignore = ["E701", "E501"]
lint.per-file-ignores."tests/*.py" = ["S101", "D103"]

# After
[tool.ruff]
lint.select = [ "E", "F", "I", "RUF" ]
lint.ignore = [ "E501", "E701" ]
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.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

Preserved order: lint.isort.forced-separate, whose list order controls auxiliary import blocks.

[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 sort; sequence-dependent lists retain input order.

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, treat_comments_as_code, treat_all_comments_as_code, constants, variables.

Preserved order: sections (output section order), no_lines_before, add_imports, remove_imports, required_imports, force_to_top, forced_separate (list order sets group placement).

[tool.pylint.*]

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

Sub-tables follow Pylint’s checker-group order. Rule, name, and path lists sort by leaf key, independent 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 follow dictionaries → scope → fix behavior → output. Word and path lists sort.

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 follow 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 follow threshold → ignore flags → exclude → output. Exclude and regex lists sort.

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 follow ignoreignore-bad-ideasignore-default-rules. Both glob lists sort.

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 follow scope/exclude → ignore rules → per-rule ignores → behavior → mapping. Ignore and path lists sort.

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 follow paths → ignore → behavior → output. Path and name lists sort.

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 follow exclude_dirstargetstestsskips → per-plugin sub-tables. Array values sort alphabetically.

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 mypy’s documented options and [[tool.mypy.overrides]]. Keys follow the mypy reference, set-like arrays sort, and plugins plus mypy_path retain input order.

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 order: 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", mypy-specific discriminators select each entry’s key order: disable_error_code / enable_error_code / ignore_missing_imports / follow_untyped_imports / ignore_errors / warn_unused_ignores / disallow_untyped_defs / check_untyped_defs. Arrays inside each entry sort in either table shape.

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

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

[tool.pyrefly]

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

Keys follow platform → paths → behavior → errors. Selection arrays sort; search paths retain input order.

Key ordering: python-versionpython-platformpython-interpreter-pathproject-includesproject-excludessearch-pathsite-package-pathuse-untyped-importsreplace-imports-with-anyignore-errors-in-generated-codeerrors. Pyrefly spells its options with hyphens; older underscore forms take the same rank.

Sorted arrays: project-includes, project-excludes. search-path and site-package-path keep input order because pyrefly searches them in sequence. replace-imports-with-any also retains order because the first match decides: a ! rule exempts an import only while it precedes a broader matching rule.

[tool.pyright] and [tool.basedpyright]

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

Keys follow platform → mode flags → paths → strict-flavor toggles → defineConstant → alphabetical report* rules → executionEnvironments. Path arrays sort.

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 formatter gathers report* rules from the input and sorts them, so new diagnostic names need no formatter update.

Sorted arrays: include, exclude, ignore, strict. extraPaths keeps its order, since pyright searches roots in list order.

[tool.ty]

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

Keys follow srcenvironmentrulesterminaloverrides. src.include sorts; src.exclude retains input order.

Key ordering: srcenvironmentrulesterminaloverrides (last). Within src, written either as dotted keys or as a [tool.ty.src] table: respect-ignore-filesincludeexcludeexclude-scripts.

Sorted arrays: src.include. src.exclude keeps its order, since ty reads it the way a gitignore is read and a !pattern takes back what a broader one excluded.

The schema remains pre-1.0; unknown keys follow the canonical set alphabetically.

[tool.pytest.ini_options]

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

Keys in ini_options follow the pytest reference. Set-like arrays sort; addopts and pythonpath retain input order.

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): norecursedirs, collect_ignore, collect_ignore_glob, python_files, python_classes, python_functions, markers, doctest_optionflags, usefixtures, required_plugins.

Preserved order: addopts (CLI arguments), testpaths (collection order), filterwarnings (the last filter that matches wins) 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-like arrays sort.

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
[tool.coverage]
report.exclude_also = ["if TYPE_CHECKING:"]
report.omit = ["tests/*"]
run.branch = true
run.omit = ["tests/*"]

# After
[tool.coverage]
run.omit = [ "tests/*" ]
run.branch = true
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 reuses the tox-toml-fmt rules applied 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 (constraints retains file order), 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 follow 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 follow 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 follow tag/version → assets → version source → repo → commit parser → branches → publish → changelog → remote. exclude_commit_patterns sorts; declaration lists retain input order.

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

Sorted arrays: exclude_commit_patterns. version_variables, version_toml and assets keep their order: each declaration writes in turn and the later one decides what the file ends up holding.

[tool.towncrier]

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

Keys follow package identity → news location → rendering → behavior → type / section. The ignore list sorts; changelog entries retain display order.

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. Arrays retain changelog display order.

Sorted arrays: ignore (file globs to skip).

[tool.pyproject-fmt]

The formatter’s own configuration table.

See the configuration reference for what each key controls.

Keys follow the documented configuration sequence. The expand_tables, collapse_tables, and skip_wrap_for_keys lists sort and drop duplicate strings.

Key ordering: column_widthindentkeep_full_versiongenerate_python_version_classifiersmax_supported_pythontable_formatsub_table_spacingseparate_root_tableexpand_tablescollapse_tablesskip_wrap_for_keys. Unrecognized keys follow alphabetically.

Sorted arrays: expand_tables, collapse_tables, skip_wrap_for_keys. Matching treats each as a set, so sorting and dropping byte-identical duplicates leaves behavior unchanged. Duplicate removal keeps case variants distinct for case-sensitive lookup.

# Before
[tool.pyproject-fmt]
keep_full_version = true
column_width = 120
skip_wrap_for_keys = ["b", "a", "a"]
indent = 4

# After
[tool.pyproject-fmt]
column_width = 120
indent = 4
keep_full_version = true
skip_wrap_for_keys = [ "a", "b" ]

Other Tables

Unrecognized tables take their standard table position. Their keys and values retain input order and spelling.

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.29.4.tar.gz (332.2 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.29.4-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl (1.6 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ x86-64

pyproject_fmt-2.29.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded PyPymacOS 11.0+ ARM64

pyproject_fmt-2.29.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded PyPymacOS 10.12+ x86-64

pyproject_fmt-2.29.4-cp315-cp315t-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ x86-64

pyproject_fmt-2.29.4-cp315-cp315t-musllinux_1_2_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ ARM64

pyproject_fmt-2.29.4-cp315-cp315t-manylinux_2_28_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.28+ x86-64

pyproject_fmt-2.29.4-cp315-cp315t-manylinux_2_28_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.28+ ARM64

pyproject_fmt-2.29.4-cp315-cp315t-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.15tmacOS 11.0+ ARM64

pyproject_fmt-2.29.4-cp315-cp315t-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.15tmacOS 10.12+ x86-64

pyproject_fmt-2.29.4-cp314-cp314t-win_arm64.whl (1.4 MB view details)

Uploaded CPython 3.14tWindows ARM64

pyproject_fmt-2.29.4-cp314-cp314t-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.14tWindows x86-64

pyproject_fmt-2.29.4-cp314-cp314t-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

pyproject_fmt-2.29.4-cp314-cp314t-musllinux_1_2_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

pyproject_fmt-2.29.4-cp314-cp314t-manylinux_2_28_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64

pyproject_fmt-2.29.4-cp314-cp314t-manylinux_2_28_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

pyproject_fmt-2.29.4-cp314-cp314t-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

pyproject_fmt-2.29.4-cp314-cp314t-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.14tmacOS 10.12+ x86-64

pyproject_fmt-2.29.4-cp310-abi3-win_arm64.whl (1.4 MB view details)

Uploaded CPython 3.10+Windows ARM64

pyproject_fmt-2.29.4-cp310-abi3-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.10+Windows x86-64

pyproject_fmt-2.29.4-cp310-abi3-musllinux_1_2_x86_64.whl (1.8 MB view details)

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

pyproject_fmt-2.29.4-cp310-abi3-musllinux_1_2_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

pyproject_fmt-2.29.4-cp310-abi3-manylinux_2_31_riscv64.whl (1.5 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.31+ riscv64

pyproject_fmt-2.29.4-cp310-abi3-manylinux_2_28_x86_64.whl (1.6 MB view details)

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

pyproject_fmt-2.29.4-cp310-abi3-manylinux_2_28_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

pyproject_fmt-2.29.4-cp310-abi3-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

pyproject_fmt-2.29.4-cp310-abi3-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: pyproject_fmt-2.29.4.tar.gz
  • Upload date:
  • Size: 332.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pyproject_fmt-2.29.4.tar.gz
Algorithm Hash digest
SHA256 fc1fdd0f5ab1b07ac6a4f4e0f30444a2d7c8f2965d2e574641d0bebc784f01b0
MD5 b8472f1d58467f55fcad477b6de8f7ad
BLAKE2b-256 5801ac301838464607ef6a414949e7940f9a1f866a43c753a763e9eb18a5b335

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4.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.29.4-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ea06f185f15bd0b4e05fee684487edbe7a4783a532e8557e7502659f39da0500
MD5 948a1ba43efbe0e031a8900db363a118
BLAKE2b-256 8325c08ccbc8481d79bb013598ad5923bccab08a7935713927869c0a2f434b36

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 aae661da590baa96fadb89b70b99d5fd2b97e016a34e086776b9c585fbe8931a
MD5 5443817c9832bffd79662dd1a348d961
BLAKE2b-256 b0851456e9373e375640f54254650846b3b4ef93891cc6aa7b65c049f4414f57

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3e548a3b2ecd5b1bd9268d02ca683e4bb08f36c1cceb66570bb297f3627d08e5
MD5 914b668884fe354e4b2bcbde0339ce0b
BLAKE2b-256 1840d5516e0d8a439e126cd79e69de0c7552e9dd4eb7947b5ba991d6f95fe3f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp315-cp315t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp315-cp315t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c063790aefb03915e31278c778a38eca44e180fba1033419042521a78c11db44
MD5 7945806ca7198b3eb376d763cb8f30b5
BLAKE2b-256 db4b557b33d6c88ee0c4a0af0d9c4c98b88dfe4b0a853821b6e429c8a49dac82

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp315-cp315t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp315-cp315t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c5c9725288af68b69606049187d8d690b8aba2a9c4b22789194f4b30a9088cd7
MD5 d96b90674b9be0fbab540396e5e83bc5
BLAKE2b-256 7ba2423a73af13c9bb89bf2e3fd822f05859e0eeb50e2c368abef6dc0aae3168

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp315-cp315t-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp315-cp315t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 80388257659128ec1fb2c009888a5e8eadfc5752a9928556403d845f1b3300a4
MD5 4939a56346a6f85ebc85809b6652b354
BLAKE2b-256 09524c7e1d3ddecc9085476bb3b4f7ce261de92b0c7fbffa072a455d3e108121

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp315-cp315t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp315-cp315t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ec280753b1570aef3c09271d0efcca4572e69add6539d901ba177b70bf4de50a
MD5 004c12a2899474b91cd9f7e794475a44
BLAKE2b-256 a814e196c507cf1fe3bc94371d0cd4f84a9c33625e97c5fdb3171df90bd4d602

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp315-cp315t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp315-cp315t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 18287209d411f87ec71ed140daeb404a8394f5b0541ff707a7bae3a203b5cbbd
MD5 62887c15706acc67cb339ca46ce300e6
BLAKE2b-256 91da7f205284a7d2c7c71371fe75dd82cd9382628d36330b6ce358e106b50a70

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp315-cp315t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp315-cp315t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c3a65e841c98fdea5d43426c6db8e88eb64beed2b7e65a42ee3d549e7233f2a5
MD5 803371917173c8644f2733ca64d300a3
BLAKE2b-256 0ab16cf40a1a2045e8e1692710c0bc44315dc2f25304e7885dc3034625f76a3f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp314-cp314t-win_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 5070604822169cdfda5d406c4b3e5cc0b3821ba6b0185e1fee0d1b86121160b1
MD5 fc29c6371c1b8f317221693034031978
BLAKE2b-256 579eafcbcd813b2ca045ddb5420708f26026a1f5480449f844e3957582fccdf9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 304f357ba20f5b9e0fd4e77b8db9f9d1421649d78a2964763572def6c6a9872f
MD5 f8be586cc0430250b1e68937de8d374d
BLAKE2b-256 3a20187fb90100bf219013a4d7dd0d508f5f9c99bde368a92422ce41e8797f4f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8f822f35fb4c980e148aa64c5e3369538bd4e0086400feac4a0e3a3428a48430
MD5 540dd72ad7696ae4a230308b08308831
BLAKE2b-256 77f08d2cd47ea53bbdd5f5091711aa2bc662bb8bd15822079f6172c70c1f4d72

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 1970762b064f31c3985ac52ce9e7f7a90d797af3d18739250ca5fa58ce5ea942
MD5 781950ba37636ac0e50b2b748305f724
BLAKE2b-256 2caaf40fa48106e451f12de7dcc5404c076b70771f5a94dfe8448ab69b104d16

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp314-cp314t-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp314-cp314t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dcc596b510cacaed72963a22f2bd7c5ddc3fd4feec9211016bed2bd633193d96
MD5 fd36882a8d19212bdff06d39cc98ff23
BLAKE2b-256 2895abcd5755bd8e46ca02ce3393cfe7d6a97242384c32820822865f769db2e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp314-cp314t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0e1fabea9562083bd41324399ae2d80763adbad007f21a880adaef0ae91d8401
MD5 2346c3219883e99a96074ffc598bb864
BLAKE2b-256 a697649d4a8b43cde3a8b8469ffc8802420e55eb08fe8a8ef8b3faa86f8c860b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b668916c47cce2dbbaaf50d3b95bcc119f225984ec2a8cb94d85f4c733f0b81e
MD5 6b904c4c99433bdc390784f6f2cf4902
BLAKE2b-256 180adebb3a091c7fc44e7bd7fc95a9bd22a0bd905fcaf15ff9611b6ff5a47589

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp314-cp314t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3874a2dcc82beb64dac2e5900968650c89857b2c6c683c1df66e544275616731
MD5 d7dcfd80ef07082f769b523ffa41318f
BLAKE2b-256 85061103e9fd198a5cd71638a15591678434ce1f933c0c011f5abe87ea279b28

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp310-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 b437a9847535a0f03fb6d349065a52a430f7d434b1670fee4e6737c6b0f0a5da
MD5 6b2fae43661a9b9cff3afb21f2d9c629
BLAKE2b-256 235e2e2c94c989ac16b3a8c7e8be3d9e170a8ce64f94ad631ac512d027f9aab7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c81474cb4f79632423d35854f8cc4ba049bab8744ac189468880c6129c8f90ed
MD5 2b6ebe3269c07d1285c618b59c321e5a
BLAKE2b-256 85161bc300c1aa050c9c428156b21dea236ccfb77ed9161151c933c2667bfb0d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 68d662416eb24010868800dad52f96541290b2f35799aaef5b578500814b39ae
MD5 25b34627a1b70938f3f4926b401750c1
BLAKE2b-256 2e1922fd8336f067f429b02773d1778284c191adba70e150c5cce215960b2ae5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 621a79b26962b94c75ecc1c6b2eb98276959dfdf17803aa59a00d2f0aa5406f4
MD5 88adcdddf458e9a5a4acf9f0f6f7203f
BLAKE2b-256 f6610fd59f2fc2763cff778bc99ac7454df0b737ca55b971cc61bebeeeebc7c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp310-abi3-manylinux_2_31_riscv64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp310-abi3-manylinux_2_31_riscv64.whl
Algorithm Hash digest
SHA256 1fdd26d600570ca6ae32ff6eee51fefafe38fd78456585bc64e3050fbb8fd80d
MD5 783f95a4f0025cb0dbd3d6acb626a623
BLAKE2b-256 5808e0e55c206ce0ac5e77412963d02e6c97b5a6edf4d8ceac97fd8242740af2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fc6b0c0df25cc62b634d71f1e89a0d4b5342492a67503fe149840bd567a07303
MD5 dd63d72331fe8df35492fad79d82f262
BLAKE2b-256 e21cd603168c4c1c01b60fb99d269b5266d009f8063eedd7470b44a9ca17ef73

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 611dadfcf00cdf6e06a2ddeb3dfa9c558b38640af7df42fcb3bb2b70cd05456a
MD5 d29c3ff7f5dbf36fa2efcad3323098df
BLAKE2b-256 ac593f7ada51cfda8a4f396266c8f84230a1345aa69ede915e55af2387c003b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ab36181065739978b1b499d588d8a162e07e411469a5cdae9a99bfdeb7cfe589
MD5 3351c131d1f3b666f6578f3bd41a6657
BLAKE2b-256 eafae40653418445639d09cbb6e784c0a19a9f7e78b4f486adf7198385fb71fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.29.4-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.29.4-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c285ab2e7b759306391a9aefeb809f42355419eaea6cb3b513dc7b3c6292dfd3
MD5 669c5dcf921e4fbe43047178ac7bd712
BLAKE2b-256 48bc4e975cf7130a8e7a34f3a95becd9aaa42764edb07a27af60d831359caa8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.29.4-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.

Release history Release notifications | RSS feed

This release

2.29.4 This release

27 files

2.29.3

27 files

2.29.2

27 files

2.29.1

27 files

2.29.0

27 files

2.28.2

27 files

2.28.1

27 files

2.28.0

27 files

2.27.1

27 files

2.27.0

27 files

2.26.0

27 files

2.25.4

27 files

2.25.3

27 files

2.25.2

27 files

2.25.1

27 files

2.25.0

27 files

2.24.1

27 files

2.24.0

35 files

2.23.0

35 files

2.22.0

35 files

2.21.2

28 files

2.21.1

11 files

2.21.0

11 files

2.20.0

11 files

2.19.0

11 files

2.18.1

11 files

2.18.0

11 files

2.17.0

11 files

2.16.2

11 files

2.16.1

11 files

2.16.0

11 files

2.15.3

11 files

2.15.2

11 files

2.15.1

11 files

2.15.0

11 files

2.14.2

11 files

2.14.1

11 files

2.14.0

11 files

2.13.0

11 files

2.12.1

11 files

2.12.0

11 files

2.11.1

23 files

2.11.0

16 files

2.10.0

16 files

2.9.0

16 files

2.8.0

19 files

2.7.0

19 files

2.6.0

19 files

2.5.1

22 files

2.5.0

22 files

2.4.3

22 files

2.4.2

22 files

2.4.1

22 files

2.4.0

22 files

2.3.1

2 files

2.3.0

2 files

2.2.4

2 files

2.2.3

2 files

2.2.2

2 files

2.2.1

2 files

2.2.0

2 files

2.1.4

2 files

2.1.3

2 files

2.1.2

2 files

2.1.1

2 files

2.1.0

2 files

2.0.4

2 files

2.0.3

2 files

2.0.2

2 files

2.0.1

2 files

2.0.0

2 files

1.8.0

2 files

1.7.0

2 files

1.6.0

2 files

1.5.3

2 files

1.5.2

2 files

1.5.1

2 files

1.5.0

2 files

1.4.1

2 files

1.4.0

2 files

1.3.0

2 files

1.2.0

2 files

1.1.0

2 files

1.0.0

2 files

0.13.1

2 files

0.13.0

2 files

0.12.1

2 files

0.12.0

2 files

0.11.2

2 files

0.11.1

2 files

0.11.0

2 files

0.10.0

2 files

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.8.0

2 files

0.7.0

2 files

0.6.0

2 files

0.5.0

2 files

0.4.1

2 files

0.4.0

2 files

0.3.5

2 files

0.3.4

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page