Highlights
Introduces the 2026 stable style (#4892), stabilizing the following changes:
always_one_newline_after_import: Always force one blank line after import
statements, except when the line after the import is a comment or an import statement
(#4489)fix_fmt_skip_in_one_liners: Fix# fmt: skipbehavior on one-liner declarations,
such asdef foo(): return "mock" # fmt: skip, where previously the declaration would
have been incorrectly collapsed (#4800)fix_module_docstring_detection: Fix module docstrings being treated as normal
strings if preceded by comments (#4764)fix_type_expansion_split: Fix type expansions split in generic functions (#4777)multiline_string_handling: Make expressions involving multiline strings more compact
(#1879)normalize_cr_newlines: Add\rstyle newlines to the potential newlines to
normalize file newlines both from and to (#4710)remove_parens_around_except_types: Remove parentheses around multiple exception
types inexceptandexcept*withoutas(#4720)remove_parens_from_assignment_lhs: Remove unnecessary parentheses from the left-hand
side of assignments while preserving magic trailing commas and intentional multiline
formatting (#4865)standardize_type_comments: Format type comments which have zero or more spaces
between#andtype:or betweentype:and value to# type: (value)(#4645)
The following change was not in any previous stable release:
- Regenerated the
_width_table.pyand added tests for the Khmer language (#4253)
This release alo bumps pathspec to v1 and fixes inconsistencies with Git's
.gitignore logic (#4958). Now, files will be ignored if a pattern matches them, even
if the parent directory is directly unignored. For example, Black would previously
format exclude/not_this/foo.py with this .gitignore:
exclude/
!exclude/not_this/
Now, exclude/not_this/foo.py will remain ignored. To ensure exclude/not_this/ and
all of it's children are included in formatting (and in Git), use this .gitignore:
*/exclude/*
!*/exclude/not_this/
This new behavior matches Git. The leading */ are only necessary if you wish to ignore
matching subdirectories (like the previous behavior did), and not just matching root
directories.
Output
- Explicitly shutdown the multiprocessing manager when run in diff mode too (#4952)
Integrations
- Upgraded PyPI upload workflow to use Trusted Publishing (#4611)