Document updated on Feb 5, 2025
Automatically generate boilerplate for Go plugins
The command krakend plugin init generates the necessary boilerplate code to start working with plugins. This command provides a structured starting point for plugin development, ensuring that the required interfaces are included from the outset.
By using this command, you can focus on writing the plugin logic without manually creating the files for each possible interface or setting up the build environment. The recommended workflow involves running KrakenD inside a container while mounting the directory where the plugin code will be generated. You must map the KrakenD Enterprise license into the container for successful execution.
This is how the command looks like:
Plugin init command
$krakend plugin init -h
╓▄█                          ▄▄▌                               ╓██████▄µ
▐███  ▄███╨▐███▄██H╗██████▄  ║██▌ ,▄███╨ ▄██████▄  ▓██▌█████▄  ███▀╙╙▀▀███╕
▐███▄███▀  ▐█████▀"╙▀▀"╙▀███ ║███▄███┘  ███▀""▀███ ████▀╙▀███H ███     ╙███
▐██████▌   ▐███⌐  ,▄████████M║██████▄  ║██████████M███▌   ███H ███     ,███
▐███╨▀███µ ▐███   ███▌  ,███M║███╙▀███  ███▄```▄▄` ███▌   ███H ███,,,╓▄███▀
▐███  ╙███▄▐███   ╙█████████M║██▌  ╙███▄`▀███████╨ ███▌   ███H █████████▀
                     ``                     `'`
Version: 2.11-ee
Generates the necessary boilerplate to develop a new plugin
Usage:
 krakend plugin init [flags]
Examples:
 krakend plugin init --type handler --name myplugin
Flags:
 -h, --help          help for init
 -n, --name string   Plugin name
 -o, --out string    Output path. Default value: <type>-<name>
 -t, --type string   Plugin type. One of: handler, client, modifier, middleware (default "handler")To build and compile a plugin, follow the steps below.
1. Generate the go code
For instance, let’s build a plugin named myplugin of the handler type. Notice that this is a KrakenD image.
Generate a plugin
$docker run --rm -it \
 -w /app \
 -e "KRAKEND_LICENSE_PATH=/LICENSE"\
 -v "$PWD/LICENSE:/LICENSE:ro" \
 -v "$PWD/plugins:/app" \
 krakend/krakend-ee:2.11 plugin init --name myplugin --type handlerThe command above assumes you have a LICENSE file in the current directory.
This is what you get:
- A new folder plugins/handler-mypluginwith the source code
- Inside, a file myplugin.gothat implements the complete interface of the chosen plugin type
- A Makefileto compile your plugin (not in this container)
2. Initialize Go modules
With the source files ready, you should start with the Go modules setup. The following command must be executed in the KrakenD builder image.
Initialize go modules
$cd plugins/handler-myplugin
docker run -it -v $PWD:/app -w /app krakend/builder-ee:2.11 make go.mod3. Compile the plugin
With the source files ready, you can compile the plugin. The following commands assume that you want to run this plugin inside the official image krakend/krakend-ee:2.11 or in a Docker file that extends FROM this one.
Compile the plugin
$docker run -it -v $PWD:/app -w /app krakend/builder-ee:2.11 make amd64This will generate the compiled plugin binary myplugin-amd64.so compatible with KrakenD running on AMD64 Docker.
krakend/builder-ee::2.11-linux-generic to compile your plugins that run in a non-Docker environment. In addition, if your architecture is ARM64 you must edit the Makefile and switch the commented CROSSCOMPILER variable.4. Inject the plugin and run
Now, you should inject the plugin in your configuration and run KrakenD.

