Components allow you to extend Keboola Connection (KBC). The data interface to components is very similar to Transformations — data is exchanged as CSV files in designated directories.

Intro to Component Creation

As a developer, you implement the application logic in a language of your choice and store it in a git repository. The component must adhere to our common interface. To start quickly, use our component generator that can generate a skeleton of the component for you. We also provide libraries to help you with implementation in R, Python, and PHP. Check our example component in PHP.

The main part of the common interface is the specification how CSV files and designated folders are used to exchange data between KBC and components:

  • Applications process input tables stored in CSV files and generate result tables in CSV files.
  • Extractors write results in the same way as applications, but instead of reading their input from KBC tables, they get it from an external source (usually an API).
  • Writers, on the other hand, access their input tables in the same way as applications, but push their results into external systems and do not generate any KBC tables.

Apart from this basic usage, the common interface offers many more features:

  • passing parameters
  • error control
  • working with metadata
  • OAuth support
  • working with non-CSV files
  • logging configuration
  • etc.

Our Docker Runner component makes sure that the common interface is honoured from our side. It also takes care of executing your component in its own isolated environment.


Before you start developing a new component, you should

  • have a KBC project where you can test your code.
  • get yourself acquainted with Docker. You should be able to run docker commands. Strictly speaking, you can get away without using it, but it will certainly speed things up for you.
  • be able to send API requests. Although you can use the Apiary client console, we recommend using Postman as it is more convenient. A list of sample requests is available.
  • have a git repository (Github or Bitbucket are recommended, although any other host should work as well).

You can work with your component in your KBC projects immediately as soon as you create it. However, to make the component publicly available to all users, it must be published.

Next Steps

Custom Science Migration Guide

Previously we have supported a Custom Science component, which was offered as an intermediate before a fully fledged component. We believe it was fully superseded by components and we encourage you to migrate.

Follow these steps to migrate:

  • If you do not have it yet, create an account in our Developer Portal.
  • Join an existing vendor or create a new one.
  • Add a new component.
  • Set genericDockerUI-tableInput and genericDockerUI-tableOutput (possibly also genericDockerUI-fileInput if you need it) in the UI options of the component.
  • Create a service account.
  • Migrate the component code.

Important: Every component has the amount of RAM limited to 256M by default. If you need more, ask us at For R code, you probably need at least 300M.

Code Migration

There should be no changes required in the component code. The only difference you might run into is that your code is no longer put in the /home/ directory, but in the /code/ directory. The easiest way to migrate is to use our component generator tool. Run it with:

docker run -i -t --volume=/path/to/repository/:/code/ --update

where /path/to/repository/ is the path to your Custom Science git repository. Choose a template according to the language used - python-simple, php-simple or r-simple and skip overwriting the main.* file.

If you do not want the component generator to touch your repository, see the deployment templates and language templates. You can copy the files to your repository manually. You can still use the component generator to set up Travis integration:

docker run -i -t --volume=/path/to/repository/:/code/ --setup-only

If you want to set up the deployment integration manually, read the deployment documentation. It also describes integration with Bitbucket and GitLab, which is also seamless. Basically, you need to do the following: