# Changelog ## 0.10.0 (11-21-2025) This release adds support for [PEP 794](https://peps.python.org/pep-0794/) (METADATA 2.5), the new import-names(paces) fields. Support hasn't rolled out in other packages yet, but once it does, you can be ready for it with this release. As usual, nothing changes if you don't specify the new fields or the new METADATA version. Features: - Support `import-names(paces)` - Remove Python 3.7 support Fixes: - Minimum supported version of packaging corrected (now tested) Internal and CI: - Add PyPy 3.11 testing - Add Python 3.14 classifier - Use PEP 639 license - Use dependency groups - Enable branch coverage - Enabled most Ruff linting rules on codebase ## 0.9.1 (10-03-2024) This release fixes form feeds in License files using pre-PEP 639 syntax when using Python older than 3.12.4; this is a regression in 0.9.0 from moving to the standard library email module. Some other small fixes to validation messages were applied. Fixes: - Handle form feed for Python <3.12.4 - Some touchup based on packaging PR Docs: - Fix `packaging.licenses` example code Internal and CI: - Speed up CI a bit, add Python 3.14 alpha testing ## 0.9.0 (22-10-2024) This release adds PEP 639 support (METADATA 2.4), refactors the RFC messages, and adds a lot of validation (including warnings and opt-in errors), a way to produce all validation errors at once, and more. The beta releases are intended for backend authors to try out the changes before a final release. Features: - Added PEP 639 support for SPDX license and license files, METADATA 2.4 - Validate extra keys (warning, opt-in error) - Functions to check top level and build-system (including PEP 735 support) - Add TypedDict's in new module for typing pyproject.toml dicts - `all_errors=True` causes `ExceptionGroup`'s to be emitted - Support METADATA 2.1+ JSON format with new `.as_json()` method Fixes: - Match EmailMessage spacing - Handle multilines the way setuptools does with smart indentation - Warn on multiline Summary (`project.description`) - Improve locking for just metadata fields - Error on extra keys in author/maintainer - URL name stylization removed matching PEP 753 Refactoring: - Move fetcher methods - Put validation in method - Make `RFC822Message` compatible with and subclass of `EmailMessage` class with support for Unicode - Remove indirection accessing `metadata_version`, add `auto_metadata_version` - Rework how dynamic works, add `dynamic_metadata` - Use dataclass instead of named tuple - Use named arguments instead of positional - Spit up over multiple files - Remove `DataFetcher`, use static types wherever possible - Reformat single quotes to double quotes to match packaging - Produce standard Python repr style in error messages (keeping double quotes for key names) - Show the types instead of values in error messages Internal and CI: - Better changelog auto-generation - `macos-latest` now points at `macos-14` - Refactor and cleanup tests - Add human readable IDs to tests - Require 100% coverage Docs: - Include extra badge in readme - Rework docs, include README and more classes - Changelog is now in markdown - Better API section ## 0.8.1 (07-10-2024) - Validate project name - Validate entrypoint group names - Correct typing for emails - Add 3.13 to testing - Add ruff-format - Actions and dependabot - Generate GitHub attestations for releases - Add PyPI attestations - Fix coverage context ## 0.8.0 (17-04-2024) - Support specifying the `metadata_version` as 2.1, 2.2, or 2.3 - Always normalize extras following PEP 685 - Preserve the user-specified name style in the metadata. `.canonical_name` added to get the normalized name - Require "version" in the dynamic table if unset (following PEP 621) - Support extras using markers containing "or" - Support empty extras - Using `.as_rfc822()` no longer modifies the metadata object - Fix email-author listing for names containing commas - Separate core metadata keywords with commas, following the (modified) spec - An error message reported `project.license` instead of `project.readme` - Produce slightly cleaner tracebacks Fix a typo in an exception message - Subclasses now type check correctly - The build backend is now `flit-core` ## 0.7.1 (30-01-2023) - Relax `pypa/packaging` dependency ## 0.7.0 (18-01-2023) - Use UTF-8 when opening files - Use `tomllib` on Python \>= 3.11 ## 0.6.1 (07-07-2022) - Avoid first and last newlines in license contents ## 0.6.0 (06-07-2022) - Make license and readme files `pathlib.Path` instances - Add the license contents to the metadata file - Add support for multiline data in metadata fields ## 0.5.0 (09-06-2022) - Renamed project to `pyproject_metadata` - Support multiple clauses in requires-python - Error out when dynamic fields are defined - Update dynamic field when setting version ## 0.4.0 (30-09-2021) - Use Core Metadata 2.1 if possible - Fix bug preventing empty README and license files from being used ## 0.3.1 (25-09-2021) - Avoid core metadata `Author`/`Maintainer` fields in favor of `Author-Email`/`Maintainer-Email` ## 0.3.0.post2 (15-09-2021) - Fix Python version requirement ## 0.3.0.post1 (13-09-2021) - Add documentation ## 0.3.0 (13-09-2021) - Added `RFC822Message` - Refactor `StandardMetadata` as a dataclass - Added `StandardMetadata.write_to_rfc822` and `StandardMetadata.as_rfc822` ## 0.1.0 (25-08-2021) - Initial release