Skip to content
You are reading Hyperledger Besu development version documentation and some displayed features may not be available in the stable release. You can switch to stable version using the version box at screen bottom.
Date of last update: August 8, 2022

Plugin API interfaces

API interfaces in Hyperledger Besu allow users to build plugins to extend Besu functionality, such as the Quorum Besu plugins.

For more information about the available interfaces, see the Plugin API Javadoc.

Javadoc issue

The plugin API documentation is currently not being updated. We’re working on a fix, but in the meantime, some links are temporarily pointing to

Core plugin classes

The following table lists the interfaces providing core plugin classes.

Interface Description
BesuContext Allows plugins to access Besu services.
BesuPlugin Used to manage the plugin lifecycle.

Plugin services

The following table lists interfaces providing services you can retrieve.

Interface Description
BesuEvents Allows plugins to attach to events during Besu operation.
BesuConfiguration Provides file system locations of Besu’s storage.
IbftQueryService Allows query of the IBFT 2.0 aspects of the blockchain.
MetricCategoryRegistry Adds a new metrics category to the CLI.
MetricsSystem Register metrics with the Prometheus endpoint.
PoaQueryService Query the current state of Clique and IBFT 2.0 consensus protocols.
PicoCLIOptions Adds CLI commands to the Besu command line.
SecurityModuleService Allows plugins to register a security module.
StorageService Allows plugins to register as a storage engine. For example, to connect to a hardware security module (HSM).
PermissioningService Allows for fine grain control of node connection and node messaging permissioning.
PrivacyPluginService Provides a way to define how privacy marker transactions are created, and what private genesis to use.
RpcEndpointService Register custom RPC endpoints.

To use the interfaces in your plugin, ensure the Gradle build file contains the repository and the plugin-api dependency.

Known issue

As indicated in issue #406, plugins may need to access the parsed command line during registration, but the command line is not yet initialized at this stage.

It’s in our roadmap to improve lifecycle steps and provide additional visibility for some data. A workaround is to create a supplier during the register step and store it in memory.

The start step can be ignored and your plugin module will be instantiated when the command line interface is parsed and available.