<!-- Include any especially major or disruptive changes here -->
+- Runtime support for Python 3.7 has been removed. Formatting 3.7 code will still be
+ supported until further notice (#3765)
+
### Stable style
<!-- Changes that affect Black's stable style -->
-- Import lines with `# fmt: skip` and `# fmt: off` no longer have an extra blank line
- added when they are right after another import line (#3610)
+- Fix a bug where an illegal trailing comma was added to return type annotations using
+ PEP 604 unions (#3735)
+- Fix several bugs and crashes where comments in stub files were removed or mishandled
+ under some circumstances. (#3745)
+- Fix a bug where multi-line open parenthesis magic comment like `type: ignore` were not
+ correctly parsed (#3740)
+- Fix error in AST validation when Black removes trailing whitespace in a type comment
+ (#3773)
### Preview style
<!-- Changes that affect Black's preview style -->
-- Add trailing commas to collection literals even if there's a comment after the last
- entry (#3393)
-- `async def`, `async for`, and `async with` statements are now formatted consistently
- compared to their non-async version. (#3609)
-- `with` statements that contain two context managers will be consistently wrapped in
- parentheses (#3589)
+- Implicitly concatenated strings used as function args are no longer wrapped inside
+ parentheses (#3640)
+- Remove blank lines between a class definition and its docstring (#3692)
### Configuration
<!-- Changes to how Black can be configured -->
+- The `--workers` argument to Black can now be specified via the `BLACK_NUM_WORKERS`
+ environment variable (#3743)
+- `.pytest_cache`, `.ruff_cache` and `.vscode` are now excluded by default (#3691)
+- Fix black not honouring `pyproject.toml` settings when running `--stdin-filename` and
+ the `pyproject.toml` found isn't in the current working directory (#3719)
+- Black will now error if `exclude` and `extend-exclude` have invalid data types in
+ `pyproject.toml`, instead of silently doing the wrong thing (#3764)
+
### Packaging
<!-- Changes to how Black is packaged, such as dependency requirements -->
+- Upgrade mypyc from 0.991 to 1.3 (#3697)
+- Remove patching of Click that mitigated errors on Python 3.6 with `LANG=C` (#3768)
+
### Parser
<!-- Changes to the parser or to version autodetection -->
+- Add support for the new PEP 695 syntax in Python 3.12 (#3703)
+
### Performance
<!-- Changes that improve Black's performance. -->
+- Speed up _Black_ significantly when the cache is full (#3751)
+- Avoid importing `IPython` in a case where we wouldn't need it (#3748)
+
### Output
<!-- Changes to Black's terminal output and error messages -->
+- Use aware UTC datetimes internally, avoids deprecation warning on Python 3.12 (#3728)
+- Change verbose logging to exactly mirror _Black_'s logic for source discovery (#3749)
+
### _Blackd_
<!-- Changes to blackd -->
+- The `blackd` argument parser now shows the default values for options in their help
+ text (#3712)
+
### Integrations
<!-- For example, Docker, GitHub Actions, pre-commit, editors -->
+- Black is now tested with
+ [`PYTHONWARNDEFAULTENCODING = 1`](https://docs.python.org/3/library/io.html#io-encoding-warning)
+ (#3763)
+- Update GitHub Action to display black output in the job summary (#3688)
+- Deprecated `set-output` command in CI test to keep up to date with GitHub's
+ deprecation announcement (#3757)
+
### Documentation
+- Add a CITATION.cff file to the root of the repository, containing metadata on how to
+ cite this software (#3723)
+
<!-- Major changes to documentation and policies. Small docs changes
don't need a changelog entry. -->
+- Updated the _classes_ and _exceptions_ documentation in Developer reference to match
+ the latest ccode base. (#3755)
+
+## 23.3.0
+
+### Highlights
+
+This release fixes a longstanding confusing behavior in Black's GitHub action, where the
+version of the action did not determine the version of Black being run (issue #3382). In
+addition, there is a small bug fix around imports and a number of improvements to the
+preview style.
+
+Please try out the
+[preview style](https://black.readthedocs.io/en/stable/the_black_code_style/future_style.html#preview-style)
+with `black --preview` and tell us your feedback. All changes in the preview style are
+expected to become part of Black's stable style in January 2024.
+
+### Stable style
+
+- Import lines with `# fmt: skip` and `# fmt: off` no longer have an extra blank line
+ added when they are right after another import line (#3610)
+
+### Preview style
+
+- Add trailing commas to collection literals even if there's a comment after the last
+ entry (#3393)
+- `async def`, `async for`, and `async with` statements are now formatted consistently
+ compared to their non-async version. (#3609)
+- `with` statements that contain two context managers will be consistently wrapped in
+ parentheses (#3589)
+- Let string splitters respect [East Asian Width](https://www.unicode.org/reports/tr11/)
+ (#3445)
+- Now long string literals can be split after East Asian commas and periods (`、` U+3001
+ IDEOGRAPHIC COMMA, `。` U+3002 IDEOGRAPHIC FULL STOP, & `,` U+FF0C FULLWIDTH COMMA)
+ besides before spaces (#3445)
+- For stubs, enforce one blank line after a nested class with a body other than just
+ `...` (#3564)
+- Improve handling of multiline strings by changing line split behavior (#1879)
+
+### Parser
+
+- Added support for formatting files with invalid type comments (#3594)
+
+### Integrations
+
+- Update GitHub Action to use the version of Black equivalent to action's version if
+ version input is not specified (#3543)
+- Fix missing Python binary path in autoload script for vim (#3508)
+
+### Documentation
+
- Document that only the most recent release is supported for security issues;
vulnerabilities should be reported through Tidelift (#3612)
code. Implicitly concatenated f-strings with different quotes can now be merged or
quote-normalized by changing the quotes used in expressions. (#3509)
- Fix crash on `await (yield)` when Black is compiled with mypyc (#3533)
-- Improve handling of multiline strings by changing line split behavior (#1879)
### Configuration