pluggy
plugin and hook calling mechanisms for python
Install
pluggy on PyPI
pip
pip install pluggyuv
uv add pluggypoetry
poetry add pluggyPackage facts
| License | MIT (permissive) |
| Python support | supports the current Python release (>=3.9) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | none |
| Maintenance | aging — 455 days since the last release |
| First released | |
| Popularity | one of the 100 most-downloaded packages on PyPI (30-day window, as of 2026-08-13) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-13) |
Evidence: pluggy-1.6.0-py3-none-any.whl
About pluggy
from the package's own PyPI description — quoted content, verbatim
==================================================== pluggy - A minimalist production ready plugin system ====================================================
|pypi| |conda-forge| |versions| |github-actions| |gitter| |black| |codecov|
This is the core framework used by the pytest, tox, and devpi_ projects.
Please read the docs_ to learn more!
A definitive example
.. code-block:: python
import pluggy
hookspec = pluggy.HookspecMarker("myproject")
hookimpl = pluggy.HookimplMarker("myproject")
class MySpec:
"""A hook specification namespace."""
@hookspec
def myhook(self, arg1, arg2):
"""My special little hook that you can customize."""
class Plugin_1:
"""A hook implementation namespace."""
@hookimpl
def myhook(self, arg1, arg2):
print("inside Plugin_1.myhook()")
return arg1 + arg2
class Plugin_2:
"""A 2nd hook implementation namespace."""
@hookimpl
def myhook(self, arg1, arg2):
print("inside Plugin_2.myhook()")
return arg1 - arg2
# create a manager and add the spec
pm =...
AI interpretation — verify before relying
AI-generated interpretation of the package facts above; every digit, version, license, or vulnerability id it cites is grounded in the facts already shown on this page
pluggy provides a minimalist plugin system framework that lets you define hook specifications and register plugin implementations to call them, used as the core framework for pytest, tox, and devpi.
Low install friction with no runtime dependencies; marked as aging (455 days since last release) but classified as Mature and widely used in production by pytest-dev projects.
MIT license (permissive) places no restrictions on use, modification, or distribution in proprietary or open-source contexts.
Usage
import pluggy
hookspec = pluggy.HookspecMarker("myproject")
hookimpl = pluggy.HookimplMarker("myproject")
class MySpec:
@hookspec
def myhook(self, arg1, arg2):
pass
pm = pluggy.PluginManager("myproject")
pm.add_hookspecs(MySpec)
pm.register(MySpec())
results = pm.hook.myhook(arg1=1, arg2=2)
Verdict: pluggy is a stable, zero-dependency plugin framework in the top 100 PyPI packages with no known vulnerabilities and permissive MIT licensing. Aging maintenance status (455 days since release) is typical for a mature, feature-complete library; its widespread adoption in pytest-dev projects provides confidence in production readiness.
Needs verification
- Whether the 455-day release gap reflects intentional stability maintenance or reduced active development
- Current test coverage and CI/CD status beyond the codecov badge mentioned in the description
Similar packages
permissive · top 1,000 on PyPI
pytestpermissive · top 100 on PyPI
postgrestpermissive · top 1,000 on PyPI
pytest-metadatacopyleft · top 1,000 on PyPI
pytest-djangopermissive · top 1,000 on PyPI
toxpermissive · top 1,000 on PyPI
pytest-htmlcopyleft · top 1,000 on PyPI
cataloguepermissive · top 1,000 on PyPI
pytest-covpermissive · top 1,000 on PyPI
oauthlibpermissive · top 1,000 on PyPI