pluggy
plugin and hook calling mechanisms for python
Decision gist · record as of 2026-08-14
Yes. Pluggy is production-ready, permissively licensed, has zero dependencies, and is the proven plugin infrastructure behind pytest and other major projects. Install it if you're building an extensible application or framework. The aging maintenance status reflects stability rather than abandonment—it's a mature, complete tool that doesn't need frequent updates.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Low friction to install.
- Maintenance status is aging—last release was 456 days ago—but the package is mature and widely used as the core plugin system for pytest, tox, and devpi, suggesting stability over active development.
License · maintenance · safety
MIT (permissive) — MIT license (permissive) means you can use, modify, and distribute pluggy with minimal restrictions, making it safe for both open-source and commercial projects.
last release 2025-05-15 (456 days)
0 known vulnerabilities (OSV.dev, 2026-08-14) · 1,280,274,438 downloads/mo, #13 on PyPI
Alternatives
Verify before relying
import pluggy
hookspec = pluggy.HookspecMarker("myproject")
hookimpl = pluggy.HookimplMarker("myproject")
class MySpec:
@hookspec
def myhook(self, arg1, arg2):
pass
class Plugin_1:
@hookimpl
def myhook(self, arg1, arg2):
return arg1 + arg2
pm = pluggy.PluginManager("myproject")
pm.add_hookspecs(MySpec)
pm.register(Plugin_1())
results = pm.hook.myhook(arg1=1, arg2=2)- Whether the aging maintenance status (456 days since last release) affects long-term compatibility with future Python versions beyond 3.13
What it is and what it does
Pluggy is a minimalist plugin system that decouples hook specifications from their implementations. You define a hook specification as a class with decorated methods, then register plugin classes that implement those hooks. When you call a hook through the plugin manager, all registered implementations run in sequence and return their results. It's the core framework powering pytest, tox, and devpi—production-tested infrastructure for building extensible applications where behavior can be customized without modifying core code.
The package has no runtime dependencies, installs easily, and supports Python 3.9 and later on CPython and PyPy. It's classified as mature and is ranked in the top 100 most-downloaded PyPI packages, reflecting its role as foundational infrastructure rather than a user-facing tool.
Use it for
- Build a test framework or tool that lets users extend behavior through plugins without modifying the core codebase
- Create a command-line application where different commands or features can be registered as plugins at runtime
- Implement a data processing pipeline where stages are pluggable and can be added or replaced dynamically
- Design a linting or code-analysis tool where rules or checkers are registered as independent plugins
- Build an application server where middleware or request handlers are registered as hooks
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes.
Pluggy is production-ready, permissively licensed, has zero dependencies, and is the proven plugin infrastructure behind pytest and other major projects. Install it if you're building an extensible application or framework. The aging maintenance status reflects stability rather than abandonment—it's a mature, complete tool that doesn't need frequent updates.
Install
pluggy on PyPI
Before you install
Low friction to install. Maintenance status is aging—last release was 456 days ago—but the package is mature and widely used as the core plugin system for pytest, tox, and devpi, suggesting stability over active development.
License in practice
MIT license (permissive) means you can use, modify, and distribute pluggy with minimal restrictions, making it safe for both open-source and commercial projects.
Quickstart
import pluggy
hookspec = pluggy.HookspecMarker("myproject")
hookimpl = pluggy.HookimplMarker("myproject")
class MySpec:
@hookspec
def myhook(self, arg1, arg2):
pass
class Plugin_1:
@hookimpl
def myhook(self, arg1, arg2):
return arg1 + arg2
pm = pluggy.PluginManager("myproject")
pm.add_hookspecs(MySpec)
pm.register(Plugin_1())
results = pm.hook.myhook(arg1=1, arg2=2)
Verify before relying
- Whether the aging maintenance status (456 days since last release) affects long-term compatibility with future Python versions beyond 3.13
Package facts
| License | MIT permissive |
| Python support | Supports the current Python release >=3.9 |
| Install friction | Low. Pure-Python wheel |
| Runtime dependencies | None |
| Maintenance | Aging 456 days since the last release |
| First released | |
| Downloads | 1,280,274,438 / month, #13 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
| Classifiers | Development Status :: 6 - MatureIntended Audience :: DevelopersLicense :: OSI Approved :: MIT LicenseOperating System :: MacOS :: MacOS XOperating System :: Microsoft :: WindowsOperating System :: POSIXProgramming Language :: Python :: 3Programming Language :: Python :: 3 :: OnlyProgramming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.13Programming Language :: Python :: 3.9Programming Language :: Python :: Implementation :: CPythonProgramming Language :: Python :: Implementation :: PyPyTopic :: Software Development :: LibrariesTopic :: Software Development :: TestingTopic :: Utilities |
Evidence: pluggy-1.6.0-py3-none-any.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “hook specification and implementation”
- pluggyPluggy provides a plugin system that lets you define hook…
- conventional-pre-commitA pre-commit hook that validates git commit messages against…
- somacoreProvides the Python reference implementation of the SOMA…
Give your agent the search over MCP, or paste the wish link into any chat.
More Libraries packages
urllib3 is an HTTP client library that provides thread-safe connection pooling, SSL/TLS verification, multipart file uploads, request retries, compression support, and proxy handling for Python applications.
Requests is a Python HTTP library that simplifies sending HTTP/1.1 requests with automatic handling of headers, authentication, cookies, and response parsing.
Provides parsing, arithmetic, and recurrence rule computation for dates and times, with timezone support and iCalendar RFC compliance.
Install it if you need to parse flexible date strings, compute relative dates, handle timezones, or work with recurrence rules—it's the de facto choice for these tasks.
Six provides utility functions to write Python code that runs on both Python 2.7 and Python 3.3+, smoothing over language differences between the two versions.
pytest is a testing framework that lets you write test functions using plain assert statements and automatically discovers and runs them, with detailed failure reporting.
iniconfig parses INI configuration files while preserving section and entry order, supporting multi-line values, comments, and raising errors with line numbers.
See also napari-plugin-engine · spaceforge · pluginbase · pytest-logging · pytest-django · pytest-lazy-fixture · pytest-lazy-fixtures · interface-meta · robotcode-plugin