FFWD Components

This document covers some of the major components in FastForward.


A module is a loadable component that extends the functionality of FastForward. When a module is loaded it typically registers a set of plugins.


Either an input or an output plugin.

This provides the implementation to read or send data from the agent. A plugin can have multiple instances with different configurations (like which port to listen to).

Early Injector

The early injector is setup by AgentCore and is intended to provide the basic facilities to perform module setup.

The following is a list of components that are given access to and their purpose.

  • com.spotify.ffwd.module.PluginContext Register input and output plugins.
  • com.fasterxml.jackson.databind.ObjectMapper (config) ObjectMapper used to parse provided configuration file.

Primary Injector

The primary injector contains the dependencies which are available after modules have been registered and the initial bootstrap is done.

It contains all the components of the early injector, with the following additions.

  • eu.toolchain.async.AsyncFramework - Framework implementation to use for async operations.
  • io.netty.channel.EventLoopGroup (boss) Event loop group used for boss threads in ServerBootstrap’s.
  • io.netty.channel.EventLoopGroup (worker) Event loop group used for worker threads in {Server}Bootstrap’s.
  • com.spotify.ffwd.protocol.ProtocolServers - Framework for setting up servers in a simple manner.
  • com.spotify.ffwd.protocol.ProtocolClients - Framework for setting up clients in a simple manner.
  • io.netty.util.Timer - A timer implementation.
  • com.fasterxml.jackson.databind.ObjectMapper (application/json) Used to decode/encode JSON.