Releases: scikit-build/dynamic-metadata
Releases · scikit-build/dynamic-metadata
Release list
Version 0.5.0
Feature release adding four new bundled plugins and the backend collection loops.
✨ Features
astplugin (#81) — read a module-level global by name from a Python file viaast.literal_eval, without importing it. Values keep their Python shape, so list/table fields can be filled directly (not just strings).pin_installedplugin (#80) — pindependenciesto build-environment versions using templates like"torch==x.x.*"(x= installed release component,x+N, trailing*). Implementsdynamic_wheel(dependencies are Dynamic in the SDist) andget_requires_for_dynamic_metadata(the bare package names).from_fileplugin (#82) — fill a field from a file: stripped contents for a string field, requirements.txt-style lines for a list field, or a dotted key (optional-dependencies.test) for a table field, one entry per key. pip option lines (-r, …) are a hard error.- Backend collection loops in the loader (#78) —
loader.pynow providesget_requires_for_dynamic_metadata(entries)anddynamic_wheel_fields(entries), so backends get the METADATA 2.2 dynamic set and extra build requirements from one place. Both load providers fresh, keepingdynamic_wheelstateless.
📚 Docs
- Add a scikit-build-core migration guide (#79).
Full Changelog: v0.4.0...v0.5.0
Version 0.4.0
First feature release since the reference implementation landed. Development status is still Alpha — the protocol is still subject to change.
⚠️ Breaking changes
- Providers are discovered via entry points (#74).
providernow takes one of two shapes: a name registered in thedynamic_metadata.providerentry-point group (bundled plugins usedynamic_metadata.-prefixed names), or an inline{ path, module }table for a local in-project plugin. This replaces the old import-path +provider-pathscheme — there is no bare-import fallback, and a name registered by two distributions is a hard error. Unknown names raise with a "did you mean …?" suggestion.
✨ Features
dynamic-metadata showCLI (#69) — preview the resolved[project]table as JSON, mirroring scikit-build-core'sbuild project-table. Also runs aspython -m dynamic_metadata;--pyproject-tomland--stateselect the input file and build state.fragmentandsubstituteplugins (#71) — build areadme(or other text field) from pieces, the hatch-fancy-pypi-readme feature set expressed as one ordered entry per fragment.readme_fragmentappends literal or file-sliced fragments;substituterunsre.subover a scalar field produced by an earlier entry.staticplugin (#72) — return settings verbatim as a[project]fragment, for feeding a transform pipeline a dynamic value or hiding metadata from tools that read[project]directly.- Opt-in
formatsetting onsubstitute(#73) — letsreplacementreference other fields via{project[...]}, gated behind aformatboolean so existing replacements with literal braces are unaffected.
🧹 Refactors
- Move the plugin protocols into a leaf
protocols.pysoloader.pystays focused on loading and resolution (#76).
📚 Docs
- Split the backend-authors page into "use the loader" vs "reimplement the loader" (#75); document custom plugins with the local provider form (#70); trim prose and modernize the loader examples (#77).
📦 Packaging & CI
- Update pre-commit hooks (#68).
Full Changelog: v0.3.0...v0.4.0
v0.3.0
First substantive release of the dynamic-metadata plugin spec and reference implementation. Development status is Alpha — the protocol is still subject to change.
⚠️ Breaking changes
- Plugins are now configured as an ordered list of providers (#59).
[tool.dynamic-metadata]is an ordered array of tables,[[tool.dynamic-metadata]], each with aprovider(moduleormodule:Class) and optionalprovider-path. Entries run in order, and a later entry can read an earlier one's results.
✨ Features
- Mix static and dynamic metadata (PEP 808) (#57) — fields can be partially static and extended dynamically; lists append, tables add keys (add-only).
- Build-state hook (#58) — providers can receive the current build state via the optional
build_statehook beforedynamic_metadataruns. get_requires_for_dynamic_metadatahook (#30) — providers can declare extra build-time requirements.
🐛 Fixes
- Load
provider-pathproviders via a meta-path finder (#56). - Reject unknown plugin settings and correct the provider protocol (#55).
- Add missing dict-of-str fields to the taxonomy (#37); pull in fixes from scikit-build-core (#39).
🧹 Refactors
- Simplify the
[project]field taxonomy (#61). - Remove the
setuptools_scmandfancy_pypi_readmewrapper plugins, leaving the bundledregexandtemplateplugins (#67).
📦 Packaging & CI
- Switch the build backend to
flit-coreand addcheck-sdist(#66). - Test and classify against Python 3.8–3.15, including 3.14 (#65, #40).
📚 Docs
- Split the README into per-audience Sphinx pages (users / plugin authors / backend authors) and expand the backend-authors guide (#62, #64); modernize the Read the Docs build (#63).
Full Changelog: v0.1.0...v0.3.0
Version 0.1.0
Full Changelog: https://github.com/scikit-build/dynamic-metadata/commits/v0.1.0