Skip to content


Hatch utilizes pluggy for its plugin functionality.


All plugins provide registration hooks that return one or more classes that inherit from a particular type interface.

Each registration hook must be decorated by Hatch's hook marker. For example, if you wanted to create a new kind of environment you could do:

from hatchling.plugin import hookimpl

from .plugin import SpecialEnvironment

def hatch_register_environment():
    return SpecialEnvironment

The hooks can return a single class or a list of classes.

Every class must define an attribute called PLUGIN_NAME that users will select when they wish to use the plugin. So in the example above, the class might be defined like:

class SpecialEnvironment(...):
    PLUGIN_NAME = 'special'

Project configuration


It is recommended that plugin project names are prefixed with hatch-. For example, if you wanted to make a plugin that provides some functionality for a product named foo you might do:

name = "hatch-foo"


You'll need to define your project as a Python plugin for Hatch:

foo = "pkg.hooks"

The name of the plugin should be the project name (excluding any hatch- prefix) and the path should represent the module that contains the registration hooks.


Add Framework :: Hatch to your project's classifiers to make it easy to search for Hatch plugins:

classifiers = [
  "Framework :: Hatch",



These are all involved in building projects and therefore any defined dependencies are automatically installed in each build environment.


These must be manually installed in the same environment as Hatch itself.