# Black 25.1.0 - Product: Black (https://whatsnew.fyi/product/black) - Vendor: Python Software Foundation - Date: 2025-01-29 - Version: 25.1.0 - Original notes: https://github.com/psf/black/releases/tag/25.1.0 - Permalink: https://whatsnew.fyi/product/black/releases/25.1.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **changed** — Normalize casing of Unicode escape characters in strings to lowercase - **fixed** — Fix inconsistencies in whether certain strings are detected as docstrings - **changed** — Consistently add trailing commas to typed function parameters - **changed** — Remove redundant parentheses in if guards for case blocks - **changed** — Add parentheses to if clauses in case blocks when the line is too long - **changed** — Whitespace before # fmt: skip comments is no longer normalized - **fixed** — Fix line length computation for certain expressions that involve the power operator - **fixed** — Check if there is a newline before the terminating quotes of a docstring - **fixed** — Fix type annotation spacing between * and more complex type variable tuple - **changed** — Remove parentheses around sole list items - **changed** — Generic function definitions are now formatted more elegantly with parameters split over multiple lines first instead of type parameter definitions - **fixed** — Fix formatting cells in IPython notebooks with magic methods and starting or trailing empty lines - **fixed** — Fix crash when formatting with statements containing tuple generators or unpacking - **fixed** — Fix string merging changing f-string quotes on f-strings with internal quotes - **changed** — Collapse multiple empty lines after an import into one - **fixed** — Prevent string_processing and wrap_long_dict_values_in_parens from removing parentheses around long dictionary values - **changed** — Move wrap_long_dict_values_in_parens from the unstable to preview style - **changed** — Store license identifier inside the License-Expression metadata field - **changed** — Speed up the is_fstring_start function in Black's tokenizer - **changed** — If using stdin with --stdin-filename set to a force excluded path, stdin won't be formatted ###### Highlights This release introduces the new 2025 stable style (#4558), stabilizing the following changes: - Normalize casing of Unicode escape characters in strings to lowercase (#2916) - Fix inconsistencies in whether certain strings are detected as docstrings (#4095) - Consistently add trailing commas to typed function parameters (#4164) - Remove redundant parentheses in if guards for case blocks (#4214) - Add parentheses to if clauses in case blocks when the line is too long (#4269) - Whitespace before `# fmt: skip` comments is no longer normalized (#4146) - Fix line length computation for certain expressions that involve the power operator (#4154) - Check if there is a newline before the terminating quotes of a docstring (#4185) - Fix type annotation spacing between `*` and more complex type variable tuple (#4440) The following changes were not in any previous release: - Remove parentheses around sole list items (#4312) - Generic function definitions are now formatted more elegantly: parameters are split over multiple lines first instead of type parameter definitions (#4553) ###### Stable style - Fix formatting cells in IPython notebooks with magic methods and starting or trailing empty lines (#4484) - Fix crash when formatting `with` statements containing tuple generators/unpacking (#4538) ###### Preview style - Fix/remove string merging changing f-string quotes on f-strings with internal quotes (#4498) - Collapse multiple empty lines after an import into one (#4489) - Prevent `string_processing` and `wrap_long_dict_values_in_parens` from removing parentheses around long dictionary values (#4377) - Move `wrap_long_dict_values_in_parens` from the unstable to preview style (#4561) ###### Packaging - Store license identifier inside the `License-Expression` metadata field, see [PEP 639](https://peps.python.org/pep-0639/). (#4479) ###### Performance - Speed up the `is_fstring_start` function in Black's tokenizer (#4541) ###### Integrations - If using stdin with `--stdin-filename` set to a force excluded path, stdin won't be formatted. (#4539)