# Extension points — python-poetry/poetry

> Canonical page: https://codevetter.com/unpack/poetry/extension-points

# Extension points — python-poetry/poetry

Scanned commit d4fd21e4711ae948f04e18a1736d9ee85b590e87 (2026-09-27). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

Commands and plugins provide the clearest intentional extension surfaces. Repository construction, priority handling, and configuration normalization centralize additional integration choices. Build backend hooks and package-specific build constraints extend packaging behavior. Some interfaces expose mutable internal state, and plugin documentation explicitly warns that the public API is not stable.
- Built-in commands plug into COMMANDS and load_command: space-separated names map to dotted modules and title-cased Command classes, instantiated lazily. — [src/poetry/console/application.py#L43-L51](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/console/application.py#L43-L51) [src/poetry/console/application.py#L54-L102](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/console/application.py#L54-L102) [src/poetry/console/application.py#L142-L143](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/console/application.py#L142-L143)
- ApplicationPlugin uses the poetry.application.plugin entry-point group and registers command classes through command_loader.register_factory during activate. — [src/poetry/plugins/application_plugin.py#L13-L27](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/plugins/application_plugin.py#L13-L27)
- Generic plugins implement activate(poetry, io) and may manipulate project configuration and state; Factory loads and activates them after constructing the project repository pool. — [docs/plugins.md#L44-L56](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/docs/plugins.md#L44-L56) [src/poetry/factory.py#L133-L147](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/factory.py#L133-L147)
- PluginManager discovers importlib.metadata entry points, checks classes against Plugin/ApplicationPlugin, instantiates them, and dispatches activation arguments; --no-plugins gates application loading. — [src/poetry/plugins/plugin_manager.py#L75-L106](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/plugins/plugin_manager.py#L75-L106) [src/poetry/console/application.py#L630-L646](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/console/application.py#L630-L646)
- Project-required plugins use dependency syntax under tool.poetry.requires-plugins; ProjectPluginCache hashes the declaration with Python/Poetry versions and redirects purelib/platlib installation into .poetry/plugins. — [docs/plugins.md#L258-L275](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/docs/plugins.md#L258-L275) [src/poetry/plugins/plugin_manager.py#L109-L133](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/plugins/plugin_manager.py#L109-L133) [src/poetry/plugins/plugin_manager.py#L264-L296](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/plugins/plugin_manager.py#L264-L296)
- Factory.create_package_source selects PyPiRepository, LegacyRepository, or SinglePageRepository; RepositoryPool centralizes primary/supplemental/explicit priority and named-source lookup. — [src/poetry/factory.py#L205-L247](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/factory.py#L205-L247) [src/poetry/repositories/repository_pool.py#L24-L35](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/repositories/repository_pool.py#L24-L35) [src/poetry/repositories/repository_pool.py#L168-L178](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/repositories/repository_pool.py#L168-L178)
- Config.default_config and Config.get centralize settings and POETRY_* overrides, including package-specific installer.build-config-settings; new settings must account for normalization and nested lookup. — [src/poetry/config/config.py#L152-L190](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/config/config.py#L152-L190) [src/poetry/config/config.py#L320-L369](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/config/config.py#L320-L369) [src/poetry/config/config.py#L427-L430](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/config/config.py#L427-L430)
- BuildHandler selects BUILD_FORMATS or isolated backend builds; Factory converts per-package build constraints into dependency objects, and Chef passes constraints and config settings to wheel/editable builds. — [src/poetry/console/commands/build.py#L52-L79](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/console/commands/build.py#L52-L79) [src/poetry/factory.py#L81-L96](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/factory.py#L81-L96) [src/poetry/installation/chef.py#L38-L89](https://github.com/python-poetry/poetry/blob/d4fd21e4711ae948f04e18a1736d9ee85b590e87/src/poetry/installation/chef.py#L38-L89)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
