Pyvider 0.8 gives provider authors a way to say “this configuration is valid, but you may want to look at it again” without turning that advice into a validation error. The framework supplies the mechanism; the rules themselves, and their identifiers, belong to the provider packages that write them.
Which version to install
Use Pyvider 0.8.1 or later.
Pyvider v0.8.0 was tagged on September 22, 2026, but it was never published to PyPI. Its publication guard stopped the release before any TestPyPI or PyPI upload: the release runner forces colored logs, and that color leaked into the machine-readable uv export --format pylock.toml stream consumed by the namespace-upgrade proof, which correctly refused to parse it.
Pyvider v0.8.1, published later the same day, changes that proof to run uv --no-color export and carries the complete 0.8 feature set described below. Everything on this page applies to 0.8.1.
Added
- Provider-authored configuration linting. The public
LintFinding,LintSelector, andLintContexttypes support an optional asynchronouslint()hook on all seven configurable framework surfaces: provider, resource, data source, ephemeral resource, list resource, action, and state store. A hook inspects decoded configuration and returns immutable findings, each with a rule ID, groups, a summary, detail, and an optional top-level attribute path. - Explicit, default-off selection. Nothing runs unless a project selects it. Projects opt in through
[lint].rules, and thePYVIDER_LINTenvironment variable overrides that list for a single process. Selectors can name an exact rule, a provider-owned group, orall, and each form can be paired with an exclusion. An explicitly emptyPYVIDER_LINToverrides the project file and disables linting for that process.
Behavior
- Linting is fail-open. A hook that raises becomes a compatibility warning rather than blocking validation, so a faulty rule cannot stop a plan.
- Findings point at the configuration. When a finding names a top-level attribute, its warning is attached to that attribute.
Compatibility boundary
tfprotov6 has no provider-lint message, so selected findings travel as ordinary validation warnings through the validation RPCs Terraform and OpenTofu already call. OpenTofu v1.13.0-beta1 exposes its own built-in linting through a separate beta path, which is not stable protocol behavior in a stable OpenTofu release. Pyvider 0.8 does not claim a dedicated provider-lint protocol.
Upgrading from 0.7
The shared pyvider package root now has a single owner. pyvider-cty 0.6.2 and pyvider-rpcplugin 0.5.5 contribute their own subpackages without claiming pyvider/__init__.py or pyvider/py.typed, and Pyvider owns both root files.
If an environment already contains Pyvider 0.7.0, pyvider-cty 0.6.1, or pyvider-rpcplugin 0.5.4, upgrade all three packages in the same operation. Installers remove files recorded by the older dependency wheels before installing their replacements, so upgrading only the dependencies needs a one-time fix: reinstall Pyvider afterward. Fresh installs and coordinated upgrades restore the package root automatically.
Changed
- The minimum
provide-foundationversion is now0.4.10, which carries stream fixes exercised by the Windows test run: logging follows the currentsys.stderr, and UTF-8 output is written through the destination’s byte layer. - The
devanddocsdependency groups now requireprovide-testkit>=0.5.2. These are contributor-facing groups and do not affect providers that install Pyvider at runtime. - Release supply-chain checks are stricter. Publishing verifies the lint API in the built wheel and again in isolated TestPyPI and PyPI installs, signs every release asset, refuses an incomplete asset set, and repairs a release only from digest-verified bytes fetched from PyPI.
Learn more
- Part 7 — Add Provider Linting builds a rule with TDD, packages the provider, and runs it.
- The provider linting guide in the Pyvider API documentation covers writing unknown-safe rules, selection, warning transport, and the compatibility boundary.
For the complete canonical record, see the Pyvider v0.8.1 release.