Skip to main content


Adding and changing functionality of Springwolf is easy. The configuration page mentions the existing ones.

When you feel that Springwolf is missing a feature, you are able to add it yourself. To learn more about how Springwolf works, look behind the scenes.


Please let us know on GitHub or Discord, so that other people can benefit from it as well. Contributions are welcome, here are some basic tips.

Springwolf uses interfaces to allow to inject functionality at integration points. Springwolf provides default implementation, but those can be replaced. All default implementations are Spring managed beans, which can be overridden.

AsyncApiCustomizer - Full AsyncAPI document

By implementing the AsyncApiCustomizer, the AsyncAPI document can be modified after Springwolf has done all the scanning and has built the document. It's the final interception point before the document is available to the user.

For example, the title can be adjusted - although this should be done through the configuration:

public class AsyncApiTitleCustomizer implements AsyncApiCustomizer {
public void customize(AsyncAPI asyncAPI) {
asyncAPI.getInfo().setTitle("Title set through customizer");

ObjectMapper in DefaultAsyncApiSerializerService

The DefaultAsyncApiSerializerService is responsible for serializing the AsyncAPI document into a String for the Controller.

Use DefaultAsyncApiSerializerService#getJsonObjectMapper() and DefaultAsyncApiSerializerService#getYamlObjectMapper() to customize the ObjectMapper.

ChannelScanners - Channel detection

All ChannelScanner beans are called to scan for channels. This interface is helpful when a protocol currently unsupported by Springwolf is used. Remember to register all payloads in the ComponentsService.