streampipes-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From github-...@apache.org
Subject [incubator-streampipes-website] branch asf-site updated: Automated deployment: Sat Nov 30 19:48:12 UTC 2019 1271271a6664ca2729b4183789f9850c858c6572
Date Sat, 30 Nov 2019 19:48:22 GMT
This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes-website.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 3b99153  Automated deployment: Sat Nov 30 19:48:12 UTC 2019 1271271a6664ca2729b4183789f9850c858c6572
3b99153 is described below

commit 3b99153d21c3884d2294dd04686092e987ae10d3
Author: dominikriemer <dominikriemer@users.noreply.github.com>
AuthorDate: Sat Nov 30 19:48:13 2019 +0000

    Automated deployment: Sat Nov 30 19:48:12 UTC 2019 1271271a6664ca2729b4183789f9850c858c6572
---
 docs/blog/2018/06/14/welcome.html                  |   4 +-
 docs/blog/2018/06/14/welcome/index.html            |   4 +-
 .../06/18/how-to-understand-your-machine-data.html |   4 +-
 .../how-to-understand-your-machine-data/index.html |   4 +-
 docs/blog/2018/09/17/preview-060.html              |   4 +-
 docs/blog/2018/09/17/preview-060/index.html        |   4 +-
 docs/blog/2018/11/24/container-cli.html            |   4 +-
 docs/blog/2018/11/24/container-cli/index.html      |   4 +-
 docs/blog/2019/04/04/release-0610.html             |   4 +-
 docs/blog/2019/04/04/release-0610/index.html       |   4 +-
 docs/blog/2019/05/23/release-0620.html             |   4 +-
 docs/blog/2019/05/23/release-0620/index.html       |   4 +-
 docs/blog/2019/09/05/release-0630.html             |   4 +-
 docs/blog/2019/09/05/release-0630/index.html       |   4 +-
 docs/blog/2019/09/19/release-0640.html             |   4 +-
 docs/blog/2019/09/19/release-0640/index.html       |   4 +-
 docs/blog/2019/11/23/release-0650.html             |   4 +-
 docs/blog/2019/11/23/release-0650/index.html       |   4 +-
 docs/blog/index.html                               |  20 +-
 .../0.55.2-pre-asf/dev-guide-architecture.html     | 117 +++++
 .../dev-guide-architecture/index.html              | 117 +++++
 .../dev-guide-development-environment.html         | 272 ++++++++++++
 .../dev-guide-development-environment/index.html   | 272 ++++++++++++
 .../0.55.2-pre-asf/dev-guide-introduction.html     | 111 +++++
 .../dev-guide-introduction/index.html              | 111 +++++
 .../dev-guide-sdk-guide-processors.html            |  82 ++++
 .../dev-guide-sdk-guide-processors/index.html      |  82 ++++
 .../0.55.2-pre-asf/dev-guide-sdk-guide-sinks.html  |  82 ++++
 .../dev-guide-sdk-guide-sinks/index.html           |  82 ++++
 .../dev-guide-sdk-guide-sources.html               | 138 ++++++
 .../dev-guide-sdk-guide-sources/index.html         | 138 ++++++
 .../dev-guide-tutorial-processors.html             | 440 +++++++++++++++++++
 .../dev-guide-tutorial-processors/index.html       | 440 +++++++++++++++++++
 .../0.55.2-pre-asf/dev-guide-tutorial-sources.html | 239 +++++++++++
 .../dev-guide-tutorial-sources/index.html          | 239 +++++++++++
 docs/docs/0.55.2-pre-asf/faq-common-problems.html  | 122 ++++++
 .../0.55.2-pre-asf/faq-common-problems/index.html  | 122 ++++++
 docs/docs/0.55.2-pre-asf/pipeline-elements.html    |  80 ++++
 .../0.55.2-pre-asf/pipeline-elements/index.html    |  80 ++++
 docs/docs/0.55.2-pre-asf/privacy.html              |  56 +++
 docs/docs/0.55.2-pre-asf/privacy/index.html        |  56 +++
 .../0.55.2-pre-asf/user-guide-getting-started.html | 292 +++++++++++++
 .../user-guide-getting-started/index.html          | 292 +++++++++++++
 .../0.55.2-pre-asf/user-guide-installation.html    | 126 ++++++
 .../user-guide-installation/index.html             | 126 ++++++
 .../0.55.2-pre-asf/user-guide-introduction.html    | 120 ++++++
 .../user-guide-introduction/index.html             | 120 ++++++
 .../user-guide-processing-elements.html            | 181 ++++++++
 .../user-guide-processing-elements/index.html      | 181 ++++++++
 .../user-guide-software-components.html            | 352 +++++++++++++++
 .../user-guide-software-components/index.html      | 352 +++++++++++++++
 docs/docs/0.55.2-pre-asf/user-guide-tour.html      | 312 ++++++++++++++
 .../docs/0.55.2-pre-asf/user-guide-tour/index.html | 312 ++++++++++++++
 docs/docs/0.55.2/dev-guide-architecture.html       | 117 -----
 docs/docs/0.55.2/dev-guide-architecture/index.html | 117 -----
 .../0.55.2/dev-guide-development-environment.html  | 272 ------------
 .../dev-guide-development-environment/index.html   | 272 ------------
 docs/docs/0.55.2/dev-guide-introduction.html       | 111 -----
 docs/docs/0.55.2/dev-guide-introduction/index.html | 111 -----
 .../0.55.2/dev-guide-sdk-guide-processors.html     |  82 ----
 .../dev-guide-sdk-guide-processors/index.html      |  82 ----
 docs/docs/0.55.2/dev-guide-sdk-guide-sinks.html    |  82 ----
 .../0.55.2/dev-guide-sdk-guide-sinks/index.html    |  82 ----
 docs/docs/0.55.2/dev-guide-sdk-guide-sources.html  | 138 ------
 .../0.55.2/dev-guide-sdk-guide-sources/index.html  | 138 ------
 .../docs/0.55.2/dev-guide-tutorial-processors.html | 440 -------------------
 .../dev-guide-tutorial-processors/index.html       | 440 -------------------
 docs/docs/0.55.2/dev-guide-tutorial-sources.html   | 239 -----------
 .../0.55.2/dev-guide-tutorial-sources/index.html   | 239 -----------
 docs/docs/0.55.2/faq-common-problems.html          | 122 ------
 docs/docs/0.55.2/faq-common-problems/index.html    | 122 ------
 docs/docs/0.55.2/pipeline-elements.html            |  80 ----
 docs/docs/0.55.2/pipeline-elements/index.html      |  80 ----
 docs/docs/0.55.2/privacy.html                      |  56 ---
 docs/docs/0.55.2/privacy/index.html                |  56 ---
 docs/docs/0.55.2/user-guide-getting-started.html   | 292 -------------
 .../0.55.2/user-guide-getting-started/index.html   | 292 -------------
 docs/docs/0.55.2/user-guide-installation.html      | 126 ------
 .../docs/0.55.2/user-guide-installation/index.html | 126 ------
 docs/docs/0.55.2/user-guide-introduction.html      | 120 ------
 .../docs/0.55.2/user-guide-introduction/index.html | 120 ------
 .../0.55.2/user-guide-processing-elements.html     | 181 --------
 .../user-guide-processing-elements/index.html      | 181 --------
 .../0.55.2/user-guide-software-components.html     | 352 ---------------
 .../user-guide-software-components/index.html      | 352 ---------------
 docs/docs/0.55.2/user-guide-tour.html              | 312 --------------
 docs/docs/0.55.2/user-guide-tour/index.html        | 312 --------------
 docs/docs/0.61.0-pre-asf/dev-guide-archetype.html  | 182 ++++++++
 .../0.61.0-pre-asf/dev-guide-archetype/index.html  | 182 ++++++++
 .../0.61.0-pre-asf/dev-guide-architecture.html     | 117 +++++
 .../dev-guide-architecture/index.html              | 117 +++++
 .../0.61.0-pre-asf/dev-guide-configuration.html    | 122 ++++++
 .../dev-guide-configuration/index.html             | 122 ++++++
 .../dev-guide-development-environment.html         | 272 ++++++++++++
 .../dev-guide-development-environment/index.html   | 272 ++++++++++++
 .../docs/0.61.0-pre-asf/dev-guide-event-model.html | 171 ++++++++
 .../dev-guide-event-model/index.html               | 171 ++++++++
 .../0.61.0-pre-asf/dev-guide-introduction.html     | 111 +++++
 .../dev-guide-introduction/index.html              | 111 +++++
 docs/docs/0.61.0-pre-asf/dev-guide-migration.html  | 239 +++++++++++
 .../0.61.0-pre-asf/dev-guide-migration/index.html  | 239 +++++++++++
 .../dev-guide-output-strategies.html               | 336 +++++++++++++++
 .../dev-guide-output-strategies/index.html         | 336 +++++++++++++++
 .../dev-guide-sdk-guide-processors.html            |  82 ++++
 .../dev-guide-sdk-guide-processors/index.html      |  82 ++++
 .../0.61.0-pre-asf/dev-guide-sdk-guide-sinks.html  |  82 ++++
 .../dev-guide-sdk-guide-sinks/index.html           |  82 ++++
 .../dev-guide-sdk-guide-sources.html               | 138 ++++++
 .../dev-guide-sdk-guide-sources/index.html         | 138 ++++++
 docs/docs/0.61.0-pre-asf/dev-guide-ssl.html        | 102 +++++
 docs/docs/0.61.0-pre-asf/dev-guide-ssl/index.html  | 102 +++++
 .../dev-guide-static-properties.html               | 233 ++++++++++
 .../dev-guide-static-properties/index.html         | 233 ++++++++++
 .../dev-guide-stream-requirements.html             | 210 +++++++++
 .../dev-guide-stream-requirements/index.html       | 210 +++++++++
 .../dev-guide-tutorial-processors.html             | 471 ++++++++++++++++++++
 .../dev-guide-tutorial-processors/index.html       | 471 ++++++++++++++++++++
 .../0.61.0-pre-asf/dev-guide-tutorial-sources.html | 298 +++++++++++++
 .../dev-guide-tutorial-sources/index.html          | 298 +++++++++++++
 docs/docs/0.61.0-pre-asf/faq-common-problems.html  | 131 ++++++
 .../0.61.0-pre-asf/faq-common-problems/index.html  | 131 ++++++
 docs/docs/0.61.0-pre-asf/pipeline-elements.html    |  80 ++++
 .../0.61.0-pre-asf/pipeline-elements/index.html    |  80 ++++
 docs/docs/0.61.0-pre-asf/privacy.html              |  56 +++
 docs/docs/0.61.0-pre-asf/privacy/index.html        |  56 +++
 .../0.61.0-pre-asf/user-guide-getting-started.html | 292 +++++++++++++
 .../user-guide-getting-started/index.html          | 292 +++++++++++++
 .../0.61.0-pre-asf/user-guide-installation.html    | 131 ++++++
 .../user-guide-installation/index.html             | 131 ++++++
 .../0.61.0-pre-asf/user-guide-introduction.html    | 120 ++++++
 .../user-guide-introduction/index.html             | 120 ++++++
 .../user-guide-processing-elements.html            | 185 ++++++++
 .../user-guide-processing-elements/index.html      | 185 ++++++++
 .../user-guide-software-components.html            | 352 +++++++++++++++
 .../user-guide-software-components/index.html      | 352 +++++++++++++++
 docs/docs/0.61.0-pre-asf/user-guide-tour.html      | 312 ++++++++++++++
 .../docs/0.61.0-pre-asf/user-guide-tour/index.html | 312 ++++++++++++++
 docs/docs/0.61.0/dev-guide-archetype.html          | 182 --------
 docs/docs/0.61.0/dev-guide-archetype/index.html    | 182 --------
 docs/docs/0.61.0/dev-guide-architecture.html       | 117 -----
 docs/docs/0.61.0/dev-guide-architecture/index.html | 117 -----
 docs/docs/0.61.0/dev-guide-configuration.html      | 122 ------
 .../docs/0.61.0/dev-guide-configuration/index.html | 122 ------
 .../0.61.0/dev-guide-development-environment.html  | 272 ------------
 .../dev-guide-development-environment/index.html   | 272 ------------
 docs/docs/0.61.0/dev-guide-event-model.html        | 171 --------
 docs/docs/0.61.0/dev-guide-event-model/index.html  | 171 --------
 docs/docs/0.61.0/dev-guide-introduction.html       | 111 -----
 docs/docs/0.61.0/dev-guide-introduction/index.html | 111 -----
 docs/docs/0.61.0/dev-guide-migration.html          | 239 -----------
 docs/docs/0.61.0/dev-guide-migration/index.html    | 239 -----------
 docs/docs/0.61.0/dev-guide-output-strategies.html  | 336 ---------------
 .../0.61.0/dev-guide-output-strategies/index.html  | 336 ---------------
 .../0.61.0/dev-guide-sdk-guide-processors.html     |  82 ----
 .../dev-guide-sdk-guide-processors/index.html      |  82 ----
 docs/docs/0.61.0/dev-guide-sdk-guide-sinks.html    |  82 ----
 .../0.61.0/dev-guide-sdk-guide-sinks/index.html    |  82 ----
 docs/docs/0.61.0/dev-guide-sdk-guide-sources.html  | 138 ------
 .../0.61.0/dev-guide-sdk-guide-sources/index.html  | 138 ------
 docs/docs/0.61.0/dev-guide-ssl.html                | 102 -----
 docs/docs/0.61.0/dev-guide-ssl/index.html          | 102 -----
 docs/docs/0.61.0/dev-guide-static-properties.html  | 233 ----------
 .../0.61.0/dev-guide-static-properties/index.html  | 233 ----------
 .../docs/0.61.0/dev-guide-stream-requirements.html | 210 ---------
 .../dev-guide-stream-requirements/index.html       | 210 ---------
 .../docs/0.61.0/dev-guide-tutorial-processors.html | 471 --------------------
 .../dev-guide-tutorial-processors/index.html       | 471 --------------------
 docs/docs/0.61.0/dev-guide-tutorial-sources.html   | 298 -------------
 .../0.61.0/dev-guide-tutorial-sources/index.html   | 298 -------------
 docs/docs/0.61.0/faq-common-problems.html          | 131 ------
 docs/docs/0.61.0/faq-common-problems/index.html    | 131 ------
 docs/docs/0.61.0/pipeline-elements.html            |  80 ----
 docs/docs/0.61.0/pipeline-elements/index.html      |  80 ----
 docs/docs/0.61.0/privacy.html                      |  56 ---
 docs/docs/0.61.0/privacy/index.html                |  56 ---
 docs/docs/0.61.0/user-guide-getting-started.html   | 292 -------------
 .../0.61.0/user-guide-getting-started/index.html   | 292 -------------
 docs/docs/0.61.0/user-guide-installation.html      | 131 ------
 .../docs/0.61.0/user-guide-installation/index.html | 131 ------
 docs/docs/0.61.0/user-guide-introduction.html      | 120 ------
 .../docs/0.61.0/user-guide-introduction/index.html | 120 ------
 .../0.61.0/user-guide-processing-elements.html     | 185 --------
 .../user-guide-processing-elements/index.html      | 185 --------
 .../0.61.0/user-guide-software-components.html     | 352 ---------------
 .../user-guide-software-components/index.html      | 352 ---------------
 docs/docs/0.61.0/user-guide-tour.html              | 312 --------------
 docs/docs/0.61.0/user-guide-tour/index.html        | 312 --------------
 docs/docs/0.62.0-pre-asf/dev-guide-archetype.html  | 182 ++++++++
 .../0.62.0-pre-asf/dev-guide-archetype/index.html  | 182 ++++++++
 .../0.62.0-pre-asf/dev-guide-architecture.html     | 117 +++++
 .../dev-guide-architecture/index.html              | 117 +++++
 .../0.62.0-pre-asf/dev-guide-configuration.html    | 122 ++++++
 .../dev-guide-configuration/index.html             | 122 ++++++
 .../dev-guide-development-environment.html         | 272 ++++++++++++
 .../dev-guide-development-environment/index.html   | 272 ++++++++++++
 .../docs/0.62.0-pre-asf/dev-guide-event-model.html | 171 ++++++++
 .../dev-guide-event-model/index.html               | 171 ++++++++
 .../0.62.0-pre-asf/dev-guide-introduction.html     | 111 +++++
 .../dev-guide-introduction/index.html              | 111 +++++
 docs/docs/0.62.0-pre-asf/dev-guide-migration.html  | 239 +++++++++++
 .../0.62.0-pre-asf/dev-guide-migration/index.html  | 239 +++++++++++
 .../dev-guide-output-strategies.html               | 336 +++++++++++++++
 .../dev-guide-output-strategies/index.html         | 336 +++++++++++++++
 .../dev-guide-sdk-guide-processors.html            |  82 ++++
 .../dev-guide-sdk-guide-processors/index.html      |  82 ++++
 .../0.62.0-pre-asf/dev-guide-sdk-guide-sinks.html  |  82 ++++
 .../dev-guide-sdk-guide-sinks/index.html           |  82 ++++
 .../dev-guide-sdk-guide-sources.html               | 138 ++++++
 .../dev-guide-sdk-guide-sources/index.html         | 138 ++++++
 docs/docs/0.62.0-pre-asf/dev-guide-ssl.html        | 102 +++++
 docs/docs/0.62.0-pre-asf/dev-guide-ssl/index.html  | 102 +++++
 .../dev-guide-static-properties.html               | 233 ++++++++++
 .../dev-guide-static-properties/index.html         | 233 ++++++++++
 .../dev-guide-stream-requirements.html             | 210 +++++++++
 .../dev-guide-stream-requirements/index.html       | 210 +++++++++
 .../dev-guide-tutorial-processors.html             | 471 ++++++++++++++++++++
 .../dev-guide-tutorial-processors/index.html       | 471 ++++++++++++++++++++
 .../0.62.0-pre-asf/dev-guide-tutorial-sources.html | 298 +++++++++++++
 .../dev-guide-tutorial-sources/index.html          | 298 +++++++++++++
 docs/docs/0.62.0-pre-asf/faq-common-problems.html  | 131 ++++++
 .../0.62.0-pre-asf/faq-common-problems/index.html  | 131 ++++++
 docs/docs/0.62.0-pre-asf/pipeline-elements.html    |  76 ++++
 .../0.62.0-pre-asf/pipeline-elements/index.html    |  76 ++++
 docs/docs/0.62.0-pre-asf/privacy.html              |  56 +++
 docs/docs/0.62.0-pre-asf/privacy/index.html        |  56 +++
 .../0.62.0-pre-asf/user-guide-getting-started.html | 292 +++++++++++++
 .../user-guide-getting-started/index.html          | 292 +++++++++++++
 .../0.62.0-pre-asf/user-guide-installation.html    | 131 ++++++
 .../user-guide-installation/index.html             | 131 ++++++
 .../0.62.0-pre-asf/user-guide-introduction.html    | 120 ++++++
 .../user-guide-introduction/index.html             | 120 ++++++
 .../user-guide-processing-elements.html            | 185 ++++++++
 .../user-guide-processing-elements/index.html      | 185 ++++++++
 .../user-guide-software-components.html            | 352 +++++++++++++++
 .../user-guide-software-components/index.html      | 352 +++++++++++++++
 docs/docs/0.62.0-pre-asf/user-guide-tour.html      | 305 +++++++++++++
 .../docs/0.62.0-pre-asf/user-guide-tour/index.html | 305 +++++++++++++
 docs/docs/0.62.0/dev-guide-archetype.html          | 182 --------
 docs/docs/0.62.0/dev-guide-archetype/index.html    | 182 --------
 docs/docs/0.62.0/dev-guide-architecture.html       | 117 -----
 docs/docs/0.62.0/dev-guide-architecture/index.html | 117 -----
 docs/docs/0.62.0/dev-guide-configuration.html      | 122 ------
 .../docs/0.62.0/dev-guide-configuration/index.html | 122 ------
 .../0.62.0/dev-guide-development-environment.html  | 272 ------------
 .../dev-guide-development-environment/index.html   | 272 ------------
 docs/docs/0.62.0/dev-guide-event-model.html        | 171 --------
 docs/docs/0.62.0/dev-guide-event-model/index.html  | 171 --------
 docs/docs/0.62.0/dev-guide-introduction.html       | 111 -----
 docs/docs/0.62.0/dev-guide-introduction/index.html | 111 -----
 docs/docs/0.62.0/dev-guide-migration.html          | 239 -----------
 docs/docs/0.62.0/dev-guide-migration/index.html    | 239 -----------
 docs/docs/0.62.0/dev-guide-output-strategies.html  | 336 ---------------
 .../0.62.0/dev-guide-output-strategies/index.html  | 336 ---------------
 .../0.62.0/dev-guide-sdk-guide-processors.html     |  82 ----
 .../dev-guide-sdk-guide-processors/index.html      |  82 ----
 docs/docs/0.62.0/dev-guide-sdk-guide-sinks.html    |  82 ----
 .../0.62.0/dev-guide-sdk-guide-sinks/index.html    |  82 ----
 docs/docs/0.62.0/dev-guide-sdk-guide-sources.html  | 138 ------
 .../0.62.0/dev-guide-sdk-guide-sources/index.html  | 138 ------
 docs/docs/0.62.0/dev-guide-ssl.html                | 102 -----
 docs/docs/0.62.0/dev-guide-ssl/index.html          | 102 -----
 docs/docs/0.62.0/dev-guide-static-properties.html  | 233 ----------
 .../0.62.0/dev-guide-static-properties/index.html  | 233 ----------
 .../docs/0.62.0/dev-guide-stream-requirements.html | 210 ---------
 .../dev-guide-stream-requirements/index.html       | 210 ---------
 .../docs/0.62.0/dev-guide-tutorial-processors.html | 471 --------------------
 .../dev-guide-tutorial-processors/index.html       | 471 --------------------
 docs/docs/0.62.0/dev-guide-tutorial-sources.html   | 298 -------------
 .../0.62.0/dev-guide-tutorial-sources/index.html   | 298 -------------
 docs/docs/0.62.0/faq-common-problems.html          | 131 ------
 docs/docs/0.62.0/faq-common-problems/index.html    | 131 ------
 .../org.streampipes.processor.geo.flink.html       |  91 ----
 .../org.streampipes.processor.geo.flink/index.html |  91 ----
 ...ification.jvm.generic-image-classification.html |  91 ----
 .../index.html                                     |  91 ----
 ...sor.imageclassification.jvm.image-enricher.html |  91 ----
 .../index.html                                     |  91 ----
 ...pipes.processor.imageclassification.qrcode.html |  91 ----
 .../index.html                                     |  91 ----
 ...s.processors.aggregation.flink.aggregation.html |  97 -----
 .../index.html                                     |  97 -----
 ...eampipes.processors.aggregation.flink.rate.html |  90 ----
 .../index.html                                     |  90 ----
 ...ssors.enricher.flink.processor.math.mathop.html |  95 ----
 .../index.html                                     |  95 ----
 ...enricher.flink.processor.math.staticmathop.html |  95 ----
 .../index.html                                     |  95 ----
 ...sors.enricher.flink.processor.trigonometry.html |  94 ----
 .../index.html                                     |  94 ----
 ....enricher.flink.processor.urldereferencing.html |  92 ----
 .../index.html                                     |  92 ----
 ...mpipes.processors.enricher.flink.timestamp.html |  90 ----
 .../index.html                                     |  90 ----
 ...streampipes.processors.filters.jvm.compose.html |  91 ----
 .../index.html                                     |  91 ----
 ...pes.processors.filters.jvm.numericalfilter.html |  95 ----
 .../index.html                                     |  95 ----
 ...streampipes.processors.filters.jvm.project.html |  90 ----
 .../index.html                                     |  90 ----
 ...eampipes.processors.filters.jvm.textfilter.html |  93 ----
 .../index.html                                     |  93 ----
 ...ors.pattern-detection.flink.peak-detection.html |  91 ----
 .../index.html                                     |  91 ----
 ...rg.streampipes.processors.siddhi.frequency.html |  89 ----
 .../index.html                                     |  89 ----
 ...eampipes.processors.siddhi.frequencychange.html |  91 ----
 .../index.html                                     |  91 ----
 ...org.streampipes.processors.siddhi.increase.html |  91 ----
 .../index.html                                     |  91 ----
 ...eampipes.processors.siddhi.numericalfilter.html |  90 ----
 .../index.html                                     |  90 ----
 ...org.streampipes.processors.siddhi.sequence.html |  91 ----
 .../index.html                                     |  91 ----
 .../org.streampipes.processors.siddhi.stop.html    |  91 ----
 .../index.html                                     |  91 ----
 ...cessors.textmining.flink.languagedetection.html |  91 ----
 .../index.html                                     |  91 ----
 ...ipes.processors.textmining.flink.wordcount.html |  91 ----
 .../index.html                                     |  91 ----
 ...ssors.transformation.flink.field-converter.html |  91 ----
 .../index.html                                     |  91 ----
 ...ocessors.transformation.flink.field-mapper.html |  91 ----
 .../index.html                                     |  91 ----
 ...cessors.transformation.flink.field-renamer.html |  91 ----
 .../index.html                                     |  91 ----
 ...rocessors.transformation.flink.fieldhasher.html |  91 ----
 .../index.html                                     |  91 ----
 ...formation.flink.measurement-unit-converter.html |  91 ----
 .../index.html                                     |  91 ----
 ...transformation.flink.processor.boilerplate.html |  91 ----
 .../index.html                                     |  91 ----
 ...rocessors.transformation.jvm.changed-value.html |  90 ----
 .../index.html                                     |  90 ----
 ....processors.transformation.jvm.count-array.html |  92 ----
 .../index.html                                     |  92 ----
 ...ocessors.transformation.jvm.duration-value.html |  91 ----
 .../index.html                                     |  91 ----
 ...formation.jvm.processor.timestampextractor.html |  93 ----
 .../index.html                                     |  93 ----
 ....processors.transformation.jvm.split-array.html |  95 ----
 .../index.html                                     |  95 ----
 .../org.streampipes.sinks.brokers.jvm.jms.html     |  95 ----
 .../index.html                                     |  95 ----
 .../org.streampipes.sinks.brokers.jvm.kafka.html   |  95 ----
 .../index.html                                     |  95 ----
 ...org.streampipes.sinks.brokers.jvm.rabbitmq.html | 102 -----
 .../index.html                                     | 102 -----
 .../org.streampipes.sinks.brokers.jvm.rest.html    |  91 ----
 .../index.html                                     |  91 ----
 ...mpipes.sinks.databases.flink.elasticsearch.html |  94 ----
 .../index.html                                     |  94 ----
 ...rg.streampipes.sinks.databases.jvm.couchdb.html |  96 -----
 .../index.html                                     |  96 -----
 ...g.streampipes.sinks.databases.jvm.influxdb.html | 107 -----
 .../index.html                                     | 107 -----
 ...streampipes.sinks.databases.jvm.postgresql.html | 101 -----
 .../index.html                                     | 101 -----
 ...g.streampipes.sinks.internal.jvm.dashboard.html |  91 ----
 .../index.html                                     |  91 ----
 ...treampipes.sinks.internal.jvm.notification.html |  93 ----
 .../index.html                                     |  93 ----
 ....streampipes.sinks.notifications.jvm.email.html |  99 -----
 .../index.html                                     |  99 -----
 ...eampipes.sinks.notifications.jvm.onesignal.html |  96 -----
 .../index.html                                     |  96 -----
 ....streampipes.sinks.notifications.jvm.slack.html | 100 -----
 .../index.html                                     | 100 -----
 docs/docs/0.62.0/pipeline-elements.html            |  76 ----
 docs/docs/0.62.0/pipeline-elements/index.html      |  76 ----
 docs/docs/0.62.0/privacy.html                      |  56 ---
 docs/docs/0.62.0/privacy/index.html                |  56 ---
 docs/docs/0.62.0/user-guide-getting-started.html   | 292 -------------
 .../0.62.0/user-guide-getting-started/index.html   | 292 -------------
 docs/docs/0.62.0/user-guide-installation.html      | 131 ------
 .../docs/0.62.0/user-guide-installation/index.html | 131 ------
 docs/docs/0.62.0/user-guide-introduction.html      | 120 ------
 .../docs/0.62.0/user-guide-introduction/index.html | 120 ------
 .../0.62.0/user-guide-processing-elements.html     | 185 --------
 .../user-guide-processing-elements/index.html      | 185 --------
 .../0.62.0/user-guide-software-components.html     | 352 ---------------
 .../user-guide-software-components/index.html      | 352 ---------------
 docs/docs/0.62.0/user-guide-tour.html              | 305 -------------
 docs/docs/0.62.0/user-guide-tour/index.html        | 305 -------------
 docs/docs/0.63.0-pre-asf/dev-guide-archetype.html  | 182 ++++++++
 .../0.63.0-pre-asf/dev-guide-archetype/index.html  | 182 ++++++++
 .../0.63.0-pre-asf/dev-guide-architecture.html     | 117 +++++
 .../dev-guide-architecture/index.html              | 117 +++++
 .../0.63.0-pre-asf/dev-guide-configuration.html    | 121 ++++++
 .../dev-guide-configuration/index.html             | 121 ++++++
 .../dev-guide-development-environment.html         | 171 ++++++++
 .../dev-guide-development-environment/index.html   | 171 ++++++++
 .../docs/0.63.0-pre-asf/dev-guide-event-model.html | 171 ++++++++
 .../dev-guide-event-model/index.html               | 171 ++++++++
 .../0.63.0-pre-asf/dev-guide-introduction.html     | 111 +++++
 .../dev-guide-introduction/index.html              | 111 +++++
 docs/docs/0.63.0-pre-asf/dev-guide-migration.html  | 239 +++++++++++
 .../0.63.0-pre-asf/dev-guide-migration/index.html  | 239 +++++++++++
 .../dev-guide-output-strategies.html               | 336 +++++++++++++++
 .../dev-guide-output-strategies/index.html         | 336 +++++++++++++++
 .../dev-guide-sdk-guide-processors.html            |  82 ++++
 .../dev-guide-sdk-guide-processors/index.html      |  82 ++++
 .../0.63.0-pre-asf/dev-guide-sdk-guide-sinks.html  |  82 ++++
 .../dev-guide-sdk-guide-sinks/index.html           |  82 ++++
 .../dev-guide-sdk-guide-sources.html               | 138 ++++++
 .../dev-guide-sdk-guide-sources/index.html         | 138 ++++++
 docs/docs/0.63.0-pre-asf/dev-guide-ssl.html        | 102 +++++
 docs/docs/0.63.0-pre-asf/dev-guide-ssl/index.html  | 102 +++++
 .../dev-guide-static-properties.html               | 233 ++++++++++
 .../dev-guide-static-properties/index.html         | 233 ++++++++++
 .../dev-guide-stream-requirements.html             | 210 +++++++++
 .../dev-guide-stream-requirements/index.html       | 210 +++++++++
 .../dev-guide-tutorial-processors.html             | 469 ++++++++++++++++++++
 .../dev-guide-tutorial-processors/index.html       | 469 ++++++++++++++++++++
 .../0.63.0-pre-asf/dev-guide-tutorial-sinks.html   | 273 ++++++++++++
 .../dev-guide-tutorial-sinks/index.html            | 273 ++++++++++++
 .../0.63.0-pre-asf/dev-guide-tutorial-sources.html | 298 +++++++++++++
 .../dev-guide-tutorial-sources/index.html          | 298 +++++++++++++
 docs/docs/0.63.0-pre-asf/faq-common-problems.html  | 131 ++++++
 .../0.63.0-pre-asf/faq-common-problems/index.html  | 131 ++++++
 docs/docs/0.63.0-pre-asf/pipeline-elements.html    |  76 ++++
 .../0.63.0-pre-asf/pipeline-elements/index.html    |  76 ++++
 docs/docs/0.63.0-pre-asf/privacy.html              |  56 +++
 docs/docs/0.63.0-pre-asf/privacy/index.html        |  56 +++
 .../0.63.0-pre-asf/user-guide-first-steps.html     | 288 +++++++++++++
 .../user-guide-first-steps/index.html              | 288 +++++++++++++
 .../0.63.0-pre-asf/user-guide-getting-started.html | 242 +++++++++++
 .../user-guide-getting-started/index.html          | 242 +++++++++++
 .../0.63.0-pre-asf/user-guide-installation.html    | 198 +++++++++
 .../user-guide-installation/index.html             | 198 +++++++++
 .../0.63.0-pre-asf/user-guide-introduction.html    | 120 ++++++
 .../user-guide-introduction/index.html             | 120 ++++++
 .../user-guide-processing-elements.html            | 135 ++++++
 .../user-guide-processing-elements/index.html      | 135 ++++++
 .../user-guide-software-components.html            | 302 +++++++++++++
 .../user-guide-software-components/index.html      | 302 +++++++++++++
 docs/docs/0.63.0-pre-asf/user-guide-tour.html      | 305 +++++++++++++
 .../docs/0.63.0-pre-asf/user-guide-tour/index.html | 305 +++++++++++++
 docs/docs/0.63.0/dev-guide-archetype.html          | 182 --------
 docs/docs/0.63.0/dev-guide-archetype/index.html    | 182 --------
 docs/docs/0.63.0/dev-guide-architecture.html       | 117 -----
 docs/docs/0.63.0/dev-guide-architecture/index.html | 117 -----
 docs/docs/0.63.0/dev-guide-configuration.html      | 121 ------
 .../docs/0.63.0/dev-guide-configuration/index.html | 121 ------
 .../0.63.0/dev-guide-development-environment.html  | 171 --------
 .../dev-guide-development-environment/index.html   | 171 --------
 docs/docs/0.63.0/dev-guide-event-model.html        | 171 --------
 docs/docs/0.63.0/dev-guide-event-model/index.html  | 171 --------
 docs/docs/0.63.0/dev-guide-introduction.html       | 111 -----
 docs/docs/0.63.0/dev-guide-introduction/index.html | 111 -----
 docs/docs/0.63.0/dev-guide-migration.html          | 239 -----------
 docs/docs/0.63.0/dev-guide-migration/index.html    | 239 -----------
 docs/docs/0.63.0/dev-guide-output-strategies.html  | 336 ---------------
 .../0.63.0/dev-guide-output-strategies/index.html  | 336 ---------------
 .../0.63.0/dev-guide-sdk-guide-processors.html     |  82 ----
 .../dev-guide-sdk-guide-processors/index.html      |  82 ----
 docs/docs/0.63.0/dev-guide-sdk-guide-sinks.html    |  82 ----
 .../0.63.0/dev-guide-sdk-guide-sinks/index.html    |  82 ----
 docs/docs/0.63.0/dev-guide-sdk-guide-sources.html  | 138 ------
 .../0.63.0/dev-guide-sdk-guide-sources/index.html  | 138 ------
 docs/docs/0.63.0/dev-guide-ssl.html                | 102 -----
 docs/docs/0.63.0/dev-guide-ssl/index.html          | 102 -----
 docs/docs/0.63.0/dev-guide-static-properties.html  | 233 ----------
 .../0.63.0/dev-guide-static-properties/index.html  | 233 ----------
 .../docs/0.63.0/dev-guide-stream-requirements.html | 210 ---------
 .../dev-guide-stream-requirements/index.html       | 210 ---------
 .../docs/0.63.0/dev-guide-tutorial-processors.html | 469 --------------------
 .../dev-guide-tutorial-processors/index.html       | 469 --------------------
 docs/docs/0.63.0/dev-guide-tutorial-sinks.html     | 273 ------------
 .../0.63.0/dev-guide-tutorial-sinks/index.html     | 273 ------------
 docs/docs/0.63.0/dev-guide-tutorial-sources.html   | 298 -------------
 .../0.63.0/dev-guide-tutorial-sources/index.html   | 298 -------------
 docs/docs/0.63.0/faq-common-problems.html          | 131 ------
 docs/docs/0.63.0/faq-common-problems/index.html    | 131 ------
 .../org.streampipes.processor.geo.flink.html       |  91 ----
 .../org.streampipes.processor.geo.flink/index.html |  91 ----
 ...ification.jvm.generic-image-classification.html |  91 ----
 .../index.html                                     |  91 ----
 ...sor.imageclassification.jvm.image-enricher.html |  91 ----
 .../index.html                                     |  91 ----
 ...pipes.processor.imageclassification.qrcode.html |  91 ----
 .../index.html                                     |  91 ----
 ...s.processors.aggregation.flink.aggregation.html |  97 -----
 .../index.html                                     |  97 -----
 ...eampipes.processors.aggregation.flink.rate.html |  90 ----
 .../index.html                                     |  90 ----
 ...ssors.enricher.flink.processor.math.mathop.html |  95 ----
 .../index.html                                     |  95 ----
 ...enricher.flink.processor.math.staticmathop.html |  95 ----
 .../index.html                                     |  95 ----
 ...sors.enricher.flink.processor.trigonometry.html |  94 ----
 .../index.html                                     |  94 ----
 ....enricher.flink.processor.urldereferencing.html |  92 ----
 .../index.html                                     |  92 ----
 ...mpipes.processors.enricher.flink.timestamp.html |  90 ----
 .../index.html                                     |  90 ----
 ...streampipes.processors.filters.jvm.compose.html |  91 ----
 .../index.html                                     |  91 ----
 ...pes.processors.filters.jvm.numericalfilter.html |  95 ----
 .../index.html                                     |  95 ----
 ...streampipes.processors.filters.jvm.project.html |  90 ----
 .../index.html                                     |  90 ----
 ...eampipes.processors.filters.jvm.textfilter.html |  93 ----
 .../index.html                                     |  93 ----
 ...ors.pattern-detection.flink.peak-detection.html |  91 ----
 .../index.html                                     |  91 ----
 ...rg.streampipes.processors.siddhi.frequency.html |  89 ----
 .../index.html                                     |  89 ----
 ...eampipes.processors.siddhi.frequencychange.html |  91 ----
 .../index.html                                     |  91 ----
 ...org.streampipes.processors.siddhi.increase.html |  91 ----
 .../index.html                                     |  91 ----
 ...eampipes.processors.siddhi.numericalfilter.html |  90 ----
 .../index.html                                     |  90 ----
 ...org.streampipes.processors.siddhi.sequence.html |  91 ----
 .../index.html                                     |  91 ----
 .../org.streampipes.processors.siddhi.stop.html    |  91 ----
 .../index.html                                     |  91 ----
 ...cessors.textmining.flink.languagedetection.html |  91 ----
 .../index.html                                     |  91 ----
 ...ipes.processors.textmining.flink.wordcount.html |  91 ----
 .../index.html                                     |  91 ----
 ...ssors.transformation.flink.field-converter.html |  91 ----
 .../index.html                                     |  91 ----
 ...ocessors.transformation.flink.field-mapper.html |  91 ----
 .../index.html                                     |  91 ----
 ...cessors.transformation.flink.field-renamer.html |  91 ----
 .../index.html                                     |  91 ----
 ...rocessors.transformation.flink.fieldhasher.html |  91 ----
 .../index.html                                     |  91 ----
 ...formation.flink.measurement-unit-converter.html |  91 ----
 .../index.html                                     |  91 ----
 ...transformation.flink.processor.boilerplate.html |  91 ----
 .../index.html                                     |  91 ----
 ...rocessors.transformation.jvm.changed-value.html |  90 ----
 .../index.html                                     |  90 ----
 ....processors.transformation.jvm.count-array.html |  92 ----
 .../index.html                                     |  92 ----
 ...ocessors.transformation.jvm.duration-value.html |  91 ----
 .../index.html                                     |  91 ----
 ...formation.jvm.processor.timestampextractor.html |  93 ----
 .../index.html                                     |  93 ----
 ....processors.transformation.jvm.split-array.html |  95 ----
 .../index.html                                     |  95 ----
 .../org.streampipes.sinks.brokers.jvm.jms.html     |  95 ----
 .../index.html                                     |  95 ----
 .../org.streampipes.sinks.brokers.jvm.kafka.html   |  95 ----
 .../index.html                                     |  95 ----
 ...org.streampipes.sinks.brokers.jvm.rabbitmq.html | 102 -----
 .../index.html                                     | 102 -----
 .../org.streampipes.sinks.brokers.jvm.rest.html    |  91 ----
 .../index.html                                     |  91 ----
 ...mpipes.sinks.databases.flink.elasticsearch.html |  94 ----
 .../index.html                                     |  94 ----
 ...rg.streampipes.sinks.databases.jvm.couchdb.html |  96 -----
 .../index.html                                     |  96 -----
 ...g.streampipes.sinks.databases.jvm.influxdb.html | 107 -----
 .../index.html                                     | 107 -----
 ...streampipes.sinks.databases.jvm.postgresql.html | 101 -----
 .../index.html                                     | 101 -----
 ...g.streampipes.sinks.internal.jvm.dashboard.html |  91 ----
 .../index.html                                     |  91 ----
 ...treampipes.sinks.internal.jvm.notification.html |  93 ----
 .../index.html                                     |  93 ----
 ....streampipes.sinks.notifications.jvm.email.html |  99 -----
 .../index.html                                     |  99 -----
 ...eampipes.sinks.notifications.jvm.onesignal.html |  96 -----
 .../index.html                                     |  96 -----
 ....streampipes.sinks.notifications.jvm.slack.html | 100 -----
 .../index.html                                     | 100 -----
 docs/docs/0.63.0/pipeline-elements.html            |  76 ----
 docs/docs/0.63.0/pipeline-elements/index.html      |  76 ----
 docs/docs/0.63.0/privacy.html                      |  56 ---
 docs/docs/0.63.0/privacy/index.html                |  56 ---
 docs/docs/0.63.0/user-guide-first-steps.html       | 288 -------------
 docs/docs/0.63.0/user-guide-first-steps/index.html | 288 -------------
 docs/docs/0.63.0/user-guide-getting-started.html   | 242 -----------
 .../0.63.0/user-guide-getting-started/index.html   | 242 -----------
 docs/docs/0.63.0/user-guide-installation.html      | 198 ---------
 .../docs/0.63.0/user-guide-installation/index.html | 198 ---------
 docs/docs/0.63.0/user-guide-introduction.html      | 120 ------
 .../docs/0.63.0/user-guide-introduction/index.html | 120 ------
 .../0.63.0/user-guide-processing-elements.html     | 135 ------
 .../user-guide-processing-elements/index.html      | 135 ------
 .../0.63.0/user-guide-software-components.html     | 302 -------------
 .../user-guide-software-components/index.html      | 302 -------------
 docs/docs/0.63.0/user-guide-tour.html              | 305 -------------
 docs/docs/0.63.0/user-guide-tour/index.html        | 305 -------------
 docs/docs/0.64.0-pre-asf/dev-guide-archetype.html  | 190 ++++++++
 .../0.64.0-pre-asf/dev-guide-archetype/index.html  | 190 ++++++++
 .../0.64.0-pre-asf/dev-guide-architecture.html     | 117 +++++
 .../dev-guide-architecture/index.html              | 117 +++++
 .../0.64.0-pre-asf/dev-guide-configuration.html    | 121 ++++++
 .../dev-guide-configuration/index.html             | 121 ++++++
 .../dev-guide-development-environment.html         | 171 ++++++++
 .../dev-guide-development-environment/index.html   | 171 ++++++++
 .../docs/0.64.0-pre-asf/dev-guide-event-model.html | 171 ++++++++
 .../dev-guide-event-model/index.html               | 171 ++++++++
 .../0.64.0-pre-asf/dev-guide-introduction.html     | 111 +++++
 .../dev-guide-introduction/index.html              | 111 +++++
 docs/docs/0.64.0-pre-asf/dev-guide-migration.html  | 239 +++++++++++
 .../0.64.0-pre-asf/dev-guide-migration/index.html  | 239 +++++++++++
 .../dev-guide-output-strategies.html               | 336 +++++++++++++++
 .../dev-guide-output-strategies/index.html         | 336 +++++++++++++++
 .../dev-guide-sdk-guide-processors.html            |  82 ++++
 .../dev-guide-sdk-guide-processors/index.html      |  82 ++++
 .../0.64.0-pre-asf/dev-guide-sdk-guide-sinks.html  |  82 ++++
 .../dev-guide-sdk-guide-sinks/index.html           |  82 ++++
 .../dev-guide-sdk-guide-sources.html               | 138 ++++++
 .../dev-guide-sdk-guide-sources/index.html         | 138 ++++++
 docs/docs/0.64.0-pre-asf/dev-guide-ssl.html        | 102 +++++
 docs/docs/0.64.0-pre-asf/dev-guide-ssl/index.html  | 102 +++++
 .../dev-guide-static-properties.html               | 233 ++++++++++
 .../dev-guide-static-properties/index.html         | 233 ++++++++++
 .../dev-guide-stream-requirements.html             | 210 +++++++++
 .../dev-guide-stream-requirements/index.html       | 210 +++++++++
 .../dev-guide-tutorial-processors.html             | 477 +++++++++++++++++++++
 .../dev-guide-tutorial-processors/index.html       | 477 +++++++++++++++++++++
 .../0.64.0-pre-asf/dev-guide-tutorial-sinks.html   | 281 ++++++++++++
 .../dev-guide-tutorial-sinks/index.html            | 281 ++++++++++++
 .../0.64.0-pre-asf/dev-guide-tutorial-sources.html | 298 +++++++++++++
 .../dev-guide-tutorial-sources/index.html          | 298 +++++++++++++
 docs/docs/0.64.0-pre-asf/faq-common-problems.html  | 131 ++++++
 .../0.64.0-pre-asf/faq-common-problems/index.html  | 131 ++++++
 docs/docs/0.64.0-pre-asf/pipeline-elements.html    |  76 ++++
 .../0.64.0-pre-asf/pipeline-elements/index.html    |  76 ++++
 docs/docs/0.64.0-pre-asf/privacy.html              |  56 +++
 docs/docs/0.64.0-pre-asf/privacy/index.html        |  56 +++
 .../0.64.0-pre-asf/user-guide-first-steps.html     | 288 +++++++++++++
 .../user-guide-first-steps/index.html              | 288 +++++++++++++
 .../0.64.0-pre-asf/user-guide-getting-started.html | 242 +++++++++++
 .../user-guide-getting-started/index.html          | 242 +++++++++++
 .../0.64.0-pre-asf/user-guide-installation.html    | 198 +++++++++
 .../user-guide-installation/index.html             | 198 +++++++++
 .../0.64.0-pre-asf/user-guide-introduction.html    | 120 ++++++
 .../user-guide-introduction/index.html             | 120 ++++++
 .../user-guide-processing-elements.html            | 135 ++++++
 .../user-guide-processing-elements/index.html      | 135 ++++++
 .../user-guide-software-components.html            | 302 +++++++++++++
 .../user-guide-software-components/index.html      | 302 +++++++++++++
 docs/docs/0.64.0-pre-asf/user-guide-tour.html      | 305 +++++++++++++
 .../docs/0.64.0-pre-asf/user-guide-tour/index.html | 305 +++++++++++++
 docs/docs/0.64.0/dev-guide-archetype.html          | 190 --------
 docs/docs/0.64.0/dev-guide-archetype/index.html    | 190 --------
 docs/docs/0.64.0/dev-guide-architecture.html       | 117 -----
 docs/docs/0.64.0/dev-guide-architecture/index.html | 117 -----
 docs/docs/0.64.0/dev-guide-configuration.html      | 121 ------
 .../docs/0.64.0/dev-guide-configuration/index.html | 121 ------
 .../0.64.0/dev-guide-development-environment.html  | 171 --------
 .../dev-guide-development-environment/index.html   | 171 --------
 docs/docs/0.64.0/dev-guide-event-model.html        | 171 --------
 docs/docs/0.64.0/dev-guide-event-model/index.html  | 171 --------
 docs/docs/0.64.0/dev-guide-introduction.html       | 111 -----
 docs/docs/0.64.0/dev-guide-introduction/index.html | 111 -----
 docs/docs/0.64.0/dev-guide-migration.html          | 239 -----------
 docs/docs/0.64.0/dev-guide-migration/index.html    | 239 -----------
 docs/docs/0.64.0/dev-guide-output-strategies.html  | 336 ---------------
 .../0.64.0/dev-guide-output-strategies/index.html  | 336 ---------------
 .../0.64.0/dev-guide-sdk-guide-processors.html     |  82 ----
 .../dev-guide-sdk-guide-processors/index.html      |  82 ----
 docs/docs/0.64.0/dev-guide-sdk-guide-sinks.html    |  82 ----
 .../0.64.0/dev-guide-sdk-guide-sinks/index.html    |  82 ----
 docs/docs/0.64.0/dev-guide-sdk-guide-sources.html  | 138 ------
 .../0.64.0/dev-guide-sdk-guide-sources/index.html  | 138 ------
 docs/docs/0.64.0/dev-guide-ssl.html                | 102 -----
 docs/docs/0.64.0/dev-guide-ssl/index.html          | 102 -----
 docs/docs/0.64.0/dev-guide-static-properties.html  | 233 ----------
 .../0.64.0/dev-guide-static-properties/index.html  | 233 ----------
 .../docs/0.64.0/dev-guide-stream-requirements.html | 210 ---------
 .../dev-guide-stream-requirements/index.html       | 210 ---------
 .../docs/0.64.0/dev-guide-tutorial-processors.html | 477 ---------------------
 .../dev-guide-tutorial-processors/index.html       | 477 ---------------------
 docs/docs/0.64.0/dev-guide-tutorial-sinks.html     | 281 ------------
 .../0.64.0/dev-guide-tutorial-sinks/index.html     | 281 ------------
 docs/docs/0.64.0/dev-guide-tutorial-sources.html   | 298 -------------
 .../0.64.0/dev-guide-tutorial-sources/index.html   | 298 -------------
 docs/docs/0.64.0/faq-common-problems.html          | 131 ------
 docs/docs/0.64.0/faq-common-problems/index.html    | 131 ------
 .../org.streampipes.processor.geo.flink.html       |  91 ----
 .../org.streampipes.processor.geo.flink/index.html |  91 ----
 ...ification.jvm.generic-image-classification.html |  91 ----
 .../index.html                                     |  91 ----
 ...sor.imageclassification.jvm.image-enricher.html |  91 ----
 .../index.html                                     |  91 ----
 ...pipes.processor.imageclassification.qrcode.html |  91 ----
 .../index.html                                     |  91 ----
 ...s.processors.aggregation.flink.aggregation.html |  97 -----
 .../index.html                                     |  97 -----
 ...eampipes.processors.aggregation.flink.rate.html |  90 ----
 .../index.html                                     |  90 ----
 ...ssors.enricher.flink.processor.math.mathop.html |  95 ----
 .../index.html                                     |  95 ----
 ...enricher.flink.processor.math.staticmathop.html |  95 ----
 .../index.html                                     |  95 ----
 ...sors.enricher.flink.processor.trigonometry.html |  94 ----
 .../index.html                                     |  94 ----
 ....enricher.flink.processor.urldereferencing.html |  92 ----
 .../index.html                                     |  92 ----
 ...mpipes.processors.enricher.flink.timestamp.html |  90 ----
 .../index.html                                     |  90 ----
 ...streampipes.processors.filters.jvm.compose.html |  91 ----
 .../index.html                                     |  91 ----
 ...pes.processors.filters.jvm.numericalfilter.html |  95 ----
 .../index.html                                     |  95 ----
 ...streampipes.processors.filters.jvm.project.html |  90 ----
 .../index.html                                     |  90 ----
 ...eampipes.processors.filters.jvm.textfilter.html |  93 ----
 .../index.html                                     |  93 ----
 ...ors.pattern-detection.flink.peak-detection.html |  91 ----
 .../index.html                                     |  91 ----
 ...rg.streampipes.processors.siddhi.frequency.html |  89 ----
 .../index.html                                     |  89 ----
 ...eampipes.processors.siddhi.frequencychange.html |  91 ----
 .../index.html                                     |  91 ----
 ...org.streampipes.processors.siddhi.increase.html |  91 ----
 .../index.html                                     |  91 ----
 ...eampipes.processors.siddhi.numericalfilter.html |  90 ----
 .../index.html                                     |  90 ----
 ...org.streampipes.processors.siddhi.sequence.html |  91 ----
 .../index.html                                     |  91 ----
 .../org.streampipes.processors.siddhi.stop.html    |  91 ----
 .../index.html                                     |  91 ----
 ...cessors.textmining.flink.languagedetection.html |  91 ----
 .../index.html                                     |  91 ----
 ...ipes.processors.textmining.flink.wordcount.html |  91 ----
 .../index.html                                     |  91 ----
 ...ssors.transformation.flink.field-converter.html |  91 ----
 .../index.html                                     |  91 ----
 ...ocessors.transformation.flink.field-mapper.html |  91 ----
 .../index.html                                     |  91 ----
 ...cessors.transformation.flink.field-renamer.html |  91 ----
 .../index.html                                     |  91 ----
 ...rocessors.transformation.flink.fieldhasher.html |  91 ----
 .../index.html                                     |  91 ----
 ...formation.flink.measurement-unit-converter.html |  91 ----
 .../index.html                                     |  91 ----
 ...transformation.flink.processor.boilerplate.html |  91 ----
 .../index.html                                     |  91 ----
 ...rocessors.transformation.jvm.changed-value.html |  90 ----
 .../index.html                                     |  90 ----
 ....processors.transformation.jvm.count-array.html |  92 ----
 .../index.html                                     |  92 ----
 ...ocessors.transformation.jvm.duration-value.html |  91 ----
 .../index.html                                     |  91 ----
 ...formation.jvm.processor.timestampextractor.html |  93 ----
 .../index.html                                     |  93 ----
 ....processors.transformation.jvm.split-array.html |  95 ----
 .../index.html                                     |  95 ----
 .../org.streampipes.sinks.brokers.jvm.jms.html     |  95 ----
 .../index.html                                     |  95 ----
 .../org.streampipes.sinks.brokers.jvm.kafka.html   |  95 ----
 .../index.html                                     |  95 ----
 ...org.streampipes.sinks.brokers.jvm.rabbitmq.html | 102 -----
 .../index.html                                     | 102 -----
 .../org.streampipes.sinks.brokers.jvm.rest.html    |  91 ----
 .../index.html                                     |  91 ----
 ...mpipes.sinks.databases.flink.elasticsearch.html |  94 ----
 .../index.html                                     |  94 ----
 ...rg.streampipes.sinks.databases.jvm.couchdb.html |  96 -----
 .../index.html                                     |  96 -----
 ...g.streampipes.sinks.databases.jvm.influxdb.html | 107 -----
 .../index.html                                     | 107 -----
 ...streampipes.sinks.databases.jvm.postgresql.html | 101 -----
 .../index.html                                     | 101 -----
 ...g.streampipes.sinks.internal.jvm.dashboard.html |  91 ----
 .../index.html                                     |  91 ----
 ...treampipes.sinks.internal.jvm.notification.html |  93 ----
 .../index.html                                     |  93 ----
 ....streampipes.sinks.notifications.jvm.email.html |  99 -----
 .../index.html                                     |  99 -----
 ...eampipes.sinks.notifications.jvm.onesignal.html |  96 -----
 .../index.html                                     |  96 -----
 ....streampipes.sinks.notifications.jvm.slack.html | 100 -----
 .../index.html                                     | 100 -----
 docs/docs/0.64.0/pipeline-elements.html            |  76 ----
 docs/docs/0.64.0/pipeline-elements/index.html      |  76 ----
 docs/docs/0.64.0/privacy.html                      |  56 ---
 docs/docs/0.64.0/privacy/index.html                |  56 ---
 docs/docs/0.64.0/user-guide-first-steps.html       | 288 -------------
 docs/docs/0.64.0/user-guide-first-steps/index.html | 288 -------------
 docs/docs/0.64.0/user-guide-getting-started.html   | 242 -----------
 .../0.64.0/user-guide-getting-started/index.html   | 242 -----------
 docs/docs/0.64.0/user-guide-installation.html      | 198 ---------
 .../docs/0.64.0/user-guide-installation/index.html | 198 ---------
 docs/docs/0.64.0/user-guide-introduction.html      | 120 ------
 .../docs/0.64.0/user-guide-introduction/index.html | 120 ------
 .../0.64.0/user-guide-processing-elements.html     | 135 ------
 .../user-guide-processing-elements/index.html      | 135 ------
 .../0.64.0/user-guide-software-components.html     | 302 -------------
 .../user-guide-software-components/index.html      | 302 -------------
 docs/docs/0.64.0/user-guide-tour.html              | 305 -------------
 docs/docs/0.64.0/user-guide-tour/index.html        | 305 -------------
 docs/docs/dev-guide-archetype.html                 |   4 +-
 docs/docs/dev-guide-archetype/index.html           |   4 +-
 docs/docs/dev-guide-architecture.html              |   4 +-
 docs/docs/dev-guide-architecture/index.html        |   4 +-
 docs/docs/dev-guide-configuration.html             |   4 +-
 docs/docs/dev-guide-configuration/index.html       |   4 +-
 docs/docs/dev-guide-development-environment.html   |   4 +-
 .../dev-guide-development-environment/index.html   |   4 +-
 docs/docs/dev-guide-event-model.html               |   4 +-
 docs/docs/dev-guide-event-model/index.html         |   4 +-
 docs/docs/dev-guide-introduction.html              |   4 +-
 docs/docs/dev-guide-introduction/index.html        |   4 +-
 docs/docs/dev-guide-migration.html                 |   4 +-
 docs/docs/dev-guide-migration/index.html           |   4 +-
 docs/docs/dev-guide-output-strategies.html         |   4 +-
 docs/docs/dev-guide-output-strategies/index.html   |   4 +-
 docs/docs/dev-guide-sdk-guide-processors.html      |   4 +-
 .../docs/dev-guide-sdk-guide-processors/index.html |   4 +-
 docs/docs/dev-guide-sdk-guide-sinks.html           |   4 +-
 docs/docs/dev-guide-sdk-guide-sinks/index.html     |   4 +-
 docs/docs/dev-guide-sdk-guide-sources.html         |   4 +-
 docs/docs/dev-guide-sdk-guide-sources/index.html   |   4 +-
 docs/docs/dev-guide-ssl.html                       |   4 +-
 docs/docs/dev-guide-ssl/index.html                 |   4 +-
 docs/docs/dev-guide-static-properties.html         |   4 +-
 docs/docs/dev-guide-static-properties/index.html   |   4 +-
 docs/docs/dev-guide-stream-requirements.html       |   4 +-
 docs/docs/dev-guide-stream-requirements/index.html |   4 +-
 docs/docs/dev-guide-tutorial-processors.html       |   4 +-
 docs/docs/dev-guide-tutorial-processors/index.html |   4 +-
 docs/docs/dev-guide-tutorial-sinks.html            |   4 +-
 docs/docs/dev-guide-tutorial-sinks/index.html      |   4 +-
 docs/docs/dev-guide-tutorial-sources.html          |   4 +-
 docs/docs/dev-guide-tutorial-sources/index.html    |   4 +-
 docs/docs/faq-common-problems.html                 |   4 +-
 docs/docs/faq-common-problems/index.html           |   4 +-
 .../org.streampipes.processor.geo.flink.html       |  91 ----
 .../org.streampipes.processor.geo.flink/index.html |  91 ----
 ...ification.jvm.generic-image-classification.html |  91 ----
 .../index.html                                     |  91 ----
 ...sor.imageclassification.jvm.image-enricher.html |  91 ----
 .../index.html                                     |  91 ----
 ...pipes.processor.imageclassification.qrcode.html |  91 ----
 .../index.html                                     |  91 ----
 ...s.processors.aggregation.flink.aggregation.html |  97 -----
 .../index.html                                     |  97 -----
 ...eampipes.processors.aggregation.flink.rate.html |  90 ----
 .../index.html                                     |  90 ----
 ...ssors.enricher.flink.processor.math.mathop.html |  95 ----
 .../index.html                                     |  95 ----
 ...enricher.flink.processor.math.staticmathop.html |  95 ----
 .../index.html                                     |  95 ----
 ...sors.enricher.flink.processor.trigonometry.html |  94 ----
 .../index.html                                     |  94 ----
 ....enricher.flink.processor.urldereferencing.html |  92 ----
 .../index.html                                     |  92 ----
 ...mpipes.processors.enricher.flink.timestamp.html |  90 ----
 .../index.html                                     |  90 ----
 ...streampipes.processors.filters.jvm.compose.html |  91 ----
 .../index.html                                     |  91 ----
 ...pes.processors.filters.jvm.numericalfilter.html |  95 ----
 .../index.html                                     |  95 ----
 ...streampipes.processors.filters.jvm.project.html |  90 ----
 .../index.html                                     |  90 ----
 ...eampipes.processors.filters.jvm.textfilter.html |  93 ----
 .../index.html                                     |  93 ----
 ...ors.pattern-detection.flink.peak-detection.html |  91 ----
 .../index.html                                     |  91 ----
 ...rg.streampipes.processors.siddhi.frequency.html |  89 ----
 .../index.html                                     |  89 ----
 ...eampipes.processors.siddhi.frequencychange.html |  91 ----
 .../index.html                                     |  91 ----
 ...org.streampipes.processors.siddhi.increase.html |  91 ----
 .../index.html                                     |  91 ----
 ...eampipes.processors.siddhi.numericalfilter.html |  90 ----
 .../index.html                                     |  90 ----
 ...org.streampipes.processors.siddhi.sequence.html |  91 ----
 .../index.html                                     |  91 ----
 .../org.streampipes.processors.siddhi.stop.html    |  91 ----
 .../index.html                                     |  91 ----
 ...cessors.textmining.flink.languagedetection.html |  91 ----
 .../index.html                                     |  91 ----
 ...ipes.processors.textmining.flink.wordcount.html |  91 ----
 .../index.html                                     |  91 ----
 ...ssors.transformation.flink.field-converter.html |  91 ----
 .../index.html                                     |  91 ----
 ...ocessors.transformation.flink.field-mapper.html |  91 ----
 .../index.html                                     |  91 ----
 ...cessors.transformation.flink.field-renamer.html |  91 ----
 .../index.html                                     |  91 ----
 ...rocessors.transformation.flink.fieldhasher.html |  91 ----
 .../index.html                                     |  91 ----
 ...formation.flink.measurement-unit-converter.html |  91 ----
 .../index.html                                     |  91 ----
 ...transformation.flink.processor.boilerplate.html |  91 ----
 .../index.html                                     |  91 ----
 ...rocessors.transformation.jvm.changed-value.html |  90 ----
 .../index.html                                     |  90 ----
 ....processors.transformation.jvm.count-array.html |  92 ----
 .../index.html                                     |  92 ----
 ...ocessors.transformation.jvm.duration-value.html |  91 ----
 .../index.html                                     |  91 ----
 ...formation.jvm.processor.timestampextractor.html |  93 ----
 .../index.html                                     |  93 ----
 ....processors.transformation.jvm.split-array.html |  95 ----
 .../index.html                                     |  95 ----
 .../org.streampipes.sinks.brokers.jvm.jms.html     |  95 ----
 .../index.html                                     |  95 ----
 .../org.streampipes.sinks.brokers.jvm.kafka.html   |  95 ----
 .../index.html                                     |  95 ----
 ...org.streampipes.sinks.brokers.jvm.rabbitmq.html | 102 -----
 .../index.html                                     | 102 -----
 .../org.streampipes.sinks.brokers.jvm.rest.html    |  91 ----
 .../index.html                                     |  91 ----
 ...mpipes.sinks.databases.flink.elasticsearch.html |  94 ----
 .../index.html                                     |  94 ----
 ...rg.streampipes.sinks.databases.jvm.couchdb.html |  96 -----
 .../index.html                                     |  96 -----
 ...g.streampipes.sinks.databases.jvm.influxdb.html | 107 -----
 .../index.html                                     | 107 -----
 ...streampipes.sinks.databases.jvm.postgresql.html | 101 -----
 .../index.html                                     | 101 -----
 ...g.streampipes.sinks.internal.jvm.dashboard.html |  91 ----
 .../index.html                                     |  91 ----
 ...treampipes.sinks.internal.jvm.notification.html |  93 ----
 .../index.html                                     |  93 ----
 ....streampipes.sinks.notifications.jvm.email.html |  99 -----
 .../index.html                                     |  99 -----
 ...eampipes.sinks.notifications.jvm.onesignal.html |  96 -----
 .../index.html                                     |  96 -----
 ....streampipes.sinks.notifications.jvm.slack.html | 100 -----
 .../index.html                                     | 100 -----
 docs/docs/pipeline-elements.html                   |   4 +-
 docs/docs/pipeline-elements/index.html             |   4 +-
 docs/docs/privacy.html                             |   4 +-
 docs/docs/privacy/index.html                       |   4 +-
 docs/docs/user-guide-first-steps.html              |   4 +-
 docs/docs/user-guide-first-steps/index.html        |   4 +-
 docs/docs/user-guide-getting-started.html          |   4 +-
 docs/docs/user-guide-getting-started/index.html    |   4 +-
 docs/docs/user-guide-installation.html             |   4 +-
 docs/docs/user-guide-installation/index.html       |   4 +-
 docs/docs/user-guide-introduction.html             |   4 +-
 docs/docs/user-guide-introduction/index.html       |   4 +-
 docs/docs/user-guide-processing-elements.html      |   4 +-
 .../docs/user-guide-processing-elements/index.html |   4 +-
 docs/docs/user-guide-software-components.html      |   4 +-
 .../docs/user-guide-software-components/index.html |   4 +-
 docs/docs/user-guide-tour.html                     |   4 +-
 docs/docs/user-guide-tour/index.html               |   4 +-
 docs/en/index.html                                 |   2 +-
 docs/en/versions.html                              |   2 +-
 docs/en/versions/index.html                        |   2 +-
 docs/index.html                                    |   2 +-
 docs/sitemap.xml                                   | 434 ++++++-------------
 docs/versions.html                                 |   2 +-
 docs/versions/index.html                           |   2 +-
 index.html                                         |   2 +-
 949 files changed, 46604 insertions(+), 82548 deletions(-)

diff --git a/docs/blog/2018/06/14/welcome.html b/docs/blog/2018/06/14/welcome.html
index 8b86c63..6ca0d0b 100644
--- a/docs/blog/2018/06/14/welcome.html
+++ b/docs/blog/2018/06/14/welcome.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/06/14/welcome">Welcome to StreamPipes!</a></h1><p class="post-meta">June 14, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div class=" [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/06/14/welcome">Welcome to StreamPipes!</a></h1><p class="post-meta">June 14, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div class=" [...]
 <p>Stay tuned!</p>
 </span></div></div><div class="blogSocialSection"></div></div><div class="blog-recent"><a class="button" href="/docs/blog">Recent Posts</a></div></div></div><nav class="onPageNav"></nav></div><div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/docs/" class="nav-home"><img src="/docs/img/sp-logo-color.png" alt="StreamPipes" width="66"/></a><div><h5>Docs</h5><a href="/docs/docs/user-guide-introduction">User Guide</a><a href="/docs/docs/dev-guide-introduction">Dev [...]
                 document.addEventListener('keyup', function(e) {
diff --git a/docs/blog/2018/06/14/welcome/index.html b/docs/blog/2018/06/14/welcome/index.html
index 8b86c63..6ca0d0b 100644
--- a/docs/blog/2018/06/14/welcome/index.html
+++ b/docs/blog/2018/06/14/welcome/index.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/06/14/welcome">Welcome to StreamPipes!</a></h1><p class="post-meta">June 14, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div class=" [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/06/14/welcome">Welcome to StreamPipes!</a></h1><p class="post-meta">June 14, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div class=" [...]
 <p>Stay tuned!</p>
 </span></div></div><div class="blogSocialSection"></div></div><div class="blog-recent"><a class="button" href="/docs/blog">Recent Posts</a></div></div></div><nav class="onPageNav"></nav></div><div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/docs/" class="nav-home"><img src="/docs/img/sp-logo-color.png" alt="StreamPipes" width="66"/></a><div><h5>Docs</h5><a href="/docs/docs/user-guide-introduction">User Guide</a><a href="/docs/docs/dev-guide-introduction">Dev [...]
                 document.addEventListener('keyup', function(e) {
diff --git a/docs/blog/2018/06/18/how-to-understand-your-machine-data.html b/docs/blog/2018/06/18/how-to-understand-your-machine-data.html
index 5b3249c..5a87e95 100644
--- a/docs/blog/2018/06/18/how-to-understand-your-machine-data.html
+++ b/docs/blog/2018/06/18/how-to-understand-your-machine-data.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/06/18/how-to-understand-your-machine-data">How to understand your machine data?</a></h1><p class="post-meta">June 18, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/philipp10der" target="_blank" rel="noreferrer noope [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/06/18/how-to-understand-your-machine-data">How to understand your machine data?</a></h1><p class="post-meta">June 18, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/philipp10der" target="_blank" rel="noreferrer noope [...]
 <br></p>
 <p>Data is the new oil. Probably everybody of you has heard or read this sentence before.
 It is often stated how important data and data understanding is for companies today.
diff --git a/docs/blog/2018/06/18/how-to-understand-your-machine-data/index.html b/docs/blog/2018/06/18/how-to-understand-your-machine-data/index.html
index 5b3249c..5a87e95 100644
--- a/docs/blog/2018/06/18/how-to-understand-your-machine-data/index.html
+++ b/docs/blog/2018/06/18/how-to-understand-your-machine-data/index.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/06/18/how-to-understand-your-machine-data">How to understand your machine data?</a></h1><p class="post-meta">June 18, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/philipp10der" target="_blank" rel="noreferrer noope [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/06/18/how-to-understand-your-machine-data">How to understand your machine data?</a></h1><p class="post-meta">June 18, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/philipp10der" target="_blank" rel="noreferrer noope [...]
 <br></p>
 <p>Data is the new oil. Probably everybody of you has heard or read this sentence before.
 It is often stated how important data and data understanding is for companies today.
diff --git a/docs/blog/2018/09/17/preview-060.html b/docs/blog/2018/09/17/preview-060.html
index 219f9f7..78f4f20 100644
--- a/docs/blog/2018/09/17/preview-060.html
+++ b/docs/blog/2018/09/17/preview-060.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/09/17/preview-060">Preview: StreamPipes release 0.60.0</a></h1><p class="post-meta">September 17, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Rieme [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/09/17/preview-060">Preview: StreamPipes release 0.60.0</a></h1><p class="post-meta">September 17, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Rieme [...]
 <br></p>
 <p>It's been a while since our last blog post. However, in the background we are working hard to release the next version of StreamPipes which is currently in the final phase.
 In this post, we'd like to give you a preview of the upcoming StreamPipes version 0.60.0, which brings many new features and improvements.</p>
diff --git a/docs/blog/2018/09/17/preview-060/index.html b/docs/blog/2018/09/17/preview-060/index.html
index 219f9f7..78f4f20 100644
--- a/docs/blog/2018/09/17/preview-060/index.html
+++ b/docs/blog/2018/09/17/preview-060/index.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/09/17/preview-060">Preview: StreamPipes release 0.60.0</a></h1><p class="post-meta">September 17, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Rieme [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/09/17/preview-060">Preview: StreamPipes release 0.60.0</a></h1><p class="post-meta">September 17, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Rieme [...]
 <br></p>
 <p>It's been a while since our last blog post. However, in the background we are working hard to release the next version of StreamPipes which is currently in the final phase.
 In this post, we'd like to give you a preview of the upcoming StreamPipes version 0.60.0, which brings many new features and improvements.</p>
diff --git a/docs/blog/2018/11/24/container-cli.html b/docs/blog/2018/11/24/container-cli.html
index 23ede79..cbf9ee3 100644
--- a/docs/blog/2018/11/24/container-cli.html
+++ b/docs/blog/2018/11/24/container-cli.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/11/24/container-cli">ContainerCLI: A CLI tool for your Docker Application</a></h1><p class="post-meta">November 24, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/philipp10der" target="_blank" rel="noreferrer noopene [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/11/24/container-cli">ContainerCLI: A CLI tool for your Docker Application</a></h1><p class="post-meta">November 24, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/philipp10der" target="_blank" rel="noreferrer noopene [...]
 <br></p>
 <p>In this blog post, we show how we developed a CLI tool to install and manage StreamPipes.
 In addition, we present a template project that enables you to easily create a CLI tool for your own docker application.
diff --git a/docs/blog/2018/11/24/container-cli/index.html b/docs/blog/2018/11/24/container-cli/index.html
index 23ede79..cbf9ee3 100644
--- a/docs/blog/2018/11/24/container-cli/index.html
+++ b/docs/blog/2018/11/24/container-cli/index.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/11/24/container-cli">ContainerCLI: A CLI tool for your Docker Application</a></h1><p class="post-meta">November 24, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/philipp10der" target="_blank" rel="noreferrer noopene [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/11/24/container-cli">ContainerCLI: A CLI tool for your Docker Application</a></h1><p class="post-meta">November 24, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/philipp10der" target="_blank" rel="noreferrer noopene [...]
 <br></p>
 <p>In this blog post, we show how we developed a CLI tool to install and manage StreamPipes.
 In addition, we present a template project that enables you to easily create a CLI tool for your own docker application.
diff --git a/docs/blog/2019/04/04/release-0610.html b/docs/blog/2019/04/04/release-0610.html
index a0086c5..e20577a 100644
--- a/docs/blog/2019/04/04/release-0610.html
+++ b/docs/blog/2019/04/04/release-0610.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/04/04/release-0610">StreamPipes release 0.61.0</a></h1><p class="post-meta">April 4, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/04/04/release-0610">StreamPipes release 0.61.0</a></h1><p class="post-meta">April 4, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div [...]
 <br></p>
 <p>We are proud to release StreamPipes version 0.61.0, which brings many improvements and some exciting new features that simplify pipeline development!
 The new version, which is already available on Docker Hub and can be downloaded using our <a href="https://github.com/streampipes/streampipes-installer">installer</a> brings over 20 improvements. Under the hood, a reworked event model simplifies the development of new pipeline elements using the built-in SDK.</p>
diff --git a/docs/blog/2019/04/04/release-0610/index.html b/docs/blog/2019/04/04/release-0610/index.html
index a0086c5..e20577a 100644
--- a/docs/blog/2019/04/04/release-0610/index.html
+++ b/docs/blog/2019/04/04/release-0610/index.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/04/04/release-0610">StreamPipes release 0.61.0</a></h1><p class="post-meta">April 4, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/04/04/release-0610">StreamPipes release 0.61.0</a></h1><p class="post-meta">April 4, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div [...]
 <br></p>
 <p>We are proud to release StreamPipes version 0.61.0, which brings many improvements and some exciting new features that simplify pipeline development!
 The new version, which is already available on Docker Hub and can be downloaded using our <a href="https://github.com/streampipes/streampipes-installer">installer</a> brings over 20 improvements. Under the hood, a reworked event model simplifies the development of new pipeline elements using the built-in SDK.</p>
diff --git a/docs/blog/2019/05/23/release-0620.html b/docs/blog/2019/05/23/release-0620.html
index 5891727..67a8cf4 100644
--- a/docs/blog/2019/05/23/release-0620.html
+++ b/docs/blog/2019/05/23/release-0620.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/05/23/release-0620">StreamPipes release 0.62.0</a></h1><p class="post-meta">May 23, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div  [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/05/23/release-0620">StreamPipes release 0.62.0</a></h1><p class="post-meta">May 23, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div  [...]
 <br></p>
 <p>StreamPipes version 0.62.0 has been released! While the last version brought many features under the hood, this new version totally focuses on features and improvements visible to end users.
 The new version is available on Docker Hub and can be downloaded using our <a href="https://github.com/streampipes/streampipes-installer">installer</a>.</p>
diff --git a/docs/blog/2019/05/23/release-0620/index.html b/docs/blog/2019/05/23/release-0620/index.html
index 5891727..67a8cf4 100644
--- a/docs/blog/2019/05/23/release-0620/index.html
+++ b/docs/blog/2019/05/23/release-0620/index.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/05/23/release-0620">StreamPipes release 0.62.0</a></h1><p class="post-meta">May 23, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div  [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/05/23/release-0620">StreamPipes release 0.62.0</a></h1><p class="post-meta">May 23, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div  [...]
 <br></p>
 <p>StreamPipes version 0.62.0 has been released! While the last version brought many features under the hood, this new version totally focuses on features and improvements visible to end users.
 The new version is available on Docker Hub and can be downloaded using our <a href="https://github.com/streampipes/streampipes-installer">installer</a>.</p>
diff --git a/docs/blog/2019/09/05/release-0630.html b/docs/blog/2019/09/05/release-0630.html
index d236f31..7bba2ee 100644
--- a/docs/blog/2019/09/05/release-0630.html
+++ b/docs/blog/2019/09/05/release-0630.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/09/05/release-0630">StreamPipes release 0.63.0</a></h1><p class="post-meta">September 5, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/09/05/release-0630">StreamPipes release 0.63.0</a></h1><p class="post-meta">September 5, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p [...]
 <br></p>
 <p>StreamPipes version 0.63.0 has been released! Following our release plan to alternate between user-faced and backend-oriented releases, this release contains many (more than 70) features and improvements, mainly on the backend side.
 The new version is available on Docker Hub and can be downloaded using our <a href="https://github.com/streampipes/streampipes-installer">installer</a>.</p>
diff --git a/docs/blog/2019/09/05/release-0630/index.html b/docs/blog/2019/09/05/release-0630/index.html
index d236f31..7bba2ee 100644
--- a/docs/blog/2019/09/05/release-0630/index.html
+++ b/docs/blog/2019/09/05/release-0630/index.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/09/05/release-0630">StreamPipes release 0.63.0</a></h1><p class="post-meta">September 5, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/09/05/release-0630">StreamPipes release 0.63.0</a></h1><p class="post-meta">September 5, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p [...]
 <br></p>
 <p>StreamPipes version 0.63.0 has been released! Following our release plan to alternate between user-faced and backend-oriented releases, this release contains many (more than 70) features and improvements, mainly on the backend side.
 The new version is available on Docker Hub and can be downloaded using our <a href="https://github.com/streampipes/streampipes-installer">installer</a>.</p>
diff --git a/docs/blog/2019/09/19/release-0640.html b/docs/blog/2019/09/19/release-0640.html
index 3f61510..95599fd 100644
--- a/docs/blog/2019/09/19/release-0640.html
+++ b/docs/blog/2019/09/19/release-0640.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/09/19/release-0640">StreamPipes release 0.64.0</a></h1><p class="post-meta">September 19, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></ [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/09/19/release-0640">StreamPipes release 0.64.0</a></h1><p class="post-meta">September 19, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></ [...]
 <br></p>
 <p>Usually, we try to publish a new StreamPipes release every three months. But after attending a very exciting <a href="https://www.apachecon.com/acna19/">ApacheCon</a> last week, where we worked with some Apache communities on a few really cool new features, we decided to release these features as soon as possible.
 So here's StreamPipes 0.64.0!</p>
diff --git a/docs/blog/2019/09/19/release-0640/index.html b/docs/blog/2019/09/19/release-0640/index.html
index 3f61510..95599fd 100644
--- a/docs/blog/2019/09/19/release-0640/index.html
+++ b/docs/blog/2019/09/19/release-0640/index.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/09/19/release-0640">StreamPipes release 0.64.0</a></h1><p class="post-meta">September 19, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></ [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/09/19/release-0640">StreamPipes release 0.64.0</a></h1><p class="post-meta">September 19, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></ [...]
 <br></p>
 <p>Usually, we try to publish a new StreamPipes release every three months. But after attending a very exciting <a href="https://www.apachecon.com/acna19/">ApacheCon</a> last week, where we worked with some Apache communities on a few really cool new features, we decided to release these features as soon as possible.
 So here's StreamPipes 0.64.0!</p>
diff --git a/docs/blog/2019/11/23/release-0650.html b/docs/blog/2019/11/23/release-0650.html
index c5ae4e8..df435a4 100644
--- a/docs/blog/2019/11/23/release-0650.html
+++ b/docs/blog/2019/11/23/release-0650.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/11/23/release-0650">StreamPipes release 0.65.0</a></h1><p class="post-meta">November 23, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/11/23/release-0650">StreamPipes release 0.65.0</a></h1><p class="post-meta">November 23, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p [...]
 <br></p>
 <p>We are happy to announce StreamPipes version 0.65.0! This release brings performance improvements related to the installation process and further reduces the minimum hardware requirements to run StreamPipes.</p>
 <!--truncate-->
diff --git a/docs/blog/2019/11/23/release-0650/index.html b/docs/blog/2019/11/23/release-0650/index.html
index c5ae4e8..df435a4 100644
--- a/docs/blog/2019/11/23/release-0650/index.html
+++ b/docs/blog/2019/11/23/release-0650/index.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,7 +54,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/11/23/release-0650">StreamPipes release 0.65.0</a></h1><p class="post-meta">November 23, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/11/23/release-0650">StreamPipes release 0.65.0</a></h1><p class="post-meta">November 23, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p [...]
 <br></p>
 <p>We are happy to announce StreamPipes version 0.65.0! This release brings performance improvements related to the installation process and further reduces the minimum hardware requirements to run StreamPipes.</p>
 <!--truncate-->
diff --git a/docs/blog/index.html b/docs/blog/index.html
index d3cfb21..91449d4 100644
--- a/docs/blog/index.html
+++ b/docs/blog/index.html
@@ -4,7 +4,7 @@
             {"zIndex":100}
           )
         });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="blog"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav [...]
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="blog"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.65.0-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul cl [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -54,41 +54,41 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="posts"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/11/23/release-0650">StreamPipes release 0.65.0</a></h1><p class="post-meta">November 23, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><d [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="posts"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/11/23/release-0650">StreamPipes release 0.65.0</a></h1><p class="post-meta">November 23, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><d [...]
 <br></p>
 <p>We are happy to announce StreamPipes version 0.65.0! This release brings performance improvements related to the installation process and further reduces the minimum hardware requirements to run StreamPipes.</p>
-</span></div><div class="read-more"><a class="button" href="/docs/blog/2019/11/23/release-0650">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/09/19/release-0640">StreamPipes release 0.64.0</a></h1><p class="post-meta">September 19, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div [...]
+</span></div><div class="read-more"><a class="button" href="/docs/blog/2019/11/23/release-0650">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/09/19/release-0640">StreamPipes release 0.64.0</a></h1><p class="post-meta">September 19, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div [...]
 <br></p>
 <p>Usually, we try to publish a new StreamPipes release every three months. But after attending a very exciting <a href="https://www.apachecon.com/acna19/">ApacheCon</a> last week, where we worked with some Apache communities on a few really cool new features, we decided to release these features as soon as possible.
 So here's StreamPipes 0.64.0!</p>
-</span></div><div class="read-more"><a class="button" href="/docs/blog/2019/09/19/release-0640">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/09/05/release-0630">StreamPipes release 0.63.0</a></h1><p class="post-meta">September 5, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div  [...]
+</span></div><div class="read-more"><a class="button" href="/docs/blog/2019/09/19/release-0640">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/09/05/release-0630">StreamPipes release 0.63.0</a></h1><p class="post-meta">September 5, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div  [...]
 <br></p>
 <p>StreamPipes version 0.63.0 has been released! Following our release plan to alternate between user-faced and backend-oriented releases, this release contains many (more than 70) features and improvements, mainly on the backend side.
 The new version is available on Docker Hub and can be downloaded using our <a href="https://github.com/streampipes/streampipes-installer">installer</a>.</p>
-</span></div><div class="read-more"><a class="button" href="/docs/blog/2019/09/05/release-0630">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/05/23/release-0620">StreamPipes release 0.62.0</a></h1><p class="post-meta">May 23, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div class= [...]
+</span></div><div class="read-more"><a class="button" href="/docs/blog/2019/09/05/release-0630">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/05/23/release-0620">StreamPipes release 0.62.0</a></h1><p class="post-meta">May 23, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div class= [...]
 <br></p>
 <p>StreamPipes version 0.62.0 has been released! While the last version brought many features under the hood, this new version totally focuses on features and improvements visible to end users.
 The new version is available on Docker Hub and can be downloaded using our <a href="https://github.com/streampipes/streampipes-installer">installer</a>.</p>
-</span></div><div class="read-more"><a class="button" href="/docs/blog/2019/05/23/release-0620">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/04/04/release-0610">StreamPipes release 0.61.0</a></h1><p class="post-meta">April 4, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div class [...]
+</span></div><div class="read-more"><a class="button" href="/docs/blog/2019/05/23/release-0620">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2019/04/04/release-0610">StreamPipes release 0.61.0</a></h1><p class="post-meta">April 4, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a></p><div class [...]
 <br></p>
 <p>We are proud to release StreamPipes version 0.61.0, which brings many improvements and some exciting new features that simplify pipeline development!
 The new version, which is already available on Docker Hub and can be downloaded using our <a href="https://github.com/streampipes/streampipes-installer">installer</a> brings over 20 improvements. Under the hood, a reworked event model simplifies the development of new pipeline elements using the built-in SDK.</p>
-</span></div><div class="read-more"><a class="button" href="/docs/blog/2019/04/04/release-0610">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/11/24/container-cli">ContainerCLI: A CLI tool for your Docker Application</a></h1><p class="post-meta">November 24, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/philipp10der" target="_blank" rel="noreferrer noopener">Phi [...]
+</span></div><div class="read-more"><a class="button" href="/docs/blog/2019/04/04/release-0610">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/11/24/container-cli">ContainerCLI: A CLI tool for your Docker Application</a></h1><p class="post-meta">November 24, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/philipp10der" target="_blank" rel="noreferrer noopener">Phi [...]
 <br></p>
 <p>In this blog post, we show how we developed a CLI tool to install and manage StreamPipes.
 In addition, we present a template project that enables you to easily create a CLI tool for your own docker application.
 All you need is a working docker-compose.yml file.</p>
-</span></div><div class="read-more"><a class="button" href="/docs/blog/2018/11/24/container-cli">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/09/17/preview-060">Preview: StreamPipes release 0.60.0</a></h1><p class="post-meta">September 17, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a> [...]
+</span></div><div class="read-more"><a class="button" href="/docs/blog/2018/11/24/container-cli">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/09/17/preview-060">Preview: StreamPipes release 0.60.0</a></h1><p class="post-meta">September 17, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a> [...]
 <br></p>
 <p>It's been a while since our last blog post. However, in the background we are working hard to release the next version of StreamPipes which is currently in the final phase.
 In this post, we'd like to give you a preview of the upcoming StreamPipes version 0.60.0, which brings many new features and improvements.</p>
-</span></div><div class="read-more"><a class="button" href="/docs/blog/2018/09/17/preview-060">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/06/18/how-to-understand-your-machine-data">How to understand your machine data?</a></h1><p class="post-meta">June 18, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/philipp10der" target="_blank" rel="noreferrer noopener">Ph [...]
+</span></div><div class="read-more"><a class="button" href="/docs/blog/2018/09/17/preview-060">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/06/18/how-to-understand-your-machine-data">How to understand your machine data?</a></h1><p class="post-meta">June 18, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/philipp10der" target="_blank" rel="noreferrer noopener">Ph [...]
 <br></p>
 <p>Data is the new oil. Probably everybody of you has heard or read this sentence before.
 It is often stated how important data and data understanding is for companies today.
 But what does this actually mean?  How does the data look like that is produced by your machines and systems?
 And how can we solve the big challenge to turn this raw data into insights that can be understood by humans?</p>
-</span></div><div class="read-more"><a class="button" href="/docs/blog/2018/06/18/how-to-understand-your-machine-data">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/06/14/welcome">Welcome to StreamPipes!</a></h1><p class="post-meta">June 14, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a [...]
+</span></div><div class="read-more"><a class="button" href="/docs/blog/2018/06/18/how-to-understand-your-machine-data">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/docs/blog/2018/06/14/welcome">Welcome to StreamPipes!</a></h1><p class="post-meta">June 14, 2018</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/dominikjriemer" target="_blank" rel="noreferrer noopener">Dominik Riemer</a [...]
 <p>Stay tuned!</p>
 </span></div></article></div><div class="docs-prevnext"></div></div></div></div></div><div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/docs/" class="nav-home"><img src="/docs/img/sp-logo-color.png" alt="StreamPipes" width="66"/></a><div><h5>Docs</h5><a href="/docs/docs/user-guide-introduction">User Guide</a><a href="/docs/docs/dev-guide-introduction">Developer Guide</a><a href="/docs/docs/faq-common-problems">Frequently Asked Questions</a></div><div><h5>Comm [...]
                 document.addEventListener('keyup', function(e) {
diff --git a/docs/docs/0.55.2-pre-asf/dev-guide-architecture.html b/docs/docs/0.55.2-pre-asf/dev-guide-architecture.html
new file mode 100644
index 0000000..c642645
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/dev-guide-architecture.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Architecture · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The following picture illustrates the high-level architecture of StreamPipes:&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Architecture · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;The following picture illustrates the high-level architecture of StreamPipes:&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Architecture</h1></header><article><div><span><p>The following picture illustrates the high-level architecture of StreamPipes:</p>
+<p><img src="/docs/img/architecture/high-level-architecture.png" alt="High Level Architecture of StreamPipes"></p>
+<p>Users mainly interact (besides other UI components) with the <em>Pipeline Editor</em> to create stream processing pipelines based on data streams, data processors and data sinks.
+These reusable pipeline elements are provided by self-contained <em>pipeline element containers</em>, each of them having a semantic description that specifies their characteristics (e.g., input, output and required user input for data processors).
+Each pipeline element container has a REST endpoint that provides these characteristics as a JSON-LD document.</p>
+<p>Pipeline element containers are built using one of several provided <em>wrappers</em>.
+Wrappers abstract from the underlying runtime stream processing framework.
+Currently, the StreamPipes framework provides wrappers for Apache Flink, Esper and algorithms running directly on the JVM.</p>
+<p>The <em>pipeline manager</em> manages the definition and execution of pipelines.
+When creating pipelines, the manager continuously matches the pipeline against its semantic description and provides user guidance in form of recommendations.
+Once a pipeline is started, the pipeline manager invokes the corresponding pipeline element containers.
+The container prepares the actual execution logic and submits the program to the underlying execution engine, e.g., the program is deployed in the Apache Flink cluster.</p>
+<p>Pipeline elements exchange data using one or more message brokers and protocols (e.g., Kafka or MQTT).
+StreamPipes does not rely on a specific broker or message format, but negotiates suitable brokers based on the capabilities of connected pipeline elements.</p>
+<p>Thus, StreamPipes provides a higher-level abstraction of existing stream processing technology by leveraging domain experts to create streaming analytics pipelines in a self-service manner.</p>
+<h2><a class="anchor" aria-hidden="true" id="semantic-description"></a><a href="#semantic-description" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<p>Pipeline elements in StreamPipes are meant to be resuable:</p>
+<ul>
+<li>Data processors and data sink are generic (or domain-specific) elements that express their requirements and are able to operate on any stream that satisfies these requirements.</li>
+<li>Data processors and data sinks can be manually configured by offering possible configuration parameters which users can individually define when creating pipelines.</li>
+<li>Data streams can be connected to any data processor or data sink that matches the capabilities of the stream.</li>
+</ul>
+<p>When users create pipelines by connecting a data stream with a data processor (or further processors), the pipeline manager <em>matches</em> the input stream of a data processor against its requirements.
+This matching is performed based on the _semantic description of each element.
+The semantic description (technically an RDF graph serialized as JSON-LD) can be best understood by seeing it as an envelope around a pipeline element.
+It only provides metadata information, while we don't rely on any RDF at runtime for exchanging events between pipeline elements.
+While RDF-based metadata ensures good understanding of stream capabilities, lightweight event formats at runtime (such as JSON or Thrift) ensure fast processing of events.</p>
+<p>Let's look at an example stream that produces a continuous stream of vehicle positions as illustrated below:</p>
+<p><img src="/docs/img/architecture/semantic-description-stream.png" alt="Semantic description of data streams"></p>
+<p>While the runtime layer produces plain JSON by submitting actual values of the position and the vehicle's plate number, the description layer describes various characteristics of the stream:
+For instance, it defines the event schema (including, besides the data type and the runtime name of each property also a more fine-grained meaning of the property), quality aspects (e.g., the measurement unit of a property or the frequency) and the grounding (e.g., the format used at runtime and the communication protocol used for transmitting events).</p>
+<p>The same accounts for data processors and data sinks:</p>
+<p><img src="/docs/img/architecture/semantic-description-processor.png" alt="Semantic description of data processor"></p>
+<p>Data processors (and, with some differences, data sinks) are annotated by providing metadata information on their required input and output.
+For instance, we can define minimum schema requirements (such as geospatial coordinates that need to be provided by any stream that is connected to a processor), but also required (minimum or maximum) quality levels and supported transport protocols and formats.
+In addition, required configuration parameters users can define during the pipeline definition process are provided by the semantic description.</p>
+<p>Once new pipeline elements are imported into StreamPipes, we store all information provided by the description layer in a central repository and use this information to guide useres through the pipeline definition process.</p>
+<p>Don't worry - you will never be required to model RDF by yourself.
+Our SDK provides convenience methods that help creating the description automatically.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/dev-guide-introduction"><span class="arrow-prev">← </span><span>Introduction</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/dev-guide-development-environment"><span>Development Environment</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#semantic-description">Semantic descripti [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/dev-guide-architecture/index.html b/docs/docs/0.55.2-pre-asf/dev-guide-architecture/index.html
new file mode 100644
index 0000000..c642645
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/dev-guide-architecture/index.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Architecture · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The following picture illustrates the high-level architecture of StreamPipes:&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Architecture · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;The following picture illustrates the high-level architecture of StreamPipes:&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Architecture</h1></header><article><div><span><p>The following picture illustrates the high-level architecture of StreamPipes:</p>
+<p><img src="/docs/img/architecture/high-level-architecture.png" alt="High Level Architecture of StreamPipes"></p>
+<p>Users mainly interact (besides other UI components) with the <em>Pipeline Editor</em> to create stream processing pipelines based on data streams, data processors and data sinks.
+These reusable pipeline elements are provided by self-contained <em>pipeline element containers</em>, each of them having a semantic description that specifies their characteristics (e.g., input, output and required user input for data processors).
+Each pipeline element container has a REST endpoint that provides these characteristics as a JSON-LD document.</p>
+<p>Pipeline element containers are built using one of several provided <em>wrappers</em>.
+Wrappers abstract from the underlying runtime stream processing framework.
+Currently, the StreamPipes framework provides wrappers for Apache Flink, Esper and algorithms running directly on the JVM.</p>
+<p>The <em>pipeline manager</em> manages the definition and execution of pipelines.
+When creating pipelines, the manager continuously matches the pipeline against its semantic description and provides user guidance in form of recommendations.
+Once a pipeline is started, the pipeline manager invokes the corresponding pipeline element containers.
+The container prepares the actual execution logic and submits the program to the underlying execution engine, e.g., the program is deployed in the Apache Flink cluster.</p>
+<p>Pipeline elements exchange data using one or more message brokers and protocols (e.g., Kafka or MQTT).
+StreamPipes does not rely on a specific broker or message format, but negotiates suitable brokers based on the capabilities of connected pipeline elements.</p>
+<p>Thus, StreamPipes provides a higher-level abstraction of existing stream processing technology by leveraging domain experts to create streaming analytics pipelines in a self-service manner.</p>
+<h2><a class="anchor" aria-hidden="true" id="semantic-description"></a><a href="#semantic-description" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<p>Pipeline elements in StreamPipes are meant to be resuable:</p>
+<ul>
+<li>Data processors and data sink are generic (or domain-specific) elements that express their requirements and are able to operate on any stream that satisfies these requirements.</li>
+<li>Data processors and data sinks can be manually configured by offering possible configuration parameters which users can individually define when creating pipelines.</li>
+<li>Data streams can be connected to any data processor or data sink that matches the capabilities of the stream.</li>
+</ul>
+<p>When users create pipelines by connecting a data stream with a data processor (or further processors), the pipeline manager <em>matches</em> the input stream of a data processor against its requirements.
+This matching is performed based on the _semantic description of each element.
+The semantic description (technically an RDF graph serialized as JSON-LD) can be best understood by seeing it as an envelope around a pipeline element.
+It only provides metadata information, while we don't rely on any RDF at runtime for exchanging events between pipeline elements.
+While RDF-based metadata ensures good understanding of stream capabilities, lightweight event formats at runtime (such as JSON or Thrift) ensure fast processing of events.</p>
+<p>Let's look at an example stream that produces a continuous stream of vehicle positions as illustrated below:</p>
+<p><img src="/docs/img/architecture/semantic-description-stream.png" alt="Semantic description of data streams"></p>
+<p>While the runtime layer produces plain JSON by submitting actual values of the position and the vehicle's plate number, the description layer describes various characteristics of the stream:
+For instance, it defines the event schema (including, besides the data type and the runtime name of each property also a more fine-grained meaning of the property), quality aspects (e.g., the measurement unit of a property or the frequency) and the grounding (e.g., the format used at runtime and the communication protocol used for transmitting events).</p>
+<p>The same accounts for data processors and data sinks:</p>
+<p><img src="/docs/img/architecture/semantic-description-processor.png" alt="Semantic description of data processor"></p>
+<p>Data processors (and, with some differences, data sinks) are annotated by providing metadata information on their required input and output.
+For instance, we can define minimum schema requirements (such as geospatial coordinates that need to be provided by any stream that is connected to a processor), but also required (minimum or maximum) quality levels and supported transport protocols and formats.
+In addition, required configuration parameters users can define during the pipeline definition process are provided by the semantic description.</p>
+<p>Once new pipeline elements are imported into StreamPipes, we store all information provided by the description layer in a central repository and use this information to guide useres through the pipeline definition process.</p>
+<p>Don't worry - you will never be required to model RDF by yourself.
+Our SDK provides convenience methods that help creating the description automatically.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/dev-guide-introduction"><span class="arrow-prev">← </span><span>Introduction</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/dev-guide-development-environment"><span>Development Environment</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#semantic-description">Semantic descripti [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/dev-guide-development-environment.html b/docs/docs/0.55.2-pre-asf/dev-guide-development-environment.html
new file mode 100644
index 0000000..95c4d0c
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/dev-guide-development-environment.html
@@ -0,0 +1,272 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Development Environment · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;In this section, we describe our recommended minimum setup for locally setting up a development instance of StreamPipes needed to develop, run and test new pipeline elements.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Development Environment · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;In this section, we describe our recommended minimum setup for locally setting up a development instance of StreamPipes needed to develop, run and  [...]
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Development Environment</h1></header><article><div><span><p>In this section, we describe our recommended minimum setup for locally setting up a development instance of StreamPipes needed to develop, run and test new pipeline elements.</p>
+<h2><a class="anchor" aria-hidden="true" id="ide-required-dev-tools"></a><a href="#ide-required-dev-tools" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<p>StreamPipes does not have specific requirements on the IDE - so feel free to choose the IDE of your choice.
+The only requirements in terms of development tools are that you have Java 8 and Maven installed.</p>
+<h2><a class="anchor" aria-hidden="true" id="docker-based-local-streampipes-instance"></a><a href="#docker-based-local-streampipes-instance" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2  [...]
+<p>In order to quickly test developed pipeline elements without needing to install all services required by StreamPipes, we provide a lightweight docker-compose file for development purposes.
+If you have Docker installed on your development machine, simply run the following docker-compose file, which has been successfully tested on both Linux and Windows-based operating systems.</p>
+<h3><a class="anchor" aria-hidden="true" id="docker-compose-file"></a><a href="#docker-compose-file" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p><details class="info">
+<summary>docker-compose.yml</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose"></a><a href="#docker-compose" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">"2"</span>
+<span class="hljs-attr">services:</span>
+  <span class="hljs-attr">consul:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">consul</span>
+    <span class="hljs-attr">environment:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_LOCAL_CONFIG={\"disable_update_check\": true}"</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_BIND_INTERFACE=eth0"</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_HTTP_ADDR=0.0.0.0"</span>
+    <span class="hljs-attr">entrypoint:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">consul</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">agent</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-server</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-bootstrap-expect=1</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-data-dir=/consul/data</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-node=consul-one</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-bind={{</span> <span class="hljs-string">GetInterfaceIP</span> <span class="hljs-string">"eth0"</span> <span class="hljs-string">}}</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-client=0.0.0.0</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-enable-script-checks=true</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-ui</span>
+    <span class="hljs-attr">volumes:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">./config/consul:/consul/data</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"8500:8500"</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"8600:8600"</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+        <span class="hljs-attr">ipv4_address:</span> <span class="hljs-number">172.30</span><span class="hljs-number">.0</span><span class="hljs-number">.9</span>
+
+  <span class="hljs-attr">zookeeper:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">wurstmeister/zookeeper</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"2181:2181"</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+
+  <span class="hljs-attr">kafka:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">wurstmeister/kafka:0.10.0.1</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"9092:9092"</span>
+    <span class="hljs-attr">environment:</span>
+      <span class="hljs-attr">KAFKA_ADVERTISED_HOST_NAME:</span> <span class="hljs-comment">###TODO ADD HOSTNAME HERE ###</span>
+      <span class="hljs-attr">KAFKA_ZOOKEEPER_CONNECT:</span> <span class="hljs-string">zookeeper:2181</span>
+    <span class="hljs-attr">volumes:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">/var/run/docker.sock:/var/run/docker.sock</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+
+  <span class="hljs-attr">backend:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/ce/backend:SNAPSHOT</span>
+    <span class="hljs-attr">depends_on:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"consul"</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"8030:8030"</span>
+    <span class="hljs-attr">volumes:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">./config:/root/.streampipes</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">./config/aduna:/root/.aduna</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+
+  <span class="hljs-attr">activemq:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/services/activemq</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"61616:61616"</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"61614:61614"</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"8161:8161"</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+
+  <span class="hljs-attr">couchdb:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">couchdb</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"5984:5984"</span>
+    <span class="hljs-attr">volumes:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">./config/couchdb/data:/usr/local/var/lib/couchdb</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+
+  <span class="hljs-attr">jobmanager:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/services/flink</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"8081:8099"</span>
+    <span class="hljs-attr">command:</span> <span class="hljs-string">jobmanager</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+
+  <span class="hljs-attr">taskmanager:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/services/flink</span>
+    <span class="hljs-attr">command:</span> <span class="hljs-string">taskmanager</span>
+    <span class="hljs-attr">environment:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">FLINK_NUM_SLOTS=20</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+
+  <span class="hljs-attr">nginx:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/ui/dev</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"80:80"</span>
+    <span class="hljs-attr">depends_on:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">backend</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+
+<span class="hljs-attr">networks:</span>
+  <span class="hljs-attr">spnet:</span>
+    <span class="hljs-attr">driver:</span> <span class="hljs-string">bridge</span>
+    <span class="hljs-attr">ipam:</span>
+     <span class="hljs-attr">config:</span>
+       <span class="hljs-bullet">-</span> <span class="hljs-attr">subnet:</span> <span class="hljs-number">172.30</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><span class="hljs-string">/16</span>
+         <span class="hljs-attr">gateway:</span> <span class="hljs-number">172.30</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span>
+</code></pre>
+<p></details></p>
+<p>Do not forget to replace the ##Add HOSTNAME## variable in the compose file with the hostname of your machine!</p>
+<h2><a class="anchor" aria-hidden="true" id="starter-projects"></a><a href="#starter-projects" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<p>Now, once you've started the development instance, you are ready to develop your very first pipeline element.
+Instead of starting from scratch, we recommend using either one of our sample projects as a starting point or one of our provided maven archetypes:</p>
+<h3><a class="anchor" aria-hidden="true" id="sample-projects"></a><a href="#sample-projects" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>We provide basic skeletons for defining data sources, data processors and data sinks in form of sample projects.
+These are available on Github as defined below. Just clone the project and change the corresponding groupId and artifactId as you like.</p>
+<ul>
+<li><p>templates-sources (<a href="https://github.com/streampipes/templates-sources">https://github.com/streampipes/templates-sources</a>)
+This sample project can be used to connect new data streams with StreamPipes.</p></li>
+<li><p>templates-flink (<a href="https://github.com/streampipes/templates-flink">https://github.com/streampipes/templates-flink</a>)
+This sample project can be used to define new data processors and data sinks for StreamPipes that are executed in an Apache Flink cluster.</p></li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="maven-archetypes"></a><a href="#maven-archetypes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<p>(coming soon)</p>
+<h3><a class="anchor" aria-hidden="true" id="starting-from-scratch"></a><a href="#starting-from-scratch" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
+<p>In order to develop a new pipeline element from scratch, you need to create a new Maven project and import the following dependencies:</p>
+<p><details class="info">
+<summary>pom.xml</summary></p>
+<pre><code class="hljs"><span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-container-standalone<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+
+<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-sdk<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+
+<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-vocabulary<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+
+<span class="hljs-comment">&lt;!-- This dependency needs to be imported if you plan to connect a new data stream with StreamPipes --&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-sources<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+
+<span class="hljs-comment">&lt;!-- This dependency needs to be imported if you plan to develop a new data processor or data sink using the Apache Flink wrapper --&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-wrapper-flink<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+
+<span class="hljs-comment">&lt;!-- This dependency needs to be imported if you plan to develop a new data processor or data sink which is running directly on the JVM --&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-wrapper-standalone<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+</code></pre>
+<p></details></p>
+<p>The following three dependencies are mandatory:</p>
+<ul>
+<li><code>streampipes-container-standalone</code>, defines that we are going to create a new pipeline element where the description will be accessible through an embedded web server.</li>
+<li><code>streampipes-sdk</code> imports the SDK which provides many convencience functions to create new pipeline elements.</li>
+<li><code>streampipes-vocabulary</code> imports various RDF vocabularies which are used by the SDK to auto-generate the semantic description of pipeline elements.</li>
+</ul>
+<p>The following three dependencies might be optional depending on the pipeline element type you plan to create:</p>
+<ul>
+<li><code>streampipes-sources</code> should be used in case you plan to connect a new data stream with StreamPipes.</li>
+<li><code>streampipes-wrapper-flink</code> should be used in case you plan to connect a new data processor or data sink that uses Apache Flink for processing events at runtime.</li>
+<li><code>streampipes-wrapper-standalone</code> should be used in case you plan to connect a new data processor or data sink that does not use an external processing engine. Events are directly processed in a single-host fashion.</li>
+</ul>
+<p>Finally, this dependency will provide abstract classes to define data sources and streams.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/dev-guide-architecture"><span class="arrow-prev">← </span><span>Architecture</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-sources"><span>Tutorial: Data Sources</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#ide-required-dev-tools">IDE &amp; required dev t [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/dev-guide-development-environment/index.html b/docs/docs/0.55.2-pre-asf/dev-guide-development-environment/index.html
new file mode 100644
index 0000000..95c4d0c
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/dev-guide-development-environment/index.html
@@ -0,0 +1,272 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Development Environment · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;In this section, we describe our recommended minimum setup for locally setting up a development instance of StreamPipes needed to develop, run and test new pipeline elements.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Development Environment · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;In this section, we describe our recommended minimum setup for locally setting up a development instance of StreamPipes needed to develop, run and  [...]
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Development Environment</h1></header><article><div><span><p>In this section, we describe our recommended minimum setup for locally setting up a development instance of StreamPipes needed to develop, run and test new pipeline elements.</p>
+<h2><a class="anchor" aria-hidden="true" id="ide-required-dev-tools"></a><a href="#ide-required-dev-tools" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<p>StreamPipes does not have specific requirements on the IDE - so feel free to choose the IDE of your choice.
+The only requirements in terms of development tools are that you have Java 8 and Maven installed.</p>
+<h2><a class="anchor" aria-hidden="true" id="docker-based-local-streampipes-instance"></a><a href="#docker-based-local-streampipes-instance" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2  [...]
+<p>In order to quickly test developed pipeline elements without needing to install all services required by StreamPipes, we provide a lightweight docker-compose file for development purposes.
+If you have Docker installed on your development machine, simply run the following docker-compose file, which has been successfully tested on both Linux and Windows-based operating systems.</p>
+<h3><a class="anchor" aria-hidden="true" id="docker-compose-file"></a><a href="#docker-compose-file" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p><details class="info">
+<summary>docker-compose.yml</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose"></a><a href="#docker-compose" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">"2"</span>
+<span class="hljs-attr">services:</span>
+  <span class="hljs-attr">consul:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">consul</span>
+    <span class="hljs-attr">environment:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_LOCAL_CONFIG={\"disable_update_check\": true}"</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_BIND_INTERFACE=eth0"</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_HTTP_ADDR=0.0.0.0"</span>
+    <span class="hljs-attr">entrypoint:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">consul</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">agent</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-server</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-bootstrap-expect=1</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-data-dir=/consul/data</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-node=consul-one</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-bind={{</span> <span class="hljs-string">GetInterfaceIP</span> <span class="hljs-string">"eth0"</span> <span class="hljs-string">}}</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-client=0.0.0.0</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-enable-script-checks=true</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-ui</span>
+    <span class="hljs-attr">volumes:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">./config/consul:/consul/data</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"8500:8500"</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"8600:8600"</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+        <span class="hljs-attr">ipv4_address:</span> <span class="hljs-number">172.30</span><span class="hljs-number">.0</span><span class="hljs-number">.9</span>
+
+  <span class="hljs-attr">zookeeper:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">wurstmeister/zookeeper</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"2181:2181"</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+
+  <span class="hljs-attr">kafka:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">wurstmeister/kafka:0.10.0.1</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"9092:9092"</span>
+    <span class="hljs-attr">environment:</span>
+      <span class="hljs-attr">KAFKA_ADVERTISED_HOST_NAME:</span> <span class="hljs-comment">###TODO ADD HOSTNAME HERE ###</span>
+      <span class="hljs-attr">KAFKA_ZOOKEEPER_CONNECT:</span> <span class="hljs-string">zookeeper:2181</span>
+    <span class="hljs-attr">volumes:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">/var/run/docker.sock:/var/run/docker.sock</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+
+  <span class="hljs-attr">backend:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/ce/backend:SNAPSHOT</span>
+    <span class="hljs-attr">depends_on:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"consul"</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"8030:8030"</span>
+    <span class="hljs-attr">volumes:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">./config:/root/.streampipes</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">./config/aduna:/root/.aduna</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+
+  <span class="hljs-attr">activemq:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/services/activemq</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"61616:61616"</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"61614:61614"</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"8161:8161"</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+
+  <span class="hljs-attr">couchdb:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">couchdb</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"5984:5984"</span>
+    <span class="hljs-attr">volumes:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">./config/couchdb/data:/usr/local/var/lib/couchdb</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+
+  <span class="hljs-attr">jobmanager:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/services/flink</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"8081:8099"</span>
+    <span class="hljs-attr">command:</span> <span class="hljs-string">jobmanager</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+
+  <span class="hljs-attr">taskmanager:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/services/flink</span>
+    <span class="hljs-attr">command:</span> <span class="hljs-string">taskmanager</span>
+    <span class="hljs-attr">environment:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">FLINK_NUM_SLOTS=20</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+
+  <span class="hljs-attr">nginx:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/ui/dev</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"80:80"</span>
+    <span class="hljs-attr">depends_on:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">backend</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+
+<span class="hljs-attr">networks:</span>
+  <span class="hljs-attr">spnet:</span>
+    <span class="hljs-attr">driver:</span> <span class="hljs-string">bridge</span>
+    <span class="hljs-attr">ipam:</span>
+     <span class="hljs-attr">config:</span>
+       <span class="hljs-bullet">-</span> <span class="hljs-attr">subnet:</span> <span class="hljs-number">172.30</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><span class="hljs-string">/16</span>
+         <span class="hljs-attr">gateway:</span> <span class="hljs-number">172.30</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span>
+</code></pre>
+<p></details></p>
+<p>Do not forget to replace the ##Add HOSTNAME## variable in the compose file with the hostname of your machine!</p>
+<h2><a class="anchor" aria-hidden="true" id="starter-projects"></a><a href="#starter-projects" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<p>Now, once you've started the development instance, you are ready to develop your very first pipeline element.
+Instead of starting from scratch, we recommend using either one of our sample projects as a starting point or one of our provided maven archetypes:</p>
+<h3><a class="anchor" aria-hidden="true" id="sample-projects"></a><a href="#sample-projects" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>We provide basic skeletons for defining data sources, data processors and data sinks in form of sample projects.
+These are available on Github as defined below. Just clone the project and change the corresponding groupId and artifactId as you like.</p>
+<ul>
+<li><p>templates-sources (<a href="https://github.com/streampipes/templates-sources">https://github.com/streampipes/templates-sources</a>)
+This sample project can be used to connect new data streams with StreamPipes.</p></li>
+<li><p>templates-flink (<a href="https://github.com/streampipes/templates-flink">https://github.com/streampipes/templates-flink</a>)
+This sample project can be used to define new data processors and data sinks for StreamPipes that are executed in an Apache Flink cluster.</p></li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="maven-archetypes"></a><a href="#maven-archetypes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<p>(coming soon)</p>
+<h3><a class="anchor" aria-hidden="true" id="starting-from-scratch"></a><a href="#starting-from-scratch" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
+<p>In order to develop a new pipeline element from scratch, you need to create a new Maven project and import the following dependencies:</p>
+<p><details class="info">
+<summary>pom.xml</summary></p>
+<pre><code class="hljs"><span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-container-standalone<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+
+<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-sdk<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+
+<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-vocabulary<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+
+<span class="hljs-comment">&lt;!-- This dependency needs to be imported if you plan to connect a new data stream with StreamPipes --&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-sources<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+
+<span class="hljs-comment">&lt;!-- This dependency needs to be imported if you plan to develop a new data processor or data sink using the Apache Flink wrapper --&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-wrapper-flink<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+
+<span class="hljs-comment">&lt;!-- This dependency needs to be imported if you plan to develop a new data processor or data sink which is running directly on the JVM --&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-wrapper-standalone<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+</code></pre>
+<p></details></p>
+<p>The following three dependencies are mandatory:</p>
+<ul>
+<li><code>streampipes-container-standalone</code>, defines that we are going to create a new pipeline element where the description will be accessible through an embedded web server.</li>
+<li><code>streampipes-sdk</code> imports the SDK which provides many convencience functions to create new pipeline elements.</li>
+<li><code>streampipes-vocabulary</code> imports various RDF vocabularies which are used by the SDK to auto-generate the semantic description of pipeline elements.</li>
+</ul>
+<p>The following three dependencies might be optional depending on the pipeline element type you plan to create:</p>
+<ul>
+<li><code>streampipes-sources</code> should be used in case you plan to connect a new data stream with StreamPipes.</li>
+<li><code>streampipes-wrapper-flink</code> should be used in case you plan to connect a new data processor or data sink that uses Apache Flink for processing events at runtime.</li>
+<li><code>streampipes-wrapper-standalone</code> should be used in case you plan to connect a new data processor or data sink that does not use an external processing engine. Events are directly processed in a single-host fashion.</li>
+</ul>
+<p>Finally, this dependency will provide abstract classes to define data sources and streams.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/dev-guide-architecture"><span class="arrow-prev">← </span><span>Architecture</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-sources"><span>Tutorial: Data Sources</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#ide-required-dev-tools">IDE &amp; required dev t [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/dev-guide-introduction.html b/docs/docs/0.55.2-pre-asf/dev-guide-introduction.html
new file mode 100644
index 0000000..473bf31
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/dev-guide-introduction.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Introduction · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;StreamPipes is an open platform which can be easily extended at runtime by adding new data streams, data processors and data sinks.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Introduction · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;StreamPipes is an open platform which can be easily extended at runtime by adding new data streams, data processors and data sinks.&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Introduction</h1></header><article><div><span><p>StreamPipes is an open platform which can be easily extended at runtime by adding new data streams, data processors and data sinks.
+When developing new components, usually multiple elements, called <em>pipeline elements</em>, are bundled into a self-contained <em>pipeline element container</em>. This container is deployed as a standalone microservice. This service is self-descriptive and exposes its description (see below for a detailed explanation) to the StreamPipes management backend. Once the service is deployed, it can be installed using the StreamPipes UI and all elements provided by this service are ready to b [...]
+<p>To ease the extension of StreamPipes, we provide a powerful Software Development Kit (SDK) that allows you to define new pipeline elements for your StreamPipes instance.</p>
+<h2><a class="anchor" aria-hidden="true" id="concepts"></a><a href="#concepts" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>In this section, we briefly describe the main concepts of StreamPipes. Although it might give an abstract overview, we are sure that many concepts will be more clear once you've created your very first pipeline element yourself. So check out our tutorials!</p>
+<h3><a class="anchor" aria-hidden="true" id="data-stream"></a><a href="#data-stream" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
+<p>A <em>Data Stream</em> is the main concept to describe the source of a pipeline. <em>DataStreams</em> consist of
+an RDF <em>description</em> (which will be generated automatically when using the SDK) and a runtime
+<em>implementation</em>. The description includes information on the <em>schema</em> of a data stream, e.g., measurement properties the payload of a stream provides.
+Furthermore, the description contains information on the <em>grounding</em>, such as the transport format (e.g., JSON) and transport protoocol (e.g., MQTT or Kafka).
+One or more data streams are assigned to a <em>Data Source</em> to improve discovery of existing streams.</p>
+<h3><a class="anchor" aria-hidden="true" id="data-processor"></a><a href="#data-processor" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p><em>Data Processors</em> transform on or more input event streams to an output event stream. Data processors can be stateless (e.g., filter operations on every event of an input stream) or stateful (e.g., time-based aggregations using sliding windows).
+Similar to data streams, processors consist of an RDF <em>description</em> and a corresponding <em>implementation</em>. The description is being used by the StreamPipes backend in order to determine the compatibility of a data processor and an input event stream and includes information the required minimum event schema as well as required user input and the definition of the output event stream.</p>
+<p>The implementation of a data processor can be defined using a set of provided <em>runtime wrappers</em>. These wrappers define where computation logic actually takes place once a pipeline was started. We currently provide runtime wrappers for various Big Data processing engines (e.g., Apache Flink) and lightweight standalone processors.</p>
+<h3><a class="anchor" aria-hidden="true" id="data-sink"></a><a href="#data-sink" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>The concept of <em>Data Sinks</em> is very similar to the concept of data processors with the exception that sinks do not produce any output streams.
+Therefore, sinks are used in StreamPipes to mark the end of a pipeline and reflect 3rd party applications, notifications or dashboard components.</p>
+<h3><a class="anchor" aria-hidden="true" id="static-property"></a><a href="#static-property" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>Some data processors or data sinks might require input from users when pipelines are created using these elements.
+For instance, a generic filter component might require information on the filter operation and a threshold value.
+Such required user input can be modeled by defining <em>static properties</em>. Static properties can be defined in many ways, e.g., plain text input, selections (e.g., radio buttons) or can be linked to separately stored domain knowledge.
+The SDK contains many convenient functions that help you defining static properties.</p>
+<h3><a class="anchor" aria-hidden="true" id="output-strategy"></a><a href="#output-strategy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>As mentioned above, data processors also define the output event schema. However, as data processors in StreamPipes are often generic and can therefore be linked to any event stream that matches the input requirement of a data processor, the exact output schema is not known in the development phase when a data processor is defined.
+Therefore, data processors define their output using <em>output strategies</em>. Such strategies describe the transformation process, i.e., how an input stream is transformed to an output stream.
+Multiple pre-defined output strategies exist that you can choose depending on the behaviour of a data processor.
+For instance, the output schema of a filter component is usually similar to the input schema, so you would use a <em>KeepOutputStrategy</em>.
+On the other hand, an enrichment component usually adds additional properties to an input schema - this can be defined using a <em>AppendOutputStrategy</em>.
+Sometimes you want to let the user define the output schema. In this case, a <em>CustomOutputStrategy</em> can be defined.</p>
+<h2><a class="anchor" aria-hidden="true" id="clients"></a><a href="#clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>As stated in the beginning, pipeline element containers are deployed as self-contained microservices. The client types describes the environment this service is running in.
+Currently supported clients are <em>standalone</em>, which defines a standalone service that contains both the description and implementation part (which is often submitted to a computing cluster prior to pipeline execution) in addition to an embedded Jetty web server which creates a fat jar file, and <em>embedded</em>, which creates a war file that can be imported into an existing application server.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/dev-guide-architecture"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#concepts">Concepts</a><ul class="toc-headings"><li><a href="#data-stream">Data Stream</a></li><li><a href="#data-processor">Data Processor</a></li><li><a href="#data-sink">Data Sink</a></li><li><a href="#stati [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/dev-guide-introduction/index.html b/docs/docs/0.55.2-pre-asf/dev-guide-introduction/index.html
new file mode 100644
index 0000000..473bf31
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/dev-guide-introduction/index.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Introduction · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;StreamPipes is an open platform which can be easily extended at runtime by adding new data streams, data processors and data sinks.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Introduction · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;StreamPipes is an open platform which can be easily extended at runtime by adding new data streams, data processors and data sinks.&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Introduction</h1></header><article><div><span><p>StreamPipes is an open platform which can be easily extended at runtime by adding new data streams, data processors and data sinks.
+When developing new components, usually multiple elements, called <em>pipeline elements</em>, are bundled into a self-contained <em>pipeline element container</em>. This container is deployed as a standalone microservice. This service is self-descriptive and exposes its description (see below for a detailed explanation) to the StreamPipes management backend. Once the service is deployed, it can be installed using the StreamPipes UI and all elements provided by this service are ready to b [...]
+<p>To ease the extension of StreamPipes, we provide a powerful Software Development Kit (SDK) that allows you to define new pipeline elements for your StreamPipes instance.</p>
+<h2><a class="anchor" aria-hidden="true" id="concepts"></a><a href="#concepts" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>In this section, we briefly describe the main concepts of StreamPipes. Although it might give an abstract overview, we are sure that many concepts will be more clear once you've created your very first pipeline element yourself. So check out our tutorials!</p>
+<h3><a class="anchor" aria-hidden="true" id="data-stream"></a><a href="#data-stream" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
+<p>A <em>Data Stream</em> is the main concept to describe the source of a pipeline. <em>DataStreams</em> consist of
+an RDF <em>description</em> (which will be generated automatically when using the SDK) and a runtime
+<em>implementation</em>. The description includes information on the <em>schema</em> of a data stream, e.g., measurement properties the payload of a stream provides.
+Furthermore, the description contains information on the <em>grounding</em>, such as the transport format (e.g., JSON) and transport protoocol (e.g., MQTT or Kafka).
+One or more data streams are assigned to a <em>Data Source</em> to improve discovery of existing streams.</p>
+<h3><a class="anchor" aria-hidden="true" id="data-processor"></a><a href="#data-processor" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p><em>Data Processors</em> transform on or more input event streams to an output event stream. Data processors can be stateless (e.g., filter operations on every event of an input stream) or stateful (e.g., time-based aggregations using sliding windows).
+Similar to data streams, processors consist of an RDF <em>description</em> and a corresponding <em>implementation</em>. The description is being used by the StreamPipes backend in order to determine the compatibility of a data processor and an input event stream and includes information the required minimum event schema as well as required user input and the definition of the output event stream.</p>
+<p>The implementation of a data processor can be defined using a set of provided <em>runtime wrappers</em>. These wrappers define where computation logic actually takes place once a pipeline was started. We currently provide runtime wrappers for various Big Data processing engines (e.g., Apache Flink) and lightweight standalone processors.</p>
+<h3><a class="anchor" aria-hidden="true" id="data-sink"></a><a href="#data-sink" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>The concept of <em>Data Sinks</em> is very similar to the concept of data processors with the exception that sinks do not produce any output streams.
+Therefore, sinks are used in StreamPipes to mark the end of a pipeline and reflect 3rd party applications, notifications or dashboard components.</p>
+<h3><a class="anchor" aria-hidden="true" id="static-property"></a><a href="#static-property" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>Some data processors or data sinks might require input from users when pipelines are created using these elements.
+For instance, a generic filter component might require information on the filter operation and a threshold value.
+Such required user input can be modeled by defining <em>static properties</em>. Static properties can be defined in many ways, e.g., plain text input, selections (e.g., radio buttons) or can be linked to separately stored domain knowledge.
+The SDK contains many convenient functions that help you defining static properties.</p>
+<h3><a class="anchor" aria-hidden="true" id="output-strategy"></a><a href="#output-strategy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>As mentioned above, data processors also define the output event schema. However, as data processors in StreamPipes are often generic and can therefore be linked to any event stream that matches the input requirement of a data processor, the exact output schema is not known in the development phase when a data processor is defined.
+Therefore, data processors define their output using <em>output strategies</em>. Such strategies describe the transformation process, i.e., how an input stream is transformed to an output stream.
+Multiple pre-defined output strategies exist that you can choose depending on the behaviour of a data processor.
+For instance, the output schema of a filter component is usually similar to the input schema, so you would use a <em>KeepOutputStrategy</em>.
+On the other hand, an enrichment component usually adds additional properties to an input schema - this can be defined using a <em>AppendOutputStrategy</em>.
+Sometimes you want to let the user define the output schema. In this case, a <em>CustomOutputStrategy</em> can be defined.</p>
+<h2><a class="anchor" aria-hidden="true" id="clients"></a><a href="#clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>As stated in the beginning, pipeline element containers are deployed as self-contained microservices. The client types describes the environment this service is running in.
+Currently supported clients are <em>standalone</em>, which defines a standalone service that contains both the description and implementation part (which is often submitted to a computing cluster prior to pipeline execution) in addition to an embedded Jetty web server which creates a fat jar file, and <em>embedded</em>, which creates a war file that can be imported into an existing application server.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/dev-guide-architecture"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#concepts">Concepts</a><ul class="toc-headings"><li><a href="#data-stream">Data Stream</a></li><li><a href="#data-processor">Data Processor</a></li><li><a href="#data-sink">Data Sink</a></li><li><a href="#stati [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-processors.html b/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-processors.html
new file mode 100644
index 0000000..4bf28ce
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-processors.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>SDK Guide Processors · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot;true&quot; class=&quot;hash-li [...]
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="SDK Guide Processors · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidd [...]
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">SDK Guide Processors</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3 [...]
+<p>(coming soon, please check the <a href="/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-processors">tutorial</a> to learn how to define data processors)</p>
+<h2><a class="anchor" aria-hidden="true" id="sdk-reference"></a><a href="#sdk-reference" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The complete SDK reference for defining data processors will follow soon. Please check the SDK's Javadoc for now!</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sources"><span class="arrow-prev">← </span><span>SDK Guide: Data Sources</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sinks"><span>SDK Guide: Data Sinks</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#project-setup">Project Setup</a></ [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-processors/index.html b/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-processors/index.html
new file mode 100644
index 0000000..4bf28ce
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-processors/index.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>SDK Guide Processors · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot;true&quot; class=&quot;hash-li [...]
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="SDK Guide Processors · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidd [...]
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">SDK Guide Processors</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3 [...]
+<p>(coming soon, please check the <a href="/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-processors">tutorial</a> to learn how to define data processors)</p>
+<h2><a class="anchor" aria-hidden="true" id="sdk-reference"></a><a href="#sdk-reference" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The complete SDK reference for defining data processors will follow soon. Please check the SDK's Javadoc for now!</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sources"><span class="arrow-prev">← </span><span>SDK Guide: Data Sources</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sinks"><span>SDK Guide: Data Sinks</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#project-setup">Project Setup</a></ [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sinks.html b/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sinks.html
new file mode 100644
index 0000000..4fbd60a
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sinks.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>SDK Guide Sinks · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&qu [...]
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="SDK Guide Sinks · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&q [...]
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">SDK Guide Sinks</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69 [...]
+<p>(coming soon, please check the <a href="/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-processors">tutorial</a> to learn how to define sinks)</p>
+<h2><a class="anchor" aria-hidden="true" id="sdk-reference"></a><a href="#sdk-reference" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The complete SDK reference for defining data sinks will follow soon. Please check the SDK's Javadoc for now!</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-processors"><span class="arrow-prev">← </span><span>SDK Guide: Data Processors</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#project-setup">Project Setup</a></li><li><a href="#sdk-reference">SDK reference</a></li></ul></nav></div><div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/doc [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sinks/index.html b/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sinks/index.html
new file mode 100644
index 0000000..4fbd60a
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sinks/index.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>SDK Guide Sinks · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&qu [...]
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="SDK Guide Sinks · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&q [...]
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">SDK Guide Sinks</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69 [...]
+<p>(coming soon, please check the <a href="/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-processors">tutorial</a> to learn how to define sinks)</p>
+<h2><a class="anchor" aria-hidden="true" id="sdk-reference"></a><a href="#sdk-reference" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The complete SDK reference for defining data sinks will follow soon. Please check the SDK's Javadoc for now!</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-processors"><span class="arrow-prev">← </span><span>SDK Guide: Data Processors</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#project-setup">Project Setup</a></li><li><a href="#sdk-reference">SDK reference</a></li></ul></nav></div><div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/doc [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sources.html b/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sources.html
new file mode 100644
index 0000000..15cd227
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sources.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>SDK Guide Sources · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link& [...]
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="SDK Guide Sources · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden= [...]
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">SDK Guide Sources</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1. [...]
+<p>Open the IDE of your choice and create a new maven project. Add the following dependencies to your pom file:</p>
+<p><details class="info">
+<summary>pom.xml</summary></p>
+<pre><code class="hljs css language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-container-standalone<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+
+<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-sdk<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+
+<span class="hljs-comment">&lt;!-- This dependency needs to be imported if you plan to connect a new data stream with StreamPipes --&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-sources<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+</code></pre>
+<p></details></p>
+<p>Now you need to create three new classes:</p>
+<p>First, create a new class <code>MyStreamController</code> as follows:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.streampipes.model.SpDataStream;
+<span class="hljs-keyword">import</span> org.streampipes.model.graph.DataSourceDescription;
+<span class="hljs-keyword">import</span> org.streampipes.sources.AbstractAlreadyExistingStream;
+
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyStreamController</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">AbstractAlreadyExistingStream</span> </span>{
+
+  <span class="hljs-meta">@Override</span>
+  <span class="hljs-function"><span class="hljs-keyword">public</span> SpDataStream <span class="hljs-title">declareModel</span><span class="hljs-params">(DataSourceDescription sep)</span> </span>{
+
+  }
+}
+</code></pre>
+<p>Next, create a new class <code>MyStreamSource</code> as follows:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.streampipes.container.declarer.EventStreamDeclarer;
+<span class="hljs-keyword">import</span> org.streampipes.container.declarer.SemanticEventProducerDeclarer;
+<span class="hljs-keyword">import</span> org.streampipes.model.graph.DataSourceDescription;
+
+<span class="hljs-keyword">import</span> java.util.List;
+
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyStreamSource</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">SemanticEventProducerDeclarer</span> </span>{
+
+    <span class="hljs-meta">@Override</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> DataSourceDescription <span class="hljs-title">declareModel</span><span class="hljs-params">()</span> </span>{
+      <span class="hljs-keyword">return</span> <span class="hljs-keyword">null</span>;
+    }
+
+    <span class="hljs-meta">@Override</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> List&lt;EventStreamDeclarer&gt; <span class="hljs-title">getEventStreams</span><span class="hljs-params">()</span> </span>{
+        <span class="hljs-keyword">return</span> <span class="hljs-keyword">null</span>;
+    }
+}
+</code></pre>
+<h2><a class="anchor" aria-hidden="true" id="sdk-reference"></a><a href="#sdk-reference" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The complete SDK reference for defining data processors will follow soon. Please check the SDK's Javadoc for now!</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-processors"><span class="arrow-prev">← </span><span>Tutorial: Data Processors</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-processors"><span>SDK Guide: Data Processors</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#project-setup">Proje [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sources/index.html b/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sources/index.html
new file mode 100644
index 0000000..15cd227
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sources/index.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>SDK Guide Sources · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link& [...]
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="SDK Guide Sources · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden= [...]
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">SDK Guide Sources</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1. [...]
+<p>Open the IDE of your choice and create a new maven project. Add the following dependencies to your pom file:</p>
+<p><details class="info">
+<summary>pom.xml</summary></p>
+<pre><code class="hljs css language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-container-standalone<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+
+<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-sdk<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+
+<span class="hljs-comment">&lt;!-- This dependency needs to be imported if you plan to connect a new data stream with StreamPipes --&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-sources<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
+</code></pre>
+<p></details></p>
+<p>Now you need to create three new classes:</p>
+<p>First, create a new class <code>MyStreamController</code> as follows:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.streampipes.model.SpDataStream;
+<span class="hljs-keyword">import</span> org.streampipes.model.graph.DataSourceDescription;
+<span class="hljs-keyword">import</span> org.streampipes.sources.AbstractAlreadyExistingStream;
+
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyStreamController</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">AbstractAlreadyExistingStream</span> </span>{
+
+  <span class="hljs-meta">@Override</span>
+  <span class="hljs-function"><span class="hljs-keyword">public</span> SpDataStream <span class="hljs-title">declareModel</span><span class="hljs-params">(DataSourceDescription sep)</span> </span>{
+
+  }
+}
+</code></pre>
+<p>Next, create a new class <code>MyStreamSource</code> as follows:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.streampipes.container.declarer.EventStreamDeclarer;
+<span class="hljs-keyword">import</span> org.streampipes.container.declarer.SemanticEventProducerDeclarer;
+<span class="hljs-keyword">import</span> org.streampipes.model.graph.DataSourceDescription;
+
+<span class="hljs-keyword">import</span> java.util.List;
+
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyStreamSource</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">SemanticEventProducerDeclarer</span> </span>{
+
+    <span class="hljs-meta">@Override</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> DataSourceDescription <span class="hljs-title">declareModel</span><span class="hljs-params">()</span> </span>{
+      <span class="hljs-keyword">return</span> <span class="hljs-keyword">null</span>;
+    }
+
+    <span class="hljs-meta">@Override</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> List&lt;EventStreamDeclarer&gt; <span class="hljs-title">getEventStreams</span><span class="hljs-params">()</span> </span>{
+        <span class="hljs-keyword">return</span> <span class="hljs-keyword">null</span>;
+    }
+}
+</code></pre>
+<h2><a class="anchor" aria-hidden="true" id="sdk-reference"></a><a href="#sdk-reference" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The complete SDK reference for defining data processors will follow soon. Please check the SDK's Javadoc for now!</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-processors"><span class="arrow-prev">← </span><span>Tutorial: Data Processors</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-processors"><span>SDK Guide: Data Processors</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#project-setup">Proje [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-processors.html b/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-processors.html
new file mode 100644
index 0000000..0c79086
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-processors.html
@@ -0,0 +1,440 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Tutorial: Data Processors · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;In this tutorial, we will add a new data processor using the Apache Flink wrapper.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Tutorial: Data Processors · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;In this tutorial, we will add a new data processor using the Apache Flink wrapper.&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Tutorial: Data Processors</h1></header><article><div><span><p>In this tutorial, we will add a new data processor using the Apache Flink wrapper.</p>
+<p>From an architectural point of view, we will create a self-contained service that includes the description of the data processor and a Flink-compatible implementation.
+Once a pipeline is started that uses this data processor, the implementation is submitted to an Apache Flink cluster.</p>
+<p>If this is the first time you are extending StreamPipes, we recommend doing the <a href="/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-sources">data source tutorial</a> first.</p>
+<h2><a class="anchor" aria-hidden="true" id="objective"></a><a href="#objective" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>We are going to create a new data processor that realized a simple geofencing algorithm - we detect vehicles that enter a specified radius around a user-defined location.
+This pipeline element will be a generic element that works with any event stream that provides geospatial coordinates in form of a latitude/longitude pair.</p>
+<p>The algorithm outputs every location event once the position has entered the geofence.</p>
+<div class="admonition note">
+<div class="admonition-title">Note</div>
+<p>The implementation in this tutorial is pretty simple - our processor will fire an event every time the GPS location is inside the geofence.
+       In a real-world application, you would probably want to define a pattern that recognizes the _first_ event a vehicle enters the geofence.<br/>
+       This can be easily done using a CEP library, e.g., Apache Flink CEP.</p>
+</div>
+<h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>Similar to the data source tutorial, there are two options to start a new project (option 1 is recommended):</p>
+<p><strong>Option 1: Using a template project</strong></p>
+<p>Clone the following project from our Github repo: <a href="https://github.com/streampipes/templates-flink">https://github.com/streampipes/templates-flink</a></p>
+<p>Import the project into an IDE of your choice.
+You should see a structure like this:</p>
+<p><img src="/docs/img/tutorial-processors/project-structure-processor.PNG" alt="Project Structure Data Processor"></p>
+<p>Rename the classes (or create new classes by copying these files) as follows:</p>
+<ul>
+<li><code>ProcessorTemplateController.java</code> to <code>GeofencingController.java</code></li>
+<li><code>ProcessorTemplateFlatMap.java</code> to <code>GeofencingProcessor.java</code></li>
+<li><code>ProcessorTemplateParameters.java</code> to <code>GeofencingParameters.java</code></li>
+<li><code>ProcessorTemplateProgram.java</code> to <code>GeofencingProgram.java</code></li>
+</ul>
+<div class="admonition tip">
+<div class="admonition-title">Tip</div>
+<p>Besides the basic project skeleton, the sample project also includes an example Dockerfile you can use to package your application into a Docker container.</p>
+</div>
+<p><strong>Option 2: Start a new project from scratch</strong></p>
+<p>If you want to start from scratch, we refer to the <a href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-processors">Processor SDK guide</a> which provides instructions on the general project setup.</p>
+<h2><a class="anchor" aria-hidden="true" id="adding-data-processor-requirements"></a><a href="#adding-data-processor-requirements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5 [...]
+<p>Now we will add a new data stream definition.
+First, open the class <code>GeofencingController</code> which should look as follows:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.streampipes.model.graph.DataProcessorDescription;
+<span class="hljs-keyword">import</span> org.streampipes.model.graph.DataProcessorInvocation;
+<span class="hljs-keyword">import</span> org.streampipes.wrapper.flink.AbstractFlinkAgentDeclarer;
+<span class="hljs-keyword">import</span> org.streampipes.wrapper.flink.FlinkSepaRuntime;
+
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GeofencingController</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">FlinkDataProcessorDeclarer</span>&lt;<span class="hljs-title">GeofencingParameters</span>&gt; </span>{
+
+    <span class="hljs-meta">@Override</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> DataProcessorDescription <span class="hljs-title">declareModel</span><span class="hljs-params">()</span> </span>{
+
+    }
+
+    <span class="hljs-meta">@Override</span>
+    <span class="hljs-function"><span class="hljs-keyword">protected</span> FlinkDataProcessorRuntime&lt;GeofencingParameters&gt; <span class="hljs-title">getRuntime</span><span class="hljs-params">(DataProcessorInvocation sepaInvocation)</span> </span>{
+
+    }
+}
+</code></pre>
+<p>In this class, we need to implement two methods: The <code>declareModel</code> method is used to define abstract stream requirements such as event properties that must be present in any input stream that is later connected to the element using the StreamPipes UI.
+The second method, <code>getRuntime</code> is used to create and deploy the parameterized Flink program once a pipeline using this element is started.</p>
+<p>Similar to data sources, the SDK provides a builder class to generate the description for data processors.
+add the following lines to the <code>declareModel</code> method:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">return</span> ProcessingElementBuilder.create(<span class="hljs-string">"geofencing-flink"</span>, <span class="hljs-string">"Geofencing"</span>, <span class="hljs-string">"A simple geofencing data processor "</span> +
+            <span class="hljs-string">"using the Apache Flink wrapper"</span>)
+</code></pre>
+<p>This creates a new data processor with the ID, title and description assigned to the element builder.
+Next, we add some <em>stream requirements</em> to the description. As we'd like to develop a generic pipeline element that works with any event that provides a lat/lng pair, we define two stream requirements as stated below:</p>
+<pre><code class="hljs css language-java">.requiredStream(StreamRequirementsBuilder
+    .create()
+    .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lat),
+            Labels.from(<span class="hljs-string">"latitude-field"</span>, <span class="hljs-string">"Latitude"</span>, <span class="hljs-string">"The event "</span> +
+            <span class="hljs-string">"property containing the latitude value"</span>), PropertyScope.MEASUREMENT_PROPERTY)
+    .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lng),
+            Labels.from(<span class="hljs-string">"longitude-field"</span>, <span class="hljs-string">"Longitude"</span>, <span class="hljs-string">"The event "</span> +
+                    <span class="hljs-string">"property containing the longitude value"</span>), PropertyScope.MEASUREMENT_PROPERTY)
+    .build())
+</code></pre>
+<p>The first line, <code>.requiredStream()</code> defines that we want a data processor with exactly one input stream. Adding more stream requirements would create elements with multiple input connectors in StreamPipes.
+Stream requirements can be assigned by using the <code>StreamRequirementsBuilder</code> class.
+In our example, we define two requirements, so-called <em>domain property requirements</em>. In contrast to <em>data type requirements</em> where we'd expect an event property with a field of a specific data type (e.g., float), domain property requirements expect a specific domain property, e.g., from a vocabulary such as the WGS84 Geo vocab.</p>
+<p>Once a pipeline is deployed, we are interested in the actual field (and its field name) that contains the latitude and longitude values.
+In some cases, there might me more than one field that satisfies a property requirement and we would like users to select the property the geofencing component should operate on.
+Therefore, our example uses the method <code>requiredPropertyWithUnaryMapping</code>, which will map a requirement to a real event property of an input stream and  let the user choose the appropriate field in the StreamPipes UI when pipelines are defined.</p>
+<p>Finally, the <code>PropertyScope</code> indicates that the required property is a measurement value (in contrast to a dimension value). This allows us later to provide improved user guidance in the pipeline editor.</p>
+<p>Besides requirements, users should be able to define the center coordinate of the Geofence and the size of the fence defined as a radius around the center in meters.
+The radius can be defined by adding a simple required text field to the description:</p>
+<pre><code class="hljs css language-java">.requiredIntegerParameter(<span class="hljs-string">"radius"</span>, <span class="hljs-string">"Geofence Size"</span>, <span class="hljs-string">"The size of the circular geofence in meters."</span>, <span class="hljs-number">0</span>, <span class="hljs-number">1000</span>, <span class="hljs-number">1</span>)
+</code></pre>
+<p>Similar to mapping properties, text parameters have an internalId (radius), a label and a description.
+In addition, we can assign a <em>value specification</em> to the parameter indicating the value range we support.
+Our example supports a radius value between 0 and 1000 with a granularity of 1.
+In the StreamPipes UI, a required text parameter is rendered as a text input field, in case we provide an optional value specification, a slider input is automatically generated.</p>
+<p>Such user-defined parameters are called <em>static properties</em>. There are many different types of static properties (see the <a href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-processors">Processor SDK</a> for an overview).</p>
+<p>One example are <em>DomainProperties</em> we use for defining the center of the geofence.
+Our data processor requires a lat/lng pair that marks the center of the geofence.
+However, letting users directly input latitude and longitude coordinates wouldn't be very user-friendly.
+Therefore, we can link required text parameters to <em>ontology concepts</em>. By understanding the required input, the StreamPipes UI is able to determine which user interface works best for a specific concept.</p>
+<p>Add the following line to the <code>declareModel</code> method:</p>
+<pre><code class="hljs css language-java">.requiredOntologyConcept(Labels.from(<span class="hljs-string">"location"</span>, <span class="hljs-string">"Geofence Center"</span>, <span class="hljs-string">"Provide the coordinate of the "</span> +
+    <span class="hljs-string">"geofence center"</span>), OntologyProperties.mandatory(Geo.lat), OntologyProperties.mandatory(Geo.lng))
+
+</code></pre>
+<p>We've now defined that we would like to receive an instance that provides a latitude and a longitude coordinate.
+Users can input these values either manually, or they can look up <em>domain knowledge</em> (part of the StreamPipes Enterprise Edition), i.e., knowledge stored isolated from the stream definition.</p>
+<p>Finally, we need to define technical requirements of the data processor, called <em>groundings</em>.
+StreamPipes supports various runtime data formats (e.g., JSON or Thrift) and various protocols (e.g., Kafka or JMS).
+Each component defines supports formats and protocol separately.
+For our example, we'd like to support JSON-based messages and Kafka as input and output broker protocol, so append the following:</p>
+<pre><code class="hljs css language-java">.supportedProtocols(SupportedProtocols.kafka())
+.supportedFormats(SupportedFormats.jsonFormat())
+.build();
+</code></pre>
+<p>Now we need to define the output of our Geofencing pipeline element.
+As explained in the first section, the element should fire every time some geo-located entity arrives within the defined geofence.
+Therefore, the processor outputs the same schema as it receives as an input.
+Although we don't know the exact input right now as it depends on the stream users connect in StreamPipes when creating pipelines, we can define an <em>output strategy</em> as follows:</p>
+<pre><code class="hljs css language-java">.outputStrategy(OutputStrategies.keep())
+</code></pre>
+<p>This defines a <em>KeepOutputStrategy</em>, i.e., the input event schema is not modified by the processor.
+There are many more output strategies you can define depending on the functionality you desire, e.g., <em>AppendOutput</em> for defining a processor that enriches events or <em>CustomOutput</em> in case you would like users to select the output by themselves.</p>
+<p>That's it! We've now defined input requirements, required user input, technical requirements concerned with data format and protocol and an output strategy.
+In the next section, you will learn how to extract these parameters once the pipeline element is invoked after a pipeline was created.</p>
+<h2><a class="anchor" aria-hidden="true" id="pipeline-element-invocation"></a><a href="#pipeline-element-invocation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>Once users start a pipeline that uses our geofencing component, the <em>getRuntime</em> method in our class is called. The class <code>DataSinkInovcation</code> includes a graph that contains information on the configuration parameters a users has selected in the pipeline editor and information on the acutal streams that are connected to the pipeline element.</p>
+<p>Before we explain in more detail how to extract these values from the processor invocation, we need to adapt a little helper class.
+Open the file <code>GeofencingParameters</code> and modify it as follows:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GeofencingParameters</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">EventProcessorBindingParams</span> </span>{
+
+  <span class="hljs-keyword">private</span> String latitudeFieldName;
+  <span class="hljs-keyword">private</span> String longitudeFieldName;
+
+  <span class="hljs-keyword">private</span> Float centerLatitude;
+  <span class="hljs-keyword">private</span> Float centerLongitude;
+
+  <span class="hljs-keyword">private</span> Integer radius;
+
+  <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">GeofencingParameters</span><span class="hljs-params">(DataProcessorInvocation graph, String latitudeFieldName, String longitudeFieldName,
+                              Float centerLatitude, Float centerLongitude, Integer radius)</span> </span>{
+    <span class="hljs-keyword">super</span>(graph);
+    <span class="hljs-keyword">this</span>.latitudeFieldName = latitudeFieldName;
+    <span class="hljs-keyword">this</span>.longitudeFieldName = longitudeFieldName;
+    <span class="hljs-keyword">this</span>.centerLatitude = centerLatitude;
+    <span class="hljs-keyword">this</span>.centerLongitude = centerLongitude;
+    <span class="hljs-keyword">this</span>.radius = radius;
+  }
+
+  <span class="hljs-function"><span class="hljs-keyword">public</span> String <span class="hljs-title">getLatitudeFieldName</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-keyword">return</span> latitudeFieldName;
+  }
+
+  <span class="hljs-function"><span class="hljs-keyword">public</span> String <span class="hljs-title">getLongitudeFieldName</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-keyword">return</span> longitudeFieldName;
+  }
+
+  <span class="hljs-function"><span class="hljs-keyword">public</span> Float <span class="hljs-title">getCenterLatitude</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-keyword">return</span> centerLatitude;
+  }
+
+  <span class="hljs-function"><span class="hljs-keyword">public</span> Float <span class="hljs-title">getCenterLongitude</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-keyword">return</span> centerLongitude;
+  }
+
+  <span class="hljs-function"><span class="hljs-keyword">public</span> Integer <span class="hljs-title">getRadius</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-keyword">return</span> radius;
+  }
+</code></pre>
+<p>This simple Pojo class will later serve to store user-defined parameters in a single object.</p>
+<p>Now we go back to the controller class and extract these values from the invocation object.</p>
+<p>First, add the following line to the <code>getRuntime</code> method:</p>
+<pre><code class="hljs css language-java">ProcessingElementParameterExtractor extractor =
+    ProcessingElementParameterExtractor.from(dataProcessorInvocation);
+</code></pre>
+<p>The extractor provides convenience methods to extract the relevant information from the <code>DataProcessorInvocation</code> object.</p>
+<p>Next, we are interested in the fields of the input event stream that contains the latitude and longitude value we would like to compute against the geofence center location as follows:</p>
+<pre><code class="hljs css language-java">String latitudeFieldName = extractor.mappingPropertyValue(<span class="hljs-string">"latitude-field"</span>);
+String longitudeFieldName = extractor.mappingPropertyValue(<span class="hljs-string">"longitude-field"</span>);
+</code></pre>
+<p>We use the same <code>internalId</code> we've used to define the mapping property requirements in the <code>declareModel</code> method.</p>
+<p>Next, for extracting the geofence center coordinates, we use the following statements:</p>
+<pre><code class="hljs css language-java">Float centerLatitude = extractor.supportedOntologyPropertyValue(<span class="hljs-string">"location"</span>, Geo.lat, Float<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
+Float centerLongitude = extractor.supportedOntologyPropertyValue(<span class="hljs-string">"location"</span>, Geo.lng, Float<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
+</code></pre>
+<p>The radius value can be extracted as follows:</p>
+<pre><code class="hljs css language-java">Integer radius = extractor.singleValueParameter(<span class="hljs-string">"radius"</span>, Integer<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
+</code></pre>
+<p>Now we can create a new instance of our previously created parameter class:</p>
+<pre><code class="hljs css language-java">GeofencingParameters params = <span class="hljs-keyword">new</span> GeofencingParameters(dataProcessorInvocation, latitudeFieldName,
+            longitudeFieldName, centerLatitude, centerLongitude, radius);
+</code></pre>
+<p>Finally, return an instance of the class <code>GeofencingProgram</code>:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> GeofencingProgram(params);
+</code></pre>
+<div class="admonition tip">
+<div class="admonition-title">Info</div>
+<p>The line above uses the Flink MiniCluster to start the Flink program for debugging purposes.
+       Before you build the project and use it in a real environment, replace the line as follows, which triggers cluster execution:
+       <code>return new GeofencingProgram(params, new FlinkDeploymentConfig(Config.JAR_FILE, Config.INSTANCE.getFlinkHost(), Config.INSTANCE.getFlinkPort())</code></p>
+</div>
+<p>Great! That's all we need to describe a data processor for usage in StreamPipes. Your controller class should look as follows:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.streampipes.model.graph.DataProcessorDescription;
+<span class="hljs-keyword">import</span> org.streampipes.model.graph.DataProcessorInvocation;
+<span class="hljs-keyword">import</span> org.streampipes.model.schema.PropertyScope;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.builder.ProcessingElementBuilder;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.builder.StreamRequirementsBuilder;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.extractor.ProcessingElementParameterExtractor;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.EpRequirements;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.Labels;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.OntologyProperties;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.OutputStrategies;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.SupportedFormats;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.SupportedProtocols;
+<span class="hljs-keyword">import</span> org.streampipes.vocabulary.Geo;
+<span class="hljs-keyword">import</span> org.streampipes.wrapper.flink.FlinkDataProcessorDeclarer;
+<span class="hljs-keyword">import</span> org.streampipes.wrapper.flink.FlinkDataProcessorRuntime;
+
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GeofencingController</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">FlinkDataProcessorDeclarer</span>&lt;<span class="hljs-title">GeofencingParameters</span>&gt; </span>{
+
+  <span class="hljs-meta">@Override</span>
+  <span class="hljs-function"><span class="hljs-keyword">protected</span> FlinkDataProcessorRuntime&lt;GeofencingParameters&gt; <span class="hljs-title">getRuntime</span><span class="hljs-params">(DataProcessorInvocation dataProcessorInvocation)</span> </span>{
+    ProcessingElementParameterExtractor extractor = ProcessingElementParameterExtractor.from(dataProcessorInvocation);
+
+    String latitudeFieldName = extractor.mappingPropertyValue(<span class="hljs-string">"latitude-field"</span>);
+    String longitudeFieldName = extractor.mappingPropertyValue(<span class="hljs-string">"longitude-field"</span>);
+
+    Float centerLatitude = extractor.supportedOntologyPropertyValue(<span class="hljs-string">"location"</span>, Geo.lat, Float<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
+    Float centerLongitude = extractor.supportedOntologyPropertyValue(<span class="hljs-string">"location"</span>, Geo.lng, Float<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
+
+    Integer radius = extractor.singleValueParameter(<span class="hljs-string">"radius"</span>, Integer<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
+
+    GeofencingParameters params = <span class="hljs-keyword">new</span> GeofencingParameters(dataProcessorInvocation, latitudeFieldName,
+            longitudeFieldName, centerLatitude, centerLongitude, radius);
+
+    <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> GeofencingProgram(params);
+  }
+
+  <span class="hljs-meta">@Override</span>
+  <span class="hljs-function"><span class="hljs-keyword">public</span> DataProcessorDescription <span class="hljs-title">declareModel</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-keyword">return</span> ProcessingElementBuilder.create(<span class="hljs-string">"geofencing-flink"</span>, <span class="hljs-string">"Geofencing"</span>, <span class="hljs-string">"A simple geofencing data processor "</span> +
+            <span class="hljs-string">"using the Apache Flink wrapper"</span>)
+            .requiredStream(StreamRequirementsBuilder
+                    .create()
+                    .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lat),
+                            Labels.from(<span class="hljs-string">"latitude-field"</span>, <span class="hljs-string">"Latitude"</span>, <span class="hljs-string">"The event "</span> +
+                            <span class="hljs-string">"property containing the latitude value"</span>), PropertyScope.MEASUREMENT_PROPERTY)
+                    .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lng),
+                            Labels.from(<span class="hljs-string">"longitude-field"</span>, <span class="hljs-string">"Longitude"</span>, <span class="hljs-string">"The event "</span> +
+                                    <span class="hljs-string">"property containing the longitude value"</span>), PropertyScope.MEASUREMENT_PROPERTY)
+                    .build())
+            .requiredIntegerParameter(<span class="hljs-string">"radius"</span>, <span class="hljs-string">"Geofence Size"</span>, <span class="hljs-string">"The size of the circular geofence in meters."</span>,
+                    <span class="hljs-number">0</span>, <span class="hljs-number">1000</span>, <span class="hljs-number">1</span>)
+            .requiredOntologyConcept(Labels.from(<span class="hljs-string">"location"</span>, <span class="hljs-string">"Geofence Center"</span>, <span class="hljs-string">"Provide the coordinate of the "</span> +
+                    <span class="hljs-string">"geofence center"</span>), OntologyProperties.mandatory(Geo.lat), OntologyProperties.mandatory(Geo.lng))
+            .supportedProtocols(SupportedProtocols.kafka())
+            .supportedFormats(SupportedFormats.jsonFormat())
+            .outputStrategy(OutputStrategies.keep())
+            .build();
+  }
+}
+
+</code></pre>
+<h2><a class="anchor" aria-hidden="true" id="adding-an-implementation"></a><a href="#adding-an-implementation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>Everything we need to do now is to add an implementation which does not differ from writing an Apache Flink topology.</p>
+<p>Open the class <code>GeofencingProcessor.java</code> and add the following piece of code, which realizes the Geofencing functionality:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GeofencingProcessor</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">FlatMapFunction</span>&lt;<span class="hljs-title">Map</span>&lt;<span class="hljs-title">String</span>, <span class="hljs-title">Object</span>&gt;, <span class="hljs-title">Map</span>&lt;<span class="hljs-title">String</s [...]
+
+  <span class="hljs-keyword">private</span> String latitudeFieldName;
+  <span class="hljs-keyword">private</span> String longitudeFieldName;
+
+  <span class="hljs-keyword">private</span> Float centerLatitude;
+  <span class="hljs-keyword">private</span> Float centerLongitude;
+
+  <span class="hljs-keyword">private</span> Integer radius;
+
+  <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">GeofencingProcessor</span><span class="hljs-params">(String latitudeFieldName, String longitudeFieldName, Float centerLatitude, Float centerLongitude, Integer radius)</span> </span>{
+    <span class="hljs-keyword">this</span>.latitudeFieldName = latitudeFieldName;
+    <span class="hljs-keyword">this</span>.longitudeFieldName = longitudeFieldName;
+    <span class="hljs-keyword">this</span>.centerLatitude = centerLatitude;
+    <span class="hljs-keyword">this</span>.centerLongitude = centerLongitude;
+    <span class="hljs-keyword">this</span>.radius = radius;
+  }
+
+  <span class="hljs-meta">@Override</span>
+  <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">flatMap</span><span class="hljs-params">(Map&lt;String, Object&gt; in, Collector&lt;Map&lt;String, Object&gt;&gt; out)</span> <span class="hljs-keyword">throws</span> Exception </span>{
+    Float latitude = Float.parseFloat(String.valueOf(in.get(latitudeFieldName)));
+    Float longitude = Float.parseFloat(String.valueOf(in.get(longitudeFieldName)));
+
+    Float distance = distFrom(latitude, longitude, centerLatitude, centerLongitude);
+
+    <span class="hljs-keyword">if</span> (distance &lt;= radius) {
+      out.collect(in);
+    }
+  }
+
+  <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> Float <span class="hljs-title">distFrom</span><span class="hljs-params">(<span class="hljs-keyword">float</span> lat1, <span class="hljs-keyword">float</span> lng1, <span class="hljs-keyword">float</span> lat2, <span class="hljs-keyword">float</span> lng2)</span> </span>{
+    <span class="hljs-keyword">double</span> earthRadius = <span class="hljs-number">6371000</span>;
+    <span class="hljs-keyword">double</span> dLat = Math.toRadians(lat2-lat1);
+    <span class="hljs-keyword">double</span> dLng = Math.toRadians(lng2-lng1);
+    <span class="hljs-keyword">double</span> a = Math.sin(dLat/<span class="hljs-number">2</span>) * Math.sin(dLat/<span class="hljs-number">2</span>) +
+            Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
+                    Math.sin(dLng/<span class="hljs-number">2</span>) * Math.sin(dLng/<span class="hljs-number">2</span>);
+    <span class="hljs-keyword">double</span> c = <span class="hljs-number">2</span> * Math.atan2(Math.sqrt(a), Math.sqrt(<span class="hljs-number">1</span>-a));
+    <span class="hljs-keyword">return</span> (<span class="hljs-keyword">float</span>) (earthRadius * c);
+  }
+
+}
+</code></pre>
+<p>We won't go into details here as this isn't StreamPipes-related code, but in general the class extracts latitude and longitude fields from the input event (which is provided as a map data type) and calculates the distance between the geofence center and these coordinates.
+If the distance is below the given radius, the event is forwarded to the next operator.</p>
+<p>Finally, we need to connect this program to the Flink topology. StreamPipes automatically adds things like the Kafka consumer and producer, so that you only need to invoke the actual geofencing processor.
+Open the file <code>GeofencingProgram</code> and append the following line inside the <code>getApplicationLogic()</code> method:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">return</span> dataStreams[<span class="hljs-number">0</span>].flatMap(<span class="hljs-keyword">new</span> GeofencingProcessor(params.getLatitudeFieldName(), params.getLongitudeFieldName(),
+    params.getCenterLatitude(), params.getCenterLongitude(), params.getRadius()));
+</code></pre>
+<div class="admonition info">
+<div class="admonition-title">Info</div>
+<p>Although you could pass the <code>GeofencingParameters</code> class directly to the <code>GeofencingProcessor</code>, in our example we extract the properties to the class.
+       This is due to the circumstance that the parameter class currently is not serializable and Flink requires all classes to be serializable.
+       Future versions will fix this bug in StreamPipes.</p>
+</div>
+<h2><a class="anchor" aria-hidden="true" id="preparing-the-container"></a><a href="#preparing-the-container" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>The final step is to define the deployment type of our new data source. In this tutorial, we will create a so-called <code>StandaloneModelSubmitter</code>.
+This client will start an embedded web server that provides the description of our data source and automatically submits the program to the registered Apache Flink cluster.</p>
+<p>Create a new class <code>Main</code> that implements <code>StandaloneModelSubmitter</code> and add the following code into the main method:</p>
+<pre><code class="hljs css language-java"><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
+
+   DeclarersSingleton.getInstance().add(<span class="hljs-keyword">new</span> GeofencingController());
+
+   <span class="hljs-keyword">new</span> Main().init(Config.INSTANCE);
+
+}
+</code></pre>
+<div class="admonition info">
+<div class="admonition-title">Info</div>
+<p>In the example above, we make use of a class `Config`.
+       This class contains both mandatory and additional configuration parameters required by a pipeline element container.
+       These values are stored in the Consul-based key-value store of your StreamPipes installation.
+       The SDK guide contains a detailed manual on managing container configurations.
+</p>
+</div>
+<h2><a class="anchor" aria-hidden="true" id="starting-the-container"></a><a href="#starting-the-container" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<div class="admonition tip">
+<div class="admonition-title">Tip</div>
+<p>By default, the container registers itself using the hostname later used by the Docker container, leading to a 404 error when you try to access an RDF description.
+       For local development, you need to change the hostname in Consul to `localhost`.
+       Open the class `TemplateConfig.java` and change the value defined in the `HOST` variable from `template-flink` to `localhost`.
+</p>
+</div>
+<div class="admonition tip">
+<div class="admonition-title">Tip</div>
+<p> The default port of all pipeline element containers as defined in the `Config` file is port 8090.
+       If you'd like to run mutliple containers at the same time on your development machine, you can modify the port in the `Config.java` class.
+</p>
+</div>
+<p>Now we are ready to start our container!</p>
+<p>Execute the main method in the class <code>Main</code> we've just created, open a web browser and navigate to <a href="http://localhost:8090">http://localhost:8090</a>.</p>
+<p>You should see something as follows:</p>
+<p><img src="/docs/img/tutorial-processors/pe-overview-flink.PNG" alt="Pipeline Element Container Overview (Flink)"></p>
+<p>Click on the link of the data source to see the RDF description of the pipeline element.</p>
+<p><img src="/docs/img/tutorial-processors/pe-rdf-geofencing.PNG" alt="Geofencing RDF description"></p>
+<p>The container automatically registers itself in the Consul installation of StreamPipes.
+To install the just created element, open the StreamPipes UI and follow the manual provided in the <a href="user-guide-processing-elements.md">user guide</a>.</p>
+<h2><a class="anchor" aria-hidden="true" id="read-more"></a><a href="#read-more" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>Congratulations! You've just created your first data processor for StreamPipes.
+There are many more things to explore and data processors can be defined in much more detail using multiple wrappers.
+Follow our <a href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sources">SDK guide</a> to see what's possible!</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-sources"><span class="arrow-prev">← </span><span>Tutorial: Data Sources</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sources"><span>SDK Guide: Data Sources</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#objective">Objective</a></li><li [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-processors/index.html b/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-processors/index.html
new file mode 100644
index 0000000..0c79086
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-processors/index.html
@@ -0,0 +1,440 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Tutorial: Data Processors · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;In this tutorial, we will add a new data processor using the Apache Flink wrapper.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Tutorial: Data Processors · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;In this tutorial, we will add a new data processor using the Apache Flink wrapper.&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Tutorial: Data Processors</h1></header><article><div><span><p>In this tutorial, we will add a new data processor using the Apache Flink wrapper.</p>
+<p>From an architectural point of view, we will create a self-contained service that includes the description of the data processor and a Flink-compatible implementation.
+Once a pipeline is started that uses this data processor, the implementation is submitted to an Apache Flink cluster.</p>
+<p>If this is the first time you are extending StreamPipes, we recommend doing the <a href="/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-sources">data source tutorial</a> first.</p>
+<h2><a class="anchor" aria-hidden="true" id="objective"></a><a href="#objective" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>We are going to create a new data processor that realized a simple geofencing algorithm - we detect vehicles that enter a specified radius around a user-defined location.
+This pipeline element will be a generic element that works with any event stream that provides geospatial coordinates in form of a latitude/longitude pair.</p>
+<p>The algorithm outputs every location event once the position has entered the geofence.</p>
+<div class="admonition note">
+<div class="admonition-title">Note</div>
+<p>The implementation in this tutorial is pretty simple - our processor will fire an event every time the GPS location is inside the geofence.
+       In a real-world application, you would probably want to define a pattern that recognizes the _first_ event a vehicle enters the geofence.<br/>
+       This can be easily done using a CEP library, e.g., Apache Flink CEP.</p>
+</div>
+<h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>Similar to the data source tutorial, there are two options to start a new project (option 1 is recommended):</p>
+<p><strong>Option 1: Using a template project</strong></p>
+<p>Clone the following project from our Github repo: <a href="https://github.com/streampipes/templates-flink">https://github.com/streampipes/templates-flink</a></p>
+<p>Import the project into an IDE of your choice.
+You should see a structure like this:</p>
+<p><img src="/docs/img/tutorial-processors/project-structure-processor.PNG" alt="Project Structure Data Processor"></p>
+<p>Rename the classes (or create new classes by copying these files) as follows:</p>
+<ul>
+<li><code>ProcessorTemplateController.java</code> to <code>GeofencingController.java</code></li>
+<li><code>ProcessorTemplateFlatMap.java</code> to <code>GeofencingProcessor.java</code></li>
+<li><code>ProcessorTemplateParameters.java</code> to <code>GeofencingParameters.java</code></li>
+<li><code>ProcessorTemplateProgram.java</code> to <code>GeofencingProgram.java</code></li>
+</ul>
+<div class="admonition tip">
+<div class="admonition-title">Tip</div>
+<p>Besides the basic project skeleton, the sample project also includes an example Dockerfile you can use to package your application into a Docker container.</p>
+</div>
+<p><strong>Option 2: Start a new project from scratch</strong></p>
+<p>If you want to start from scratch, we refer to the <a href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-processors">Processor SDK guide</a> which provides instructions on the general project setup.</p>
+<h2><a class="anchor" aria-hidden="true" id="adding-data-processor-requirements"></a><a href="#adding-data-processor-requirements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5 [...]
+<p>Now we will add a new data stream definition.
+First, open the class <code>GeofencingController</code> which should look as follows:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.streampipes.model.graph.DataProcessorDescription;
+<span class="hljs-keyword">import</span> org.streampipes.model.graph.DataProcessorInvocation;
+<span class="hljs-keyword">import</span> org.streampipes.wrapper.flink.AbstractFlinkAgentDeclarer;
+<span class="hljs-keyword">import</span> org.streampipes.wrapper.flink.FlinkSepaRuntime;
+
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GeofencingController</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">FlinkDataProcessorDeclarer</span>&lt;<span class="hljs-title">GeofencingParameters</span>&gt; </span>{
+
+    <span class="hljs-meta">@Override</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> DataProcessorDescription <span class="hljs-title">declareModel</span><span class="hljs-params">()</span> </span>{
+
+    }
+
+    <span class="hljs-meta">@Override</span>
+    <span class="hljs-function"><span class="hljs-keyword">protected</span> FlinkDataProcessorRuntime&lt;GeofencingParameters&gt; <span class="hljs-title">getRuntime</span><span class="hljs-params">(DataProcessorInvocation sepaInvocation)</span> </span>{
+
+    }
+}
+</code></pre>
+<p>In this class, we need to implement two methods: The <code>declareModel</code> method is used to define abstract stream requirements such as event properties that must be present in any input stream that is later connected to the element using the StreamPipes UI.
+The second method, <code>getRuntime</code> is used to create and deploy the parameterized Flink program once a pipeline using this element is started.</p>
+<p>Similar to data sources, the SDK provides a builder class to generate the description for data processors.
+add the following lines to the <code>declareModel</code> method:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">return</span> ProcessingElementBuilder.create(<span class="hljs-string">"geofencing-flink"</span>, <span class="hljs-string">"Geofencing"</span>, <span class="hljs-string">"A simple geofencing data processor "</span> +
+            <span class="hljs-string">"using the Apache Flink wrapper"</span>)
+</code></pre>
+<p>This creates a new data processor with the ID, title and description assigned to the element builder.
+Next, we add some <em>stream requirements</em> to the description. As we'd like to develop a generic pipeline element that works with any event that provides a lat/lng pair, we define two stream requirements as stated below:</p>
+<pre><code class="hljs css language-java">.requiredStream(StreamRequirementsBuilder
+    .create()
+    .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lat),
+            Labels.from(<span class="hljs-string">"latitude-field"</span>, <span class="hljs-string">"Latitude"</span>, <span class="hljs-string">"The event "</span> +
+            <span class="hljs-string">"property containing the latitude value"</span>), PropertyScope.MEASUREMENT_PROPERTY)
+    .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lng),
+            Labels.from(<span class="hljs-string">"longitude-field"</span>, <span class="hljs-string">"Longitude"</span>, <span class="hljs-string">"The event "</span> +
+                    <span class="hljs-string">"property containing the longitude value"</span>), PropertyScope.MEASUREMENT_PROPERTY)
+    .build())
+</code></pre>
+<p>The first line, <code>.requiredStream()</code> defines that we want a data processor with exactly one input stream. Adding more stream requirements would create elements with multiple input connectors in StreamPipes.
+Stream requirements can be assigned by using the <code>StreamRequirementsBuilder</code> class.
+In our example, we define two requirements, so-called <em>domain property requirements</em>. In contrast to <em>data type requirements</em> where we'd expect an event property with a field of a specific data type (e.g., float), domain property requirements expect a specific domain property, e.g., from a vocabulary such as the WGS84 Geo vocab.</p>
+<p>Once a pipeline is deployed, we are interested in the actual field (and its field name) that contains the latitude and longitude values.
+In some cases, there might me more than one field that satisfies a property requirement and we would like users to select the property the geofencing component should operate on.
+Therefore, our example uses the method <code>requiredPropertyWithUnaryMapping</code>, which will map a requirement to a real event property of an input stream and  let the user choose the appropriate field in the StreamPipes UI when pipelines are defined.</p>
+<p>Finally, the <code>PropertyScope</code> indicates that the required property is a measurement value (in contrast to a dimension value). This allows us later to provide improved user guidance in the pipeline editor.</p>
+<p>Besides requirements, users should be able to define the center coordinate of the Geofence and the size of the fence defined as a radius around the center in meters.
+The radius can be defined by adding a simple required text field to the description:</p>
+<pre><code class="hljs css language-java">.requiredIntegerParameter(<span class="hljs-string">"radius"</span>, <span class="hljs-string">"Geofence Size"</span>, <span class="hljs-string">"The size of the circular geofence in meters."</span>, <span class="hljs-number">0</span>, <span class="hljs-number">1000</span>, <span class="hljs-number">1</span>)
+</code></pre>
+<p>Similar to mapping properties, text parameters have an internalId (radius), a label and a description.
+In addition, we can assign a <em>value specification</em> to the parameter indicating the value range we support.
+Our example supports a radius value between 0 and 1000 with a granularity of 1.
+In the StreamPipes UI, a required text parameter is rendered as a text input field, in case we provide an optional value specification, a slider input is automatically generated.</p>
+<p>Such user-defined parameters are called <em>static properties</em>. There are many different types of static properties (see the <a href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-processors">Processor SDK</a> for an overview).</p>
+<p>One example are <em>DomainProperties</em> we use for defining the center of the geofence.
+Our data processor requires a lat/lng pair that marks the center of the geofence.
+However, letting users directly input latitude and longitude coordinates wouldn't be very user-friendly.
+Therefore, we can link required text parameters to <em>ontology concepts</em>. By understanding the required input, the StreamPipes UI is able to determine which user interface works best for a specific concept.</p>
+<p>Add the following line to the <code>declareModel</code> method:</p>
+<pre><code class="hljs css language-java">.requiredOntologyConcept(Labels.from(<span class="hljs-string">"location"</span>, <span class="hljs-string">"Geofence Center"</span>, <span class="hljs-string">"Provide the coordinate of the "</span> +
+    <span class="hljs-string">"geofence center"</span>), OntologyProperties.mandatory(Geo.lat), OntologyProperties.mandatory(Geo.lng))
+
+</code></pre>
+<p>We've now defined that we would like to receive an instance that provides a latitude and a longitude coordinate.
+Users can input these values either manually, or they can look up <em>domain knowledge</em> (part of the StreamPipes Enterprise Edition), i.e., knowledge stored isolated from the stream definition.</p>
+<p>Finally, we need to define technical requirements of the data processor, called <em>groundings</em>.
+StreamPipes supports various runtime data formats (e.g., JSON or Thrift) and various protocols (e.g., Kafka or JMS).
+Each component defines supports formats and protocol separately.
+For our example, we'd like to support JSON-based messages and Kafka as input and output broker protocol, so append the following:</p>
+<pre><code class="hljs css language-java">.supportedProtocols(SupportedProtocols.kafka())
+.supportedFormats(SupportedFormats.jsonFormat())
+.build();
+</code></pre>
+<p>Now we need to define the output of our Geofencing pipeline element.
+As explained in the first section, the element should fire every time some geo-located entity arrives within the defined geofence.
+Therefore, the processor outputs the same schema as it receives as an input.
+Although we don't know the exact input right now as it depends on the stream users connect in StreamPipes when creating pipelines, we can define an <em>output strategy</em> as follows:</p>
+<pre><code class="hljs css language-java">.outputStrategy(OutputStrategies.keep())
+</code></pre>
+<p>This defines a <em>KeepOutputStrategy</em>, i.e., the input event schema is not modified by the processor.
+There are many more output strategies you can define depending on the functionality you desire, e.g., <em>AppendOutput</em> for defining a processor that enriches events or <em>CustomOutput</em> in case you would like users to select the output by themselves.</p>
+<p>That's it! We've now defined input requirements, required user input, technical requirements concerned with data format and protocol and an output strategy.
+In the next section, you will learn how to extract these parameters once the pipeline element is invoked after a pipeline was created.</p>
+<h2><a class="anchor" aria-hidden="true" id="pipeline-element-invocation"></a><a href="#pipeline-element-invocation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>Once users start a pipeline that uses our geofencing component, the <em>getRuntime</em> method in our class is called. The class <code>DataSinkInovcation</code> includes a graph that contains information on the configuration parameters a users has selected in the pipeline editor and information on the acutal streams that are connected to the pipeline element.</p>
+<p>Before we explain in more detail how to extract these values from the processor invocation, we need to adapt a little helper class.
+Open the file <code>GeofencingParameters</code> and modify it as follows:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GeofencingParameters</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">EventProcessorBindingParams</span> </span>{
+
+  <span class="hljs-keyword">private</span> String latitudeFieldName;
+  <span class="hljs-keyword">private</span> String longitudeFieldName;
+
+  <span class="hljs-keyword">private</span> Float centerLatitude;
+  <span class="hljs-keyword">private</span> Float centerLongitude;
+
+  <span class="hljs-keyword">private</span> Integer radius;
+
+  <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">GeofencingParameters</span><span class="hljs-params">(DataProcessorInvocation graph, String latitudeFieldName, String longitudeFieldName,
+                              Float centerLatitude, Float centerLongitude, Integer radius)</span> </span>{
+    <span class="hljs-keyword">super</span>(graph);
+    <span class="hljs-keyword">this</span>.latitudeFieldName = latitudeFieldName;
+    <span class="hljs-keyword">this</span>.longitudeFieldName = longitudeFieldName;
+    <span class="hljs-keyword">this</span>.centerLatitude = centerLatitude;
+    <span class="hljs-keyword">this</span>.centerLongitude = centerLongitude;
+    <span class="hljs-keyword">this</span>.radius = radius;
+  }
+
+  <span class="hljs-function"><span class="hljs-keyword">public</span> String <span class="hljs-title">getLatitudeFieldName</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-keyword">return</span> latitudeFieldName;
+  }
+
+  <span class="hljs-function"><span class="hljs-keyword">public</span> String <span class="hljs-title">getLongitudeFieldName</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-keyword">return</span> longitudeFieldName;
+  }
+
+  <span class="hljs-function"><span class="hljs-keyword">public</span> Float <span class="hljs-title">getCenterLatitude</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-keyword">return</span> centerLatitude;
+  }
+
+  <span class="hljs-function"><span class="hljs-keyword">public</span> Float <span class="hljs-title">getCenterLongitude</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-keyword">return</span> centerLongitude;
+  }
+
+  <span class="hljs-function"><span class="hljs-keyword">public</span> Integer <span class="hljs-title">getRadius</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-keyword">return</span> radius;
+  }
+</code></pre>
+<p>This simple Pojo class will later serve to store user-defined parameters in a single object.</p>
+<p>Now we go back to the controller class and extract these values from the invocation object.</p>
+<p>First, add the following line to the <code>getRuntime</code> method:</p>
+<pre><code class="hljs css language-java">ProcessingElementParameterExtractor extractor =
+    ProcessingElementParameterExtractor.from(dataProcessorInvocation);
+</code></pre>
+<p>The extractor provides convenience methods to extract the relevant information from the <code>DataProcessorInvocation</code> object.</p>
+<p>Next, we are interested in the fields of the input event stream that contains the latitude and longitude value we would like to compute against the geofence center location as follows:</p>
+<pre><code class="hljs css language-java">String latitudeFieldName = extractor.mappingPropertyValue(<span class="hljs-string">"latitude-field"</span>);
+String longitudeFieldName = extractor.mappingPropertyValue(<span class="hljs-string">"longitude-field"</span>);
+</code></pre>
+<p>We use the same <code>internalId</code> we've used to define the mapping property requirements in the <code>declareModel</code> method.</p>
+<p>Next, for extracting the geofence center coordinates, we use the following statements:</p>
+<pre><code class="hljs css language-java">Float centerLatitude = extractor.supportedOntologyPropertyValue(<span class="hljs-string">"location"</span>, Geo.lat, Float<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
+Float centerLongitude = extractor.supportedOntologyPropertyValue(<span class="hljs-string">"location"</span>, Geo.lng, Float<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
+</code></pre>
+<p>The radius value can be extracted as follows:</p>
+<pre><code class="hljs css language-java">Integer radius = extractor.singleValueParameter(<span class="hljs-string">"radius"</span>, Integer<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
+</code></pre>
+<p>Now we can create a new instance of our previously created parameter class:</p>
+<pre><code class="hljs css language-java">GeofencingParameters params = <span class="hljs-keyword">new</span> GeofencingParameters(dataProcessorInvocation, latitudeFieldName,
+            longitudeFieldName, centerLatitude, centerLongitude, radius);
+</code></pre>
+<p>Finally, return an instance of the class <code>GeofencingProgram</code>:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> GeofencingProgram(params);
+</code></pre>
+<div class="admonition tip">
+<div class="admonition-title">Info</div>
+<p>The line above uses the Flink MiniCluster to start the Flink program for debugging purposes.
+       Before you build the project and use it in a real environment, replace the line as follows, which triggers cluster execution:
+       <code>return new GeofencingProgram(params, new FlinkDeploymentConfig(Config.JAR_FILE, Config.INSTANCE.getFlinkHost(), Config.INSTANCE.getFlinkPort())</code></p>
+</div>
+<p>Great! That's all we need to describe a data processor for usage in StreamPipes. Your controller class should look as follows:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.streampipes.model.graph.DataProcessorDescription;
+<span class="hljs-keyword">import</span> org.streampipes.model.graph.DataProcessorInvocation;
+<span class="hljs-keyword">import</span> org.streampipes.model.schema.PropertyScope;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.builder.ProcessingElementBuilder;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.builder.StreamRequirementsBuilder;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.extractor.ProcessingElementParameterExtractor;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.EpRequirements;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.Labels;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.OntologyProperties;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.OutputStrategies;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.SupportedFormats;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.SupportedProtocols;
+<span class="hljs-keyword">import</span> org.streampipes.vocabulary.Geo;
+<span class="hljs-keyword">import</span> org.streampipes.wrapper.flink.FlinkDataProcessorDeclarer;
+<span class="hljs-keyword">import</span> org.streampipes.wrapper.flink.FlinkDataProcessorRuntime;
+
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GeofencingController</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">FlinkDataProcessorDeclarer</span>&lt;<span class="hljs-title">GeofencingParameters</span>&gt; </span>{
+
+  <span class="hljs-meta">@Override</span>
+  <span class="hljs-function"><span class="hljs-keyword">protected</span> FlinkDataProcessorRuntime&lt;GeofencingParameters&gt; <span class="hljs-title">getRuntime</span><span class="hljs-params">(DataProcessorInvocation dataProcessorInvocation)</span> </span>{
+    ProcessingElementParameterExtractor extractor = ProcessingElementParameterExtractor.from(dataProcessorInvocation);
+
+    String latitudeFieldName = extractor.mappingPropertyValue(<span class="hljs-string">"latitude-field"</span>);
+    String longitudeFieldName = extractor.mappingPropertyValue(<span class="hljs-string">"longitude-field"</span>);
+
+    Float centerLatitude = extractor.supportedOntologyPropertyValue(<span class="hljs-string">"location"</span>, Geo.lat, Float<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
+    Float centerLongitude = extractor.supportedOntologyPropertyValue(<span class="hljs-string">"location"</span>, Geo.lng, Float<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
+
+    Integer radius = extractor.singleValueParameter(<span class="hljs-string">"radius"</span>, Integer<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
+
+    GeofencingParameters params = <span class="hljs-keyword">new</span> GeofencingParameters(dataProcessorInvocation, latitudeFieldName,
+            longitudeFieldName, centerLatitude, centerLongitude, radius);
+
+    <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> GeofencingProgram(params);
+  }
+
+  <span class="hljs-meta">@Override</span>
+  <span class="hljs-function"><span class="hljs-keyword">public</span> DataProcessorDescription <span class="hljs-title">declareModel</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-keyword">return</span> ProcessingElementBuilder.create(<span class="hljs-string">"geofencing-flink"</span>, <span class="hljs-string">"Geofencing"</span>, <span class="hljs-string">"A simple geofencing data processor "</span> +
+            <span class="hljs-string">"using the Apache Flink wrapper"</span>)
+            .requiredStream(StreamRequirementsBuilder
+                    .create()
+                    .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lat),
+                            Labels.from(<span class="hljs-string">"latitude-field"</span>, <span class="hljs-string">"Latitude"</span>, <span class="hljs-string">"The event "</span> +
+                            <span class="hljs-string">"property containing the latitude value"</span>), PropertyScope.MEASUREMENT_PROPERTY)
+                    .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lng),
+                            Labels.from(<span class="hljs-string">"longitude-field"</span>, <span class="hljs-string">"Longitude"</span>, <span class="hljs-string">"The event "</span> +
+                                    <span class="hljs-string">"property containing the longitude value"</span>), PropertyScope.MEASUREMENT_PROPERTY)
+                    .build())
+            .requiredIntegerParameter(<span class="hljs-string">"radius"</span>, <span class="hljs-string">"Geofence Size"</span>, <span class="hljs-string">"The size of the circular geofence in meters."</span>,
+                    <span class="hljs-number">0</span>, <span class="hljs-number">1000</span>, <span class="hljs-number">1</span>)
+            .requiredOntologyConcept(Labels.from(<span class="hljs-string">"location"</span>, <span class="hljs-string">"Geofence Center"</span>, <span class="hljs-string">"Provide the coordinate of the "</span> +
+                    <span class="hljs-string">"geofence center"</span>), OntologyProperties.mandatory(Geo.lat), OntologyProperties.mandatory(Geo.lng))
+            .supportedProtocols(SupportedProtocols.kafka())
+            .supportedFormats(SupportedFormats.jsonFormat())
+            .outputStrategy(OutputStrategies.keep())
+            .build();
+  }
+}
+
+</code></pre>
+<h2><a class="anchor" aria-hidden="true" id="adding-an-implementation"></a><a href="#adding-an-implementation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>Everything we need to do now is to add an implementation which does not differ from writing an Apache Flink topology.</p>
+<p>Open the class <code>GeofencingProcessor.java</code> and add the following piece of code, which realizes the Geofencing functionality:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GeofencingProcessor</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">FlatMapFunction</span>&lt;<span class="hljs-title">Map</span>&lt;<span class="hljs-title">String</span>, <span class="hljs-title">Object</span>&gt;, <span class="hljs-title">Map</span>&lt;<span class="hljs-title">String</s [...]
+
+  <span class="hljs-keyword">private</span> String latitudeFieldName;
+  <span class="hljs-keyword">private</span> String longitudeFieldName;
+
+  <span class="hljs-keyword">private</span> Float centerLatitude;
+  <span class="hljs-keyword">private</span> Float centerLongitude;
+
+  <span class="hljs-keyword">private</span> Integer radius;
+
+  <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">GeofencingProcessor</span><span class="hljs-params">(String latitudeFieldName, String longitudeFieldName, Float centerLatitude, Float centerLongitude, Integer radius)</span> </span>{
+    <span class="hljs-keyword">this</span>.latitudeFieldName = latitudeFieldName;
+    <span class="hljs-keyword">this</span>.longitudeFieldName = longitudeFieldName;
+    <span class="hljs-keyword">this</span>.centerLatitude = centerLatitude;
+    <span class="hljs-keyword">this</span>.centerLongitude = centerLongitude;
+    <span class="hljs-keyword">this</span>.radius = radius;
+  }
+
+  <span class="hljs-meta">@Override</span>
+  <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">flatMap</span><span class="hljs-params">(Map&lt;String, Object&gt; in, Collector&lt;Map&lt;String, Object&gt;&gt; out)</span> <span class="hljs-keyword">throws</span> Exception </span>{
+    Float latitude = Float.parseFloat(String.valueOf(in.get(latitudeFieldName)));
+    Float longitude = Float.parseFloat(String.valueOf(in.get(longitudeFieldName)));
+
+    Float distance = distFrom(latitude, longitude, centerLatitude, centerLongitude);
+
+    <span class="hljs-keyword">if</span> (distance &lt;= radius) {
+      out.collect(in);
+    }
+  }
+
+  <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> Float <span class="hljs-title">distFrom</span><span class="hljs-params">(<span class="hljs-keyword">float</span> lat1, <span class="hljs-keyword">float</span> lng1, <span class="hljs-keyword">float</span> lat2, <span class="hljs-keyword">float</span> lng2)</span> </span>{
+    <span class="hljs-keyword">double</span> earthRadius = <span class="hljs-number">6371000</span>;
+    <span class="hljs-keyword">double</span> dLat = Math.toRadians(lat2-lat1);
+    <span class="hljs-keyword">double</span> dLng = Math.toRadians(lng2-lng1);
+    <span class="hljs-keyword">double</span> a = Math.sin(dLat/<span class="hljs-number">2</span>) * Math.sin(dLat/<span class="hljs-number">2</span>) +
+            Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
+                    Math.sin(dLng/<span class="hljs-number">2</span>) * Math.sin(dLng/<span class="hljs-number">2</span>);
+    <span class="hljs-keyword">double</span> c = <span class="hljs-number">2</span> * Math.atan2(Math.sqrt(a), Math.sqrt(<span class="hljs-number">1</span>-a));
+    <span class="hljs-keyword">return</span> (<span class="hljs-keyword">float</span>) (earthRadius * c);
+  }
+
+}
+</code></pre>
+<p>We won't go into details here as this isn't StreamPipes-related code, but in general the class extracts latitude and longitude fields from the input event (which is provided as a map data type) and calculates the distance between the geofence center and these coordinates.
+If the distance is below the given radius, the event is forwarded to the next operator.</p>
+<p>Finally, we need to connect this program to the Flink topology. StreamPipes automatically adds things like the Kafka consumer and producer, so that you only need to invoke the actual geofencing processor.
+Open the file <code>GeofencingProgram</code> and append the following line inside the <code>getApplicationLogic()</code> method:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">return</span> dataStreams[<span class="hljs-number">0</span>].flatMap(<span class="hljs-keyword">new</span> GeofencingProcessor(params.getLatitudeFieldName(), params.getLongitudeFieldName(),
+    params.getCenterLatitude(), params.getCenterLongitude(), params.getRadius()));
+</code></pre>
+<div class="admonition info">
+<div class="admonition-title">Info</div>
+<p>Although you could pass the <code>GeofencingParameters</code> class directly to the <code>GeofencingProcessor</code>, in our example we extract the properties to the class.
+       This is due to the circumstance that the parameter class currently is not serializable and Flink requires all classes to be serializable.
+       Future versions will fix this bug in StreamPipes.</p>
+</div>
+<h2><a class="anchor" aria-hidden="true" id="preparing-the-container"></a><a href="#preparing-the-container" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>The final step is to define the deployment type of our new data source. In this tutorial, we will create a so-called <code>StandaloneModelSubmitter</code>.
+This client will start an embedded web server that provides the description of our data source and automatically submits the program to the registered Apache Flink cluster.</p>
+<p>Create a new class <code>Main</code> that implements <code>StandaloneModelSubmitter</code> and add the following code into the main method:</p>
+<pre><code class="hljs css language-java"><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
+
+   DeclarersSingleton.getInstance().add(<span class="hljs-keyword">new</span> GeofencingController());
+
+   <span class="hljs-keyword">new</span> Main().init(Config.INSTANCE);
+
+}
+</code></pre>
+<div class="admonition info">
+<div class="admonition-title">Info</div>
+<p>In the example above, we make use of a class `Config`.
+       This class contains both mandatory and additional configuration parameters required by a pipeline element container.
+       These values are stored in the Consul-based key-value store of your StreamPipes installation.
+       The SDK guide contains a detailed manual on managing container configurations.
+</p>
+</div>
+<h2><a class="anchor" aria-hidden="true" id="starting-the-container"></a><a href="#starting-the-container" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<div class="admonition tip">
+<div class="admonition-title">Tip</div>
+<p>By default, the container registers itself using the hostname later used by the Docker container, leading to a 404 error when you try to access an RDF description.
+       For local development, you need to change the hostname in Consul to `localhost`.
+       Open the class `TemplateConfig.java` and change the value defined in the `HOST` variable from `template-flink` to `localhost`.
+</p>
+</div>
+<div class="admonition tip">
+<div class="admonition-title">Tip</div>
+<p> The default port of all pipeline element containers as defined in the `Config` file is port 8090.
+       If you'd like to run mutliple containers at the same time on your development machine, you can modify the port in the `Config.java` class.
+</p>
+</div>
+<p>Now we are ready to start our container!</p>
+<p>Execute the main method in the class <code>Main</code> we've just created, open a web browser and navigate to <a href="http://localhost:8090">http://localhost:8090</a>.</p>
+<p>You should see something as follows:</p>
+<p><img src="/docs/img/tutorial-processors/pe-overview-flink.PNG" alt="Pipeline Element Container Overview (Flink)"></p>
+<p>Click on the link of the data source to see the RDF description of the pipeline element.</p>
+<p><img src="/docs/img/tutorial-processors/pe-rdf-geofencing.PNG" alt="Geofencing RDF description"></p>
+<p>The container automatically registers itself in the Consul installation of StreamPipes.
+To install the just created element, open the StreamPipes UI and follow the manual provided in the <a href="user-guide-processing-elements.md">user guide</a>.</p>
+<h2><a class="anchor" aria-hidden="true" id="read-more"></a><a href="#read-more" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>Congratulations! You've just created your first data processor for StreamPipes.
+There are many more things to explore and data processors can be defined in much more detail using multiple wrappers.
+Follow our <a href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sources">SDK guide</a> to see what's possible!</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-sources"><span class="arrow-prev">← </span><span>Tutorial: Data Sources</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sources"><span>SDK Guide: Data Sources</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#objective">Objective</a></li><li [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-sources.html b/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-sources.html
new file mode 100644
index 0000000..cde2a8f
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-sources.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Tutorial: Data Sources · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;In this tutorial, we will add a new data source consisting of a single data stream. The source will be provided as a standalone component (i.e., the description will be accessible through [...]
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Tutorial: Data Sources · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;In this tutorial, we will add a new data source consisting of a single data stream. The source will be provided as a standalone component (i.e., the [...]
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Tutorial: Data Sources</h1></header><article><div><span><p>In this tutorial, we will add a new data source consisting of a single data stream. The source will be provided as a standalone component (i.e., the description will be accessible through an integrated web server).</p>
+<h2><a class="anchor" aria-hidden="true" id="objective"></a><a href="#objective" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>We are going to create a new data stream that is produced by a GPS sensor installed in a delivery vehicle.
+The sensor produces a continuous stream of events that contain the current timestamp, the current lat/lng position of the vehicle and the plate number of the vehicle.
+Events are published in a JSON format as follows:</p>
+<pre><code class="hljs css language-json">{
+  <span class="hljs-attr">"timestamp"</span> : <span class="hljs-number">145838399</span>,
+  <span class="hljs-attr">"latitude"</span> : <span class="hljs-number">37.04</span>,
+  <span class="hljs-attr">"longitude"</span> : <span class="hljs-number">17.04</span>,
+  <span class="hljs-attr">"plateNumber"</span> : <span class="hljs-string">"KA-AB 123"</span>
+}
+</code></pre>
+<p>These events are published to a Kafka broker using the topic <code>org.streampipes.tutorial.vehicle</code>.</p>
+<p>In the following section, we show how to describe this stream in a form that allows you to import and use it in StreamPipes.</p>
+<h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>Currently, there are two options to start a new project (option 1 is recommended):</p>
+<p><strong>Option 1: Using a template project</strong></p>
+<p>Clone the following project from our Github repo: <a href="https://github.com/streampipes/templates-sources">https://github.com/streampipes/templates-sources</a></p>
+<p>Import the project into an IDE of your choice.
+You should see a structure like this:</p>
+<p><img src="/docs/img/tutorial-sources/project-structure.PNG" alt="Project Structure"></p>
+<p>Rename the class <code>TemplateSource.java</code> to <code>VehicleSource.java</code> and the class <code>TemplateStream.java</code> to <code>VehicleStream.java</code>.</p>
+<p>That's it, go to the next section to learn how to create your first data stream!</p>
+<div class="admonition tip">
+<div class="admonition-title">Tip</div>
+<p>Besides the basic project skeleton, the sample project also includes an example Dockerfile you can use to package your application into a Docker container.
+</p>
+</div>
+<p><strong>Option 2: Start a new project from scratch</strong></p>
+<p>If you want to start from scratch, we refer to the <a href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-processors">Sources SDK guide</a> which provides instructions on the general project setup.</p>
+<h2><a class="anchor" aria-hidden="true" id="adding-a-data-stream-description"></a><a href="#adding-a-data-stream-description" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<p>Now we will add a new data stream definition.
+First, open the class <code>VehicleStream</code> which should look as follows:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">package</span> org.streampipes.tutorial.source;
+
+<span class="hljs-keyword">import</span> org.streampipes.model.EventStream;
+<span class="hljs-keyword">import</span> de.fzi.cep.sepa.model.impl.graph.SepDescription;
+<span class="hljs-keyword">import</span> de.fzi.cep.sepa.sources.AbstractAlreadyExistingStream;
+
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">VehiclePositionStream</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">AbstractAlreadyExistingStream</span> </span>{
+
+  <span class="hljs-meta">@Override</span>
+  <span class="hljs-function"><span class="hljs-keyword">public</span> EventStream <span class="hljs-title">declareModel</span><span class="hljs-params">(SepDescription sep)</span> </span>{
+
+
+  }
+}
+</code></pre>
+<p>This class extends the class <code>AbstractAlreadyExistingStream</code>. This class indicates that we only want to describe an already existing stream (e.g., a stream that already sends data to an existing Kafka broker).
+In contrast, if you'd plan to define a stream that produces data (e.g., simulates vehicle positions directly from this module), you could extend the class <code>AbstractAdapterIncludedStream</code>.</p>
+<p>No we will add the definition of the data stream. Add the following code inside of the <code>declareModel</code> method:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">return</span> DataStreamBuilder.create(<span class="hljs-string">"vehicle-position"</span>, <span class="hljs-string">"Vehicle Position"</span>, <span class="hljs-string">"An event stream "</span> +
+          <span class="hljs-string">"that produces current vehicle positions"</span>)
+</code></pre>
+<p>This line creates a new instance of the SDK's <code>DataStreamBuilder</code> by providing three basic parameters:
+The first parameter must be a unique identifier of your data stream.
+The second and third parameters indicate a label and a description of your stream.
+These values will later be used in the StreamPipes UI to display stream details in a human-readable manner.</p>
+<p>Next, we will add the properties as stated above to the stream definition by adding the following lines:</p>
+<pre><code class="hljs css language-java">.property(EpProperties.timestampProperty(<span class="hljs-string">"timestamp"</span>))
+.property(EpProperties.stringEp(Labels.from(<span class="hljs-string">"plate-number"</span>, <span class="hljs-string">"Plate Number"</span>, <span class="hljs-string">"Denotes the plate number of the vehicle"</span>), <span class="hljs-string">"plateNumber"</span>, <span class="hljs-string">"http://my.company/plateNumber"</span>))
+.property(EpProperties.doubleEp(Labels.from(<span class="hljs-string">"latitude"</span>, <span class="hljs-string">"Latitude"</span>, <span class="hljs-string">"Denotes the latitude value of the vehicle's position"</span>), <span class="hljs-string">"latitude"</span>, Geo.lat))
+.property(EpProperties.doubleEp(Labels.from(<span class="hljs-string">"longitude"</span>, <span class="hljs-string">"Longitude"</span>, <span class="hljs-string">"Denotes the longitude value of the vehicle's position"</span>), <span class="hljs-string">"longitude"</span>, Geo.lng))
+</code></pre>
+<p>These four <em>event properties</em> compose our <em>event schema</em>. An event property must, at least, provide the following attributes:</p>
+<ul>
+<li><strong>Runtime Name</strong>. The runtime name indicates the key of the property at runtime, e.g., if our JSON message contains a structure such as <code>{&quot;plateNumber&quot; : &quot;KA-F 123&quot;}</code>, the runtime name must be <code>plateNumber</code>.</li>
+<li><strong>Runtime Type</strong>. An event property must have a primitive type (we will later see how to model more complex properties such as lists and nested properties).
+The type must be an instance of <code>XMLSchema</code> primitives, however, the SDK provides convenience methods to provide the property type.</li>
+<li><strong>Domain Property</strong>. The domain property indicates the semantics of the event property. For instance, the <code>latitude</code> property is linked to the <code>http://www.w3.org/2003/01/geo/wgs84_pos#lat</code> property of the WGS84 vocabulary.
+The domain property should be an URI as part of an existing or domain-specific vocabulary. The SDK provides convenience methods for popuplar vocabularies (e.g., Schema.org, Dolce or WGS84).</li>
+</ul>
+<p>In order to complete the minimum required specification of an event stream, we need to provide information on the transport format and protocol of the data stream at runtime.</p>
+<p>This can be achieved by extending the builder with the respective properties:</p>
+<pre><code class="hljs css language-java">.format(Formats.jsonFormat())
+.protocol(Protocols.kafka(<span class="hljs-string">"ipe-koi15.fzi.de"</span>, <span class="hljs-number">9092</span>, <span class="hljs-string">"org.streampipes.tutorial.vehicle"</span>))
+.build();
+</code></pre>
+<p>In this example, we defined that the data stream consists of events in a JSON format and that Kafka is used as a message broker to transmit events.
+The last build() method call triggers the construction of the RDF-based data stream definition.</p>
+<p>That's it! In the next section, we will connect the data stream to a source and inspect the generated RDF description.</p>
+<h2><a class="anchor" aria-hidden="true" id="adding-a-source-description"></a><a href="#adding-a-source-description" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>A data source can be seen like a container for a set of data streams. Usually, a data source includes events that are logically or physically connected.
+For instance, in our example we would add other streams produced by vehicle sensors (such as fuel consumption) to the same data source description.</p>
+<p>Open the class <code>VehicleSource</code> which should look as follows:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.streampipes.container.declarer.EventStreamDeclarer;
+<span class="hljs-keyword">import</span> org.streampipes.container.declarer.SemanticEventProducerDeclarer;
+<span class="hljs-keyword">import</span> org.streampipes.model.graph.DataSourceDescription;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.builder.DataSourceBuilder;
+
+<span class="hljs-keyword">import</span> java.util.Arrays;
+<span class="hljs-keyword">import</span> java.util.List;
+
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TemplateSource</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">SemanticEventProducerDeclarer</span> </span>{
+
+    <span class="hljs-meta">@Override</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> DataSourceDescription <span class="hljs-title">declareModel</span><span class="hljs-params">()</span> </span>{
+        <span class="hljs-keyword">return</span> DataSourceBuilder.create(<span class="hljs-string">"template-source"</span>, <span class="hljs-string">"Template Source"</span>, <span class="hljs-string">"This is a "</span> +
+                <span class="hljs-string">"template to build your first StreamPipes source"</span>)
+                .build();
+
+    }
+
+    <span class="hljs-meta">@Override</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> List&lt;EventStreamDeclarer&gt; <span class="hljs-title">getEventStreams</span><span class="hljs-params">()</span> </span>{
+        <span class="hljs-keyword">return</span> Arrays.asList(<span class="hljs-keyword">new</span> TemplateStream());
+    }
+}
+</code></pre>
+<p>First, we need to define the source. Similar to data streams, a source consists of an id, a human-readable name and a description.
+Replace the content defined in the <code>declareModel</code> method with the following code:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">return</span> DataSourceBuilder.create(<span class="hljs-string">"source-vehicle"</span>, <span class="hljs-string">"Vehicle Source"</span>, <span class="hljs-string">"A data source that "</span> +
+    <span class="hljs-string">"holds event streams produced by vehicles."</span>)
+    .build();
+</code></pre>
+<p>Now we need to add the data stream we created before. This can be done by including the stream into the <code>getEventStreams</code> method:</p>
+<pre><code class="hljs css language-java"><span class="hljs-meta">@Override</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> List&lt;EventStreamDeclarer&gt; <span class="hljs-title">getEventStreams</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-keyword">return</span> Arrays.asList(<span class="hljs-keyword">new</span> VehicleStream());
+}
+</code></pre>
+<h2><a class="anchor" aria-hidden="true" id="preparing-the-container"></a><a href="#preparing-the-container" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>The final step is to define the deployment type of our new data source. In this tutorial, we will create a so-called <code>StandaloneModelSubmitter</code>.
+This client will start an embedded web server that provides the description of our data source.</p>
+<p>Create a new class <code>Main</code> that implements <code>StandaloneModelSubmitter</code> and add the following code into the main method:</p>
+<pre><code class="hljs css language-java"><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
+
+   DeclarersSingleton.getInstance().add(<span class="hljs-keyword">new</span> VehicleSource());
+
+   <span class="hljs-keyword">new</span> Main().init(TemplateConfig.INSTANCE);
+
+}
+</code></pre>
+<p>This code adds the <code>VehicleSource</code> and sets the port where the web server will be available. Finally, the <code>init</code> method is called
+which triggers the generation of the corresponding RDF description and startup of the web server.</p>
+<div class="admonition info">
+<div class="admonition-title">Info</div>
+<p>In the example above, we make use of a class `TemplateConfig`.
+       This class contains both mandatory and additional configuration parameters required by a pipeline element container.
+       These values are stored in the Consul-based key-value store of your StreamPipes installation.
+       The SDK guide contains a detailed manual on managing container configurations.</p>
+</div>
+<h2><a class="anchor" aria-hidden="true" id="starting-the-container"></a><a href="#starting-the-container" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<div class="admonition tip">
+<div class="admonition-title">Tip</div>
+<p>By default, the container registers itself using the hostname later used by the Docker container, leading to a 404 error when you try to access an RDF description.
+       For local development, you need to change the hostname in Consul to `localhost`.
+       Open the class `TemplateConfig.java` and change the value defined in the `HOST` variable from `template-sources` to `localhost`.</p>
+</div>
+<p>Now we are ready to start our first container!</p>
+<p>Execute the main method in the class <code>Main</code> we've just created, open a web browser and navigate to <a href="http://localhost:8090">http://localhost:8090</a>.</p>
+<p>You should see something as follows:</p>
+<p><img src="/docs/img/tutorial-sources/pe-overview.PNG" alt="Pipeline Element Container Overview"></p>
+<p>Click on the link of the data source to see the RDF description of the pipeline element.</p>
+<p><img src="/docs/img/tutorial-sources/pe-rdf.PNG" alt="Pipeline Element RDF description"></p>
+<p>The container automatically registers itself in the Consul installation of StreamPipes.
+To install the just created element, open the StreamPipes UI and follow the manual provided in the <a href="user-guide-processing-elements.md">user guide</a>.</p>
+<h2><a class="anchor" aria-hidden="true" id="read-more"></a><a href="#read-more" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>Congratulations! You've just created your first pipeline element for StreamPipes.
+There are many more things to explore and data sources can be defined in much more detail.
+Follow our <a href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sources">SDK guide</a> to see what's possible!</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/dev-guide-development-environment"><span class="arrow-prev">← </span><span>Development Environment</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-processors"><span>Tutorial: Data Processors</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#objective">Objective [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-sources/index.html b/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-sources/index.html
new file mode 100644
index 0000000..cde2a8f
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-sources/index.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Tutorial: Data Sources · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;In this tutorial, we will add a new data source consisting of a single data stream. The source will be provided as a standalone component (i.e., the description will be accessible through [...]
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Tutorial: Data Sources · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;In this tutorial, we will add a new data source consisting of a single data stream. The source will be provided as a standalone component (i.e., the [...]
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Tutorial: Data Sources</h1></header><article><div><span><p>In this tutorial, we will add a new data source consisting of a single data stream. The source will be provided as a standalone component (i.e., the description will be accessible through an integrated web server).</p>
+<h2><a class="anchor" aria-hidden="true" id="objective"></a><a href="#objective" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>We are going to create a new data stream that is produced by a GPS sensor installed in a delivery vehicle.
+The sensor produces a continuous stream of events that contain the current timestamp, the current lat/lng position of the vehicle and the plate number of the vehicle.
+Events are published in a JSON format as follows:</p>
+<pre><code class="hljs css language-json">{
+  <span class="hljs-attr">"timestamp"</span> : <span class="hljs-number">145838399</span>,
+  <span class="hljs-attr">"latitude"</span> : <span class="hljs-number">37.04</span>,
+  <span class="hljs-attr">"longitude"</span> : <span class="hljs-number">17.04</span>,
+  <span class="hljs-attr">"plateNumber"</span> : <span class="hljs-string">"KA-AB 123"</span>
+}
+</code></pre>
+<p>These events are published to a Kafka broker using the topic <code>org.streampipes.tutorial.vehicle</code>.</p>
+<p>In the following section, we show how to describe this stream in a form that allows you to import and use it in StreamPipes.</p>
+<h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>Currently, there are two options to start a new project (option 1 is recommended):</p>
+<p><strong>Option 1: Using a template project</strong></p>
+<p>Clone the following project from our Github repo: <a href="https://github.com/streampipes/templates-sources">https://github.com/streampipes/templates-sources</a></p>
+<p>Import the project into an IDE of your choice.
+You should see a structure like this:</p>
+<p><img src="/docs/img/tutorial-sources/project-structure.PNG" alt="Project Structure"></p>
+<p>Rename the class <code>TemplateSource.java</code> to <code>VehicleSource.java</code> and the class <code>TemplateStream.java</code> to <code>VehicleStream.java</code>.</p>
+<p>That's it, go to the next section to learn how to create your first data stream!</p>
+<div class="admonition tip">
+<div class="admonition-title">Tip</div>
+<p>Besides the basic project skeleton, the sample project also includes an example Dockerfile you can use to package your application into a Docker container.
+</p>
+</div>
+<p><strong>Option 2: Start a new project from scratch</strong></p>
+<p>If you want to start from scratch, we refer to the <a href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-processors">Sources SDK guide</a> which provides instructions on the general project setup.</p>
+<h2><a class="anchor" aria-hidden="true" id="adding-a-data-stream-description"></a><a href="#adding-a-data-stream-description" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<p>Now we will add a new data stream definition.
+First, open the class <code>VehicleStream</code> which should look as follows:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">package</span> org.streampipes.tutorial.source;
+
+<span class="hljs-keyword">import</span> org.streampipes.model.EventStream;
+<span class="hljs-keyword">import</span> de.fzi.cep.sepa.model.impl.graph.SepDescription;
+<span class="hljs-keyword">import</span> de.fzi.cep.sepa.sources.AbstractAlreadyExistingStream;
+
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">VehiclePositionStream</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">AbstractAlreadyExistingStream</span> </span>{
+
+  <span class="hljs-meta">@Override</span>
+  <span class="hljs-function"><span class="hljs-keyword">public</span> EventStream <span class="hljs-title">declareModel</span><span class="hljs-params">(SepDescription sep)</span> </span>{
+
+
+  }
+}
+</code></pre>
+<p>This class extends the class <code>AbstractAlreadyExistingStream</code>. This class indicates that we only want to describe an already existing stream (e.g., a stream that already sends data to an existing Kafka broker).
+In contrast, if you'd plan to define a stream that produces data (e.g., simulates vehicle positions directly from this module), you could extend the class <code>AbstractAdapterIncludedStream</code>.</p>
+<p>No we will add the definition of the data stream. Add the following code inside of the <code>declareModel</code> method:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">return</span> DataStreamBuilder.create(<span class="hljs-string">"vehicle-position"</span>, <span class="hljs-string">"Vehicle Position"</span>, <span class="hljs-string">"An event stream "</span> +
+          <span class="hljs-string">"that produces current vehicle positions"</span>)
+</code></pre>
+<p>This line creates a new instance of the SDK's <code>DataStreamBuilder</code> by providing three basic parameters:
+The first parameter must be a unique identifier of your data stream.
+The second and third parameters indicate a label and a description of your stream.
+These values will later be used in the StreamPipes UI to display stream details in a human-readable manner.</p>
+<p>Next, we will add the properties as stated above to the stream definition by adding the following lines:</p>
+<pre><code class="hljs css language-java">.property(EpProperties.timestampProperty(<span class="hljs-string">"timestamp"</span>))
+.property(EpProperties.stringEp(Labels.from(<span class="hljs-string">"plate-number"</span>, <span class="hljs-string">"Plate Number"</span>, <span class="hljs-string">"Denotes the plate number of the vehicle"</span>), <span class="hljs-string">"plateNumber"</span>, <span class="hljs-string">"http://my.company/plateNumber"</span>))
+.property(EpProperties.doubleEp(Labels.from(<span class="hljs-string">"latitude"</span>, <span class="hljs-string">"Latitude"</span>, <span class="hljs-string">"Denotes the latitude value of the vehicle's position"</span>), <span class="hljs-string">"latitude"</span>, Geo.lat))
+.property(EpProperties.doubleEp(Labels.from(<span class="hljs-string">"longitude"</span>, <span class="hljs-string">"Longitude"</span>, <span class="hljs-string">"Denotes the longitude value of the vehicle's position"</span>), <span class="hljs-string">"longitude"</span>, Geo.lng))
+</code></pre>
+<p>These four <em>event properties</em> compose our <em>event schema</em>. An event property must, at least, provide the following attributes:</p>
+<ul>
+<li><strong>Runtime Name</strong>. The runtime name indicates the key of the property at runtime, e.g., if our JSON message contains a structure such as <code>{&quot;plateNumber&quot; : &quot;KA-F 123&quot;}</code>, the runtime name must be <code>plateNumber</code>.</li>
+<li><strong>Runtime Type</strong>. An event property must have a primitive type (we will later see how to model more complex properties such as lists and nested properties).
+The type must be an instance of <code>XMLSchema</code> primitives, however, the SDK provides convenience methods to provide the property type.</li>
+<li><strong>Domain Property</strong>. The domain property indicates the semantics of the event property. For instance, the <code>latitude</code> property is linked to the <code>http://www.w3.org/2003/01/geo/wgs84_pos#lat</code> property of the WGS84 vocabulary.
+The domain property should be an URI as part of an existing or domain-specific vocabulary. The SDK provides convenience methods for popuplar vocabularies (e.g., Schema.org, Dolce or WGS84).</li>
+</ul>
+<p>In order to complete the minimum required specification of an event stream, we need to provide information on the transport format and protocol of the data stream at runtime.</p>
+<p>This can be achieved by extending the builder with the respective properties:</p>
+<pre><code class="hljs css language-java">.format(Formats.jsonFormat())
+.protocol(Protocols.kafka(<span class="hljs-string">"ipe-koi15.fzi.de"</span>, <span class="hljs-number">9092</span>, <span class="hljs-string">"org.streampipes.tutorial.vehicle"</span>))
+.build();
+</code></pre>
+<p>In this example, we defined that the data stream consists of events in a JSON format and that Kafka is used as a message broker to transmit events.
+The last build() method call triggers the construction of the RDF-based data stream definition.</p>
+<p>That's it! In the next section, we will connect the data stream to a source and inspect the generated RDF description.</p>
+<h2><a class="anchor" aria-hidden="true" id="adding-a-source-description"></a><a href="#adding-a-source-description" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>A data source can be seen like a container for a set of data streams. Usually, a data source includes events that are logically or physically connected.
+For instance, in our example we would add other streams produced by vehicle sensors (such as fuel consumption) to the same data source description.</p>
+<p>Open the class <code>VehicleSource</code> which should look as follows:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.streampipes.container.declarer.EventStreamDeclarer;
+<span class="hljs-keyword">import</span> org.streampipes.container.declarer.SemanticEventProducerDeclarer;
+<span class="hljs-keyword">import</span> org.streampipes.model.graph.DataSourceDescription;
+<span class="hljs-keyword">import</span> org.streampipes.sdk.builder.DataSourceBuilder;
+
+<span class="hljs-keyword">import</span> java.util.Arrays;
+<span class="hljs-keyword">import</span> java.util.List;
+
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TemplateSource</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">SemanticEventProducerDeclarer</span> </span>{
+
+    <span class="hljs-meta">@Override</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> DataSourceDescription <span class="hljs-title">declareModel</span><span class="hljs-params">()</span> </span>{
+        <span class="hljs-keyword">return</span> DataSourceBuilder.create(<span class="hljs-string">"template-source"</span>, <span class="hljs-string">"Template Source"</span>, <span class="hljs-string">"This is a "</span> +
+                <span class="hljs-string">"template to build your first StreamPipes source"</span>)
+                .build();
+
+    }
+
+    <span class="hljs-meta">@Override</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> List&lt;EventStreamDeclarer&gt; <span class="hljs-title">getEventStreams</span><span class="hljs-params">()</span> </span>{
+        <span class="hljs-keyword">return</span> Arrays.asList(<span class="hljs-keyword">new</span> TemplateStream());
+    }
+}
+</code></pre>
+<p>First, we need to define the source. Similar to data streams, a source consists of an id, a human-readable name and a description.
+Replace the content defined in the <code>declareModel</code> method with the following code:</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">return</span> DataSourceBuilder.create(<span class="hljs-string">"source-vehicle"</span>, <span class="hljs-string">"Vehicle Source"</span>, <span class="hljs-string">"A data source that "</span> +
+    <span class="hljs-string">"holds event streams produced by vehicles."</span>)
+    .build();
+</code></pre>
+<p>Now we need to add the data stream we created before. This can be done by including the stream into the <code>getEventStreams</code> method:</p>
+<pre><code class="hljs css language-java"><span class="hljs-meta">@Override</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> List&lt;EventStreamDeclarer&gt; <span class="hljs-title">getEventStreams</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-keyword">return</span> Arrays.asList(<span class="hljs-keyword">new</span> VehicleStream());
+}
+</code></pre>
+<h2><a class="anchor" aria-hidden="true" id="preparing-the-container"></a><a href="#preparing-the-container" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>The final step is to define the deployment type of our new data source. In this tutorial, we will create a so-called <code>StandaloneModelSubmitter</code>.
+This client will start an embedded web server that provides the description of our data source.</p>
+<p>Create a new class <code>Main</code> that implements <code>StandaloneModelSubmitter</code> and add the following code into the main method:</p>
+<pre><code class="hljs css language-java"><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
+
+   DeclarersSingleton.getInstance().add(<span class="hljs-keyword">new</span> VehicleSource());
+
+   <span class="hljs-keyword">new</span> Main().init(TemplateConfig.INSTANCE);
+
+}
+</code></pre>
+<p>This code adds the <code>VehicleSource</code> and sets the port where the web server will be available. Finally, the <code>init</code> method is called
+which triggers the generation of the corresponding RDF description and startup of the web server.</p>
+<div class="admonition info">
+<div class="admonition-title">Info</div>
+<p>In the example above, we make use of a class `TemplateConfig`.
+       This class contains both mandatory and additional configuration parameters required by a pipeline element container.
+       These values are stored in the Consul-based key-value store of your StreamPipes installation.
+       The SDK guide contains a detailed manual on managing container configurations.</p>
+</div>
+<h2><a class="anchor" aria-hidden="true" id="starting-the-container"></a><a href="#starting-the-container" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<div class="admonition tip">
+<div class="admonition-title">Tip</div>
+<p>By default, the container registers itself using the hostname later used by the Docker container, leading to a 404 error when you try to access an RDF description.
+       For local development, you need to change the hostname in Consul to `localhost`.
+       Open the class `TemplateConfig.java` and change the value defined in the `HOST` variable from `template-sources` to `localhost`.</p>
+</div>
+<p>Now we are ready to start our first container!</p>
+<p>Execute the main method in the class <code>Main</code> we've just created, open a web browser and navigate to <a href="http://localhost:8090">http://localhost:8090</a>.</p>
+<p>You should see something as follows:</p>
+<p><img src="/docs/img/tutorial-sources/pe-overview.PNG" alt="Pipeline Element Container Overview"></p>
+<p>Click on the link of the data source to see the RDF description of the pipeline element.</p>
+<p><img src="/docs/img/tutorial-sources/pe-rdf.PNG" alt="Pipeline Element RDF description"></p>
+<p>The container automatically registers itself in the Consul installation of StreamPipes.
+To install the just created element, open the StreamPipes UI and follow the manual provided in the <a href="user-guide-processing-elements.md">user guide</a>.</p>
+<h2><a class="anchor" aria-hidden="true" id="read-more"></a><a href="#read-more" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>Congratulations! You've just created your first pipeline element for StreamPipes.
+There are many more things to explore and data sources can be defined in much more detail.
+Follow our <a href="/docs/docs/0.55.2-pre-asf/dev-guide-sdk-guide-sources">SDK guide</a> to see what's possible!</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/dev-guide-development-environment"><span class="arrow-prev">← </span><span>Development Environment</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/dev-guide-tutorial-processors"><span>Tutorial: Data Processors</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#objective">Objective [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/faq-common-problems.html b/docs/docs/0.55.2-pre-asf/faq-common-problems.html
new file mode 100644
index 0000000..ac00224
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/faq-common-problems.html
@@ -0,0 +1,122 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Common Problems · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;ul&gt;
+&lt;li&gt;Windows 10: Consul, Kafka, Zookeeper, or Kafka-Rest did not start&lt;/li&gt;
+&lt;/ul&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Common Problems · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;ul&gt;
+&lt;li&gt;Windows 10: Consul, Kafka, Zookeeper, or Kafka-Rest did not start&lt;/li&gt;
+&lt;/ul&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Common Problems</h1></header><article><div><span><ul>
+<li>Windows 10: Consul, Kafka, Zookeeper, or Kafka-Rest did not start</li>
+<li>Linux / OSX: Consul does not start</li>
+<li>Run StreamPipes in a VM in Windows</li>
+<li>Only few processors are available in the pipeline editor</li>
+<li>No data is shown in the live dashbord</li>
+<li>Windows 10: Should I use settings windows containers or docker containers?</li>
+<li>Help us to improve StreamPipes and this documentation</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="windows-10-consul-kafka-zookeeper-or-kafka-rest-did-not-start"></a><a href="#windows-10-consul-kafka-zookeeper-or-kafka-rest-did-not-start" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-. [...]
+<p><strong>Problem:</strong> You get an error message similar to: <code>ERROR: for consul Cannot start service consul: b'driver failed programming external connectivity on endpoint sp-test_consul_1 (eae0457fc03c1364b8e81a6e155ca4b95ee1e1d01bb3c1aa9dd5192bdcb7b91a): Error starting userland proxy: mkdir /port/tcp:0.0.0.0:8600:tcp:172.30.0.9:8600: input/output error</code></p>
+<p><strong>Solution:</strong> To resolve this problem, stop StreamPipes with <code>streampipes stop</code> and restart Docker via the Docker settings in the task bar.
+After Docker was restarted, run <code>streampipes start</code>.</p>
+<h2><a class="anchor" aria-hidden="true" id="consul-does-not-start"></a><a href="#consul-does-not-start" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
+<p><strong>Problem:</strong> After starting StreamPipes with <code>streampipes start</code>, there is an error with Consul:</p>
+<p><strong>Solution:</strong> To resolve this, execute <code>streampipes stop</code>, wait a minute and start it again with <code>streampipes start</code>. If you've installed an old version of StreamPipes (before the installer was available), make sure that no network suffixed with <code>spnet</code> exists in Docker. Type <code>docker network ls</code> to check and <code>docker network rm NETWORK_NAME</code> to remove the existing network before running the installer.</p>
+<h2><a class="anchor" aria-hidden="true" id="run-streampipes-in-a-vm-in-windows"></a><a href="#run-streampipes-in-a-vm-in-windows" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5 [...]
+<p><strong>Problem:</strong> StreamPipes does not work properly with Docker under Windows 8 or earlier versions.</p>
+<p><strong>Solution:</strong> We do support virtual machines (VMs), but if you run them under Windows, there might be problems with docker and its network configurations.
+Please use Windows 10, OSX or Linux.
+You can also use a VM from a cloud provider to test StreamPipes.</p>
+<h2><a class="anchor" aria-hidden="true" id="only-few-processors-are-available-in-the-pipeline-editor"></a><a href="#only-few-processors-are-available-in-the-pipeline-editor" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.2 [...]
+<p><strong>Problem:</strong> In the Pipeline Editor, only a few processors can be used in pipelines.</p>
+<p><strong>Solution:</strong> In the demo/desktop version, we only integrated a few processors. To ensure that you can easily try out StreamPipes (even on your laptop),
+we tried to make it as lightweight as possible. If you are interested in more sophisticated algorithms, pleas contact us.</p>
+<h2><a class="anchor" aria-hidden="true" id="no-data-is-shown-in-the-live-dashboard"></a><a href="#no-data-is-shown-in-the-live-dashboard" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
+<p><strong>Problem:</strong> The live dashboard does not show any data.</p>
+<p><strong>Solution:</strong> If this is the case, your IP is probably configured wrong.
+You can reinstall the system by running <code>streampipes clean</code> and then <code>streampipes start</code> again.
+This will delete all StreamPipes configurations. StreamPipes is designed as a server application and requires a fixed IP.
+We created a version to easily run it on your laptop and test it, but on your laptop you usually get a new IP when you change the network.
+This problem only occurs in testing scenarios, in production scenarios the IP can also be changed manually without data loss.</p>
+<h2><a class="anchor" aria-hidden="true" id="windows-10-should-i-use-settings-windows-containers-or-docker-containers"></a><a href="#windows-10-should-i-use-settings-windows-containers-or-docker-containers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C1 [...]
+<p><strong>Problem:</strong> StreamPipes does not work with Windows 10.</p>
+<p><strong>Solution:</strong> You should use docker containers. Go to the docker settings on our taks bar and select 'Switch to Docker containers'.</p>
+<h2><a class="anchor" aria-hidden="true" id="help-us-to-improve-streampipes-and-this-documentation"></a><a href="#help-us-to-improve-streampipes-and-this-documentation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2. [...]
+<p>Help us to improve this section.
+If you have any problems with the system or with the documentation, do not hesitate to contact us.
+Our goal is to continuously improve StreamPipes.
+Your help and feedback is welcome.</p>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#windows-10-consul-kafka-zookeeper-or-kafka-rest-did-not-start">Windows 10: Consul, Kafka, Zookeeper, or Kafka-Rest did not start</a></li><li><a href="#consul-does-not-start">Consul does not start</a></li><li><a href="#run-streampipes-in-a-vm-in-windows">Run StreamPipes in a VM in Windows</a></li><li><a href="#only-few-processors-are-available-in-the-pipe [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/faq-common-problems/index.html b/docs/docs/0.55.2-pre-asf/faq-common-problems/index.html
new file mode 100644
index 0000000..ac00224
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/faq-common-problems/index.html
@@ -0,0 +1,122 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Common Problems · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;ul&gt;
+&lt;li&gt;Windows 10: Consul, Kafka, Zookeeper, or Kafka-Rest did not start&lt;/li&gt;
+&lt;/ul&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Common Problems · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;ul&gt;
+&lt;li&gt;Windows 10: Consul, Kafka, Zookeeper, or Kafka-Rest did not start&lt;/li&gt;
+&lt;/ul&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Common Problems</h1></header><article><div><span><ul>
+<li>Windows 10: Consul, Kafka, Zookeeper, or Kafka-Rest did not start</li>
+<li>Linux / OSX: Consul does not start</li>
+<li>Run StreamPipes in a VM in Windows</li>
+<li>Only few processors are available in the pipeline editor</li>
+<li>No data is shown in the live dashbord</li>
+<li>Windows 10: Should I use settings windows containers or docker containers?</li>
+<li>Help us to improve StreamPipes and this documentation</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="windows-10-consul-kafka-zookeeper-or-kafka-rest-did-not-start"></a><a href="#windows-10-consul-kafka-zookeeper-or-kafka-rest-did-not-start" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-. [...]
+<p><strong>Problem:</strong> You get an error message similar to: <code>ERROR: for consul Cannot start service consul: b'driver failed programming external connectivity on endpoint sp-test_consul_1 (eae0457fc03c1364b8e81a6e155ca4b95ee1e1d01bb3c1aa9dd5192bdcb7b91a): Error starting userland proxy: mkdir /port/tcp:0.0.0.0:8600:tcp:172.30.0.9:8600: input/output error</code></p>
+<p><strong>Solution:</strong> To resolve this problem, stop StreamPipes with <code>streampipes stop</code> and restart Docker via the Docker settings in the task bar.
+After Docker was restarted, run <code>streampipes start</code>.</p>
+<h2><a class="anchor" aria-hidden="true" id="consul-does-not-start"></a><a href="#consul-does-not-start" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
+<p><strong>Problem:</strong> After starting StreamPipes with <code>streampipes start</code>, there is an error with Consul:</p>
+<p><strong>Solution:</strong> To resolve this, execute <code>streampipes stop</code>, wait a minute and start it again with <code>streampipes start</code>. If you've installed an old version of StreamPipes (before the installer was available), make sure that no network suffixed with <code>spnet</code> exists in Docker. Type <code>docker network ls</code> to check and <code>docker network rm NETWORK_NAME</code> to remove the existing network before running the installer.</p>
+<h2><a class="anchor" aria-hidden="true" id="run-streampipes-in-a-vm-in-windows"></a><a href="#run-streampipes-in-a-vm-in-windows" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5 [...]
+<p><strong>Problem:</strong> StreamPipes does not work properly with Docker under Windows 8 or earlier versions.</p>
+<p><strong>Solution:</strong> We do support virtual machines (VMs), but if you run them under Windows, there might be problems with docker and its network configurations.
+Please use Windows 10, OSX or Linux.
+You can also use a VM from a cloud provider to test StreamPipes.</p>
+<h2><a class="anchor" aria-hidden="true" id="only-few-processors-are-available-in-the-pipeline-editor"></a><a href="#only-few-processors-are-available-in-the-pipeline-editor" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.2 [...]
+<p><strong>Problem:</strong> In the Pipeline Editor, only a few processors can be used in pipelines.</p>
+<p><strong>Solution:</strong> In the demo/desktop version, we only integrated a few processors. To ensure that you can easily try out StreamPipes (even on your laptop),
+we tried to make it as lightweight as possible. If you are interested in more sophisticated algorithms, pleas contact us.</p>
+<h2><a class="anchor" aria-hidden="true" id="no-data-is-shown-in-the-live-dashboard"></a><a href="#no-data-is-shown-in-the-live-dashboard" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
+<p><strong>Problem:</strong> The live dashboard does not show any data.</p>
+<p><strong>Solution:</strong> If this is the case, your IP is probably configured wrong.
+You can reinstall the system by running <code>streampipes clean</code> and then <code>streampipes start</code> again.
+This will delete all StreamPipes configurations. StreamPipes is designed as a server application and requires a fixed IP.
+We created a version to easily run it on your laptop and test it, but on your laptop you usually get a new IP when you change the network.
+This problem only occurs in testing scenarios, in production scenarios the IP can also be changed manually without data loss.</p>
+<h2><a class="anchor" aria-hidden="true" id="windows-10-should-i-use-settings-windows-containers-or-docker-containers"></a><a href="#windows-10-should-i-use-settings-windows-containers-or-docker-containers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C1 [...]
+<p><strong>Problem:</strong> StreamPipes does not work with Windows 10.</p>
+<p><strong>Solution:</strong> You should use docker containers. Go to the docker settings on our taks bar and select 'Switch to Docker containers'.</p>
+<h2><a class="anchor" aria-hidden="true" id="help-us-to-improve-streampipes-and-this-documentation"></a><a href="#help-us-to-improve-streampipes-and-this-documentation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2. [...]
+<p>Help us to improve this section.
+If you have any problems with the system or with the documentation, do not hesitate to contact us.
+Our goal is to continuously improve StreamPipes.
+Your help and feedback is welcome.</p>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#windows-10-consul-kafka-zookeeper-or-kafka-rest-did-not-start">Windows 10: Consul, Kafka, Zookeeper, or Kafka-Rest did not start</a></li><li><a href="#consul-does-not-start">Consul does not start</a></li><li><a href="#run-streampipes-in-a-vm-in-windows">Run StreamPipes in a VM in Windows</a></li><li><a href="#only-few-processors-are-available-in-the-pipe [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/pipeline-elements.html b/docs/docs/0.55.2-pre-asf/pipeline-elements.html
new file mode 100644
index 0000000..6664b52
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/pipeline-elements.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pipeline Elements · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Starting from StreamPipes version 0.62.0, this section will contain an overview of currently available pipeline elements.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Pipeline Elements · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;Starting from StreamPipes version 0.62.0, this section will contain an overview of currently available pipeline elements.&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Pipeline Elements</h1></header><article><div><span><p>Starting from StreamPipes version 0.62.0, this section will contain an overview of currently available pipeline elements.</p>
+<p>See a preview of these elements by opening the docs of the <a href="next/pipeline-elements">pre-release version</a>!</p>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/docs/" class="nav-home"><img src="/docs/img/sp-logo-color.png" alt="StreamPipes" width="66"/></a><div><h5>Docs</h5><a href="/docs/docs/user-guide-introduction">User Guide</a><a href="/docs/docs/dev-guide-introduction">Developer Guide</a><a href="/docs/docs/faq-common-problems">Frequently Asked Questions [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/pipeline-elements/index.html b/docs/docs/0.55.2-pre-asf/pipeline-elements/index.html
new file mode 100644
index 0000000..6664b52
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/pipeline-elements/index.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pipeline Elements · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Starting from StreamPipes version 0.62.0, this section will contain an overview of currently available pipeline elements.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Pipeline Elements · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;Starting from StreamPipes version 0.62.0, this section will contain an overview of currently available pipeline elements.&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Pipeline Elements</h1></header><article><div><span><p>Starting from StreamPipes version 0.62.0, this section will contain an overview of currently available pipeline elements.</p>
+<p>See a preview of these elements by opening the docs of the <a href="next/pipeline-elements">pre-release version</a>!</p>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/docs/" class="nav-home"><img src="/docs/img/sp-logo-color.png" alt="StreamPipes" width="66"/></a><div><h5>Docs</h5><a href="/docs/docs/user-guide-introduction">User Guide</a><a href="/docs/docs/dev-guide-introduction">Developer Guide</a><a href="/docs/docs/faq-common-problems">Frequently Asked Questions [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/privacy.html b/docs/docs/0.55.2-pre-asf/privacy.html
new file mode 100644
index 0000000..0eb8293
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/privacy.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Datenschutzerklärung · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;verantwortliche-stelle&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#verantwortliche-stelle&quot; aria-hidden=&quot;true&quot; c [...]
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Datenschutzerklärung · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;verantwortliche-stelle&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#verantwortliche-stel [...]
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+<p>FZI Forschungszentrum Informatik
+Haid-und-Neu-Straße 10-14
+76131 Karlsruhe</p>
+<p>E-Mail: <a href="mailto:datenschutz@fzi.de">datenschutz@fzi.de</a></p>
+<h2><a class="anchor" aria-hidden="true" id="besuch-der-webseite"></a><a href="#besuch-der-webseite" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p>Wenn Sie auf unsere Webseite zugreifen werden automatisch folgende Informationen über Sie in Form von Server-Logfiles gespeichert:</p>
+<ul>
+<li>Ihr Webbrowser</li>
+<li>Ihr Betriebssystem</li>
+<li>Ihre IP-Adresse und Port</li>
+<li>Die aufgerufene Webseite oder Bestandteile davon</li>
+<li>Die Webseite, von der Sie uns besuchen</li>
+<li>Der Zugriffszeitpunkt</li>
+<li>Diese Daten werden auf Basis von Art. 6 Abs. 1 lit. f DSGVO erhoben und der Zweck der Datenerhebung ist der Betrieb, die Wartung und der Schutz unserer Systeme. Die Daten fallen standardmäßig bei jedem Verbindungsaufbau mit einem Webserver im Internet an. Tritt ein Fehler bei der Nutzung unserer Webseite auf oder vermuten wir einen Angriff oder eine missbräuchliche Nutzung, dienen diese Daten dazu das eingetretene Szenario zu reproduzieren. Ihre IP-Adresse wird zusätzlich dazu genutz [...]
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="cookies-und-analyse-tool"></a><a href="#cookies-und-analyse-tool" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>Auf dieser Website werden unter Einsatz der Webanalysedienst-Software Matomo (<a href="http://www.matomo.org">www.matomo.org</a>), einem Dienst des Anbieters InnoCraft Ltd., 150 Willis St, 6011 Wellington, Neuseeland, („Mataomo“) auf Basis unseres berechtigten Interesses an der statistischen Analyse des Nutzerverhaltens zu Optimierungszwecken unserer Webseite gemäß Art. 6 Abs. 1 lit. f DSGVO Daten gesammelt und gespeichert. Aus diesen Daten können zum selben Zweck pseudonymisierte Nut [...]
+<h2><a class="anchor" aria-hidden="true" id="ihre-rechte"></a><a href="#ihre-rechte" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
+<p>Als Betroffener einer Datenerfassung stehen Ihnen umfassende Rechte zu (Art. 15-23 DSGVO):</p>
+<ul>
+<li>Das Recht jederzeit Auskunft über Ihre bei uns gespeicherten Daten zu erhalten</li>
+<li>Das Recht die Einschränkung der Verarbeitung Ihrer Daten zu fordern oder der Verarbeitung zu widersprechen</li>
+<li>Das Recht die Sperrung oder Löschung Ihrer Daten zu verlangen</li>
+<li>Das Recht die Ihre Daten berichtigen zu lassen</li>
+<li>Das Recht Ihre bei uns gespeicherten Daten in einem maschinenlesbaren Format zu erhalten („Datenübertragbarkeit“)</li>
+<li>Möchten Sie Ihre Rechte geltend machen, schicken Sie uns einfach eine E-Mail an die oben genannte Kontaktadresse (<a href="mailto:datenschutz@fzi.de">datenschutz@fzi.de</a>). Zusätzlich haben Sie natürlich jederzeit das Recht sich, bei Verdacht auf einen Verstoß gegen das Datenschutzrecht, bei der zuständigen Aufsichtsbehörde zu melden.</li>
+</ul>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#verantwortliche-stelle">Verantwortliche Stelle</a></li><li><a href="#besuch-der-webseite">Besuch der Webseite</a></li><li><a href="#cookies-und-analyse-tool">Cookies und Analyse-Tool</a></li><li><a href="#ihre-rechte">Ihre Rechte</a></li></ul></nav></div><div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/docs/" class="nav-home [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/privacy/index.html b/docs/docs/0.55.2-pre-asf/privacy/index.html
new file mode 100644
index 0000000..0eb8293
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/privacy/index.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Datenschutzerklärung · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;verantwortliche-stelle&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#verantwortliche-stelle&quot; aria-hidden=&quot;true&quot; c [...]
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Datenschutzerklärung · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;verantwortliche-stelle&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#verantwortliche-stel [...]
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+<p>FZI Forschungszentrum Informatik
+Haid-und-Neu-Straße 10-14
+76131 Karlsruhe</p>
+<p>E-Mail: <a href="mailto:datenschutz@fzi.de">datenschutz@fzi.de</a></p>
+<h2><a class="anchor" aria-hidden="true" id="besuch-der-webseite"></a><a href="#besuch-der-webseite" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p>Wenn Sie auf unsere Webseite zugreifen werden automatisch folgende Informationen über Sie in Form von Server-Logfiles gespeichert:</p>
+<ul>
+<li>Ihr Webbrowser</li>
+<li>Ihr Betriebssystem</li>
+<li>Ihre IP-Adresse und Port</li>
+<li>Die aufgerufene Webseite oder Bestandteile davon</li>
+<li>Die Webseite, von der Sie uns besuchen</li>
+<li>Der Zugriffszeitpunkt</li>
+<li>Diese Daten werden auf Basis von Art. 6 Abs. 1 lit. f DSGVO erhoben und der Zweck der Datenerhebung ist der Betrieb, die Wartung und der Schutz unserer Systeme. Die Daten fallen standardmäßig bei jedem Verbindungsaufbau mit einem Webserver im Internet an. Tritt ein Fehler bei der Nutzung unserer Webseite auf oder vermuten wir einen Angriff oder eine missbräuchliche Nutzung, dienen diese Daten dazu das eingetretene Szenario zu reproduzieren. Ihre IP-Adresse wird zusätzlich dazu genutz [...]
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="cookies-und-analyse-tool"></a><a href="#cookies-und-analyse-tool" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>Auf dieser Website werden unter Einsatz der Webanalysedienst-Software Matomo (<a href="http://www.matomo.org">www.matomo.org</a>), einem Dienst des Anbieters InnoCraft Ltd., 150 Willis St, 6011 Wellington, Neuseeland, („Mataomo“) auf Basis unseres berechtigten Interesses an der statistischen Analyse des Nutzerverhaltens zu Optimierungszwecken unserer Webseite gemäß Art. 6 Abs. 1 lit. f DSGVO Daten gesammelt und gespeichert. Aus diesen Daten können zum selben Zweck pseudonymisierte Nut [...]
+<h2><a class="anchor" aria-hidden="true" id="ihre-rechte"></a><a href="#ihre-rechte" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
+<p>Als Betroffener einer Datenerfassung stehen Ihnen umfassende Rechte zu (Art. 15-23 DSGVO):</p>
+<ul>
+<li>Das Recht jederzeit Auskunft über Ihre bei uns gespeicherten Daten zu erhalten</li>
+<li>Das Recht die Einschränkung der Verarbeitung Ihrer Daten zu fordern oder der Verarbeitung zu widersprechen</li>
+<li>Das Recht die Sperrung oder Löschung Ihrer Daten zu verlangen</li>
+<li>Das Recht die Ihre Daten berichtigen zu lassen</li>
+<li>Das Recht Ihre bei uns gespeicherten Daten in einem maschinenlesbaren Format zu erhalten („Datenübertragbarkeit“)</li>
+<li>Möchten Sie Ihre Rechte geltend machen, schicken Sie uns einfach eine E-Mail an die oben genannte Kontaktadresse (<a href="mailto:datenschutz@fzi.de">datenschutz@fzi.de</a>). Zusätzlich haben Sie natürlich jederzeit das Recht sich, bei Verdacht auf einen Verstoß gegen das Datenschutzrecht, bei der zuständigen Aufsichtsbehörde zu melden.</li>
+</ul>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#verantwortliche-stelle">Verantwortliche Stelle</a></li><li><a href="#besuch-der-webseite">Besuch der Webseite</a></li><li><a href="#cookies-und-analyse-tool">Cookies und Analyse-Tool</a></li><li><a href="#ihre-rechte">Ihre Rechte</a></li></ul></nav></div><div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/docs/" class="nav-home [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/user-guide-getting-started.html b/docs/docs/0.55.2-pre-asf/user-guide-getting-started.html
new file mode 100644
index 0000000..0a2e26f
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/user-guide-getting-started.html
@@ -0,0 +1,292 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Getting Started · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;This quick start explains how StreamPipes can be set up in the browser.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Getting Started · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;This quick start explains how StreamPipes can be set up in the browser.&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Getting Started</h1></header><article><div><span><p>This quick start explains how StreamPipes can be set up in the browser.
+Before starting with this guide, all steps from the installation guide must be finished successfully and StreamPipes must be up and running.
+Navigate to the StreamPipes graphical user interface in the browser.
+Use the IP or hostname of the server StreamPipes is running on.</p>
+<p>This guide consists of three steps.
+First, StreamPipes is configured, then all pipeline elements are installed.
+In the end of this quick start, you will create your first pipelines.
+Now lets begin with setting up StreamPipes.</p>
+<h2><a class="anchor" aria-hidden="true" id="setup-streampipes"></a><a href="#setup-streampipes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>In the browser you should see the image below.
+To set up the system enter a user email address and a password and click on install.
+Do NOT change the advanced settings, just click on install.
+The installation might take some time, continue by clicking on &quot;Go to login page&quot;, once all components are successfully configured.
+If there is a problem with any of the components, please restart the whole system and delete the &quot;config&quot; directory on the server.
+This directory is in the same folder as the docker-compose.yml file.</p>
+<p>On the login page, enter your credentials, then you should be forwarded to the home page.
+Congratulations! You've just configured your first StreamPipes instance.
+The system configured all components by itself and the individual StreamPipes services are now ready.</p>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/setup/01_register_user.png" alt="Set Up User">
+    <img src="/docs/img/quickstart/setup/02_user_set_up.png" alt="SetUp StreamPipes Components">
+    <img src="/docs/img/quickstart/setup/03_login.png" alt="Go to login page">
+    <img src="/docs/img/quickstart/setup/04_home.png" alt="Home page">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="first-examples"></a><a href="#first-examples" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>In this tutorial, you will create two simple pipelines that demonstrate the basic functionality of StreamPipes.
+The first example deals with monitoring a flow rate sensor.
+This pipeline ensures that everything works properly and data is sent through the whole system.
+In the second example we model a more complex situation detection pipeline that triggers a notification.
+Let's start with our first pipeline.
+If you have problems with any of the examples, please send us an email.
+We are happy to help you.</p>
+<h2><a class="anchor" aria-hidden="true" id="data-simulation"></a><a href="#data-simulation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>All the data sources that we have integrated in the StreamPipes demonstrator are simulated according to real world sensors.
+For example a flow rate sensor in a water pipe, which measures how much water flows in that pipe or a water level sensor in a water tank, that reports how high the water level is in the tank.
+In the next section you will use the flow rate sensor to build your first pipeline.</p>
+<h2><a class="anchor" aria-hidden="true" id="flow-rate-visualization"></a><a href="#flow-rate-visualization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>In the first example, we create a live line chart to monitor the value of the mass flow from a flow rate sensor.</p>
+<h3><a class="anchor" aria-hidden="true" id="create-pipeline"></a><a href="#create-pipeline" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<ul>
+<li>As a first step go to the pipeline editor</li>
+<li>Select the <strong>FRS1</strong> (Flow Rate Source 1)source</li>
+<li>Then navigate to the <strong>Data Sink</strong> tab</li>
+<li>Select the <strong>DS</strong> (Dashboard Sink) and connect the source with the sink</li>
+<li>After connecting the elements save the pipeline by clicking on the save button on the top left corner</li>
+<li>In the save menu add a name <em>Flow Rate Monitoring</em> and a description <em>This is my very first pipeline!</em></li>
+<li>Also select the <strong>Start pipeline immediatly</strong> checkbox</li>
+<li>Then click the button <strong>Save and go to pipeline view</strong></li>
+<li>You are navigated to the pipeline view and a confirmation that the pipeline was started successfully should be shown</li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/01_example1_empty.png" alt="Show Pipeline Editor Sources">
+    <img src="/docs/img/quickstart/examples/02_example1_source.png" alt="Sources">
+    <img src="/docs/img/quickstart/examples/03_example1_pipeline_finished.png" alt="Pipeline Finished">
+    <img src="/docs/img/quickstart/examples/04_example1_save.png" alt="Saved Pipeline">
+    <img src="/docs/img/quickstart/examples/05_example1_pipeline_started.png" alt="Pipeline 01 Started">
+</div>
+<h3><a class="anchor" aria-hidden="true" id="create-visualization"></a><a href="#create-visualization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<ul>
+<li>After we have created the pipeline we must create the line chart</li>
+<li>Navigate to the <strong>Live Dashboard</strong> of StreamPipes</li>
+<li>Click on the <strong>Add visualization</strong> button</li>
+<li>Select the just created pipeline <strong>Flow Rate Monitoring</strong> and click the <strong>next</strong> button</li>
+<li>For the visualization select the <strong>Line Chart</strong> and click <strong>next</strong> again</li>
+<li>Now you have to enter the configuration for the line chart
+<ul>
+<li>Select time mapping: <strong>timestamp</strong></li>
+<li>Select number mapping: <strong>mass_flow</strong></li>
+<li>Range Minimum: <strong>0</strong></li>
+<li>Range Maximum: <strong>10</strong></li>
+</ul></li>
+<li>When all parameters are set correctly click the next button again.</li>
+<li>Congratulation you created the first pipeline and should now see the line chart</li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/06_example01_live_visualisation.png" alt="Visualize Pipeline">
+    <img src="/docs/img/quickstart/examples/07_example01_first_step.png" alt="Configure Visualization Step 1">
+    <img src="/docs/img/quickstart/examples/08_example01_second_step.png" alt="Configure Visualization Step 2">
+    <img src="/docs/img/quickstart/examples/09_example01_third_step.png" alt="Configure Visualization Step 3">
+    <img src="/docs/img/quickstart/examples/10_example1_finished.png" alt="Pipeline 01 Done">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="condition-monitoring-of-a-water-tank"></a><a href="#condition-monitoring-of-a-water-tank" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 [...]
+<p>In our second example we are going to create a more complex pipeline.
+This pipeline has two sources, the flow rate sensor from the previous example and a source measuring the water level in a tank.
+Our goal is to send a notification when the flow rate stops and the water level in the water tank sinks too fast.
+In this case a service technician should check the system as soon as possible.
+This example should just illustrate how the individual components work.
+Since the system currently uses simulated data each time the situation occurs a notification is triggered.</p>
+<p>Now lets start!</p>
+<h3><a class="anchor" aria-hidden="true" id="build-the-pipeline"></a><a href="#build-the-pipeline" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<ul>
+<li>First we have to select the <strong>FRS1</strong> (Flow Rate Sensor 1) and <strong>WL1</strong> (Water Level) form the sources tab</li>
+<li>In a first step we want to detect when the flow rate stops</li>
+<li>Use the <strong>NF</strong> (Numerical Filter) from the processing elements tab and connect it to the <strong>FRS1</strong> source</li>
+<li>Configure the <strong>Numerical Filter</strong>:
+<ul>
+<li>Field name for filter operator: <strong>mass_flow</strong></li>
+<li>Filter Operation: <strong>&lt;</strong></li>
+<li>Threshold value: <strong>1</strong></li>
+</ul></li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/11_example2_start.png" alt="Start Example 2">
+    <img src="/docs/img/quickstart/examples/12_example2_numerical.png" alt="Select Numericl Filter">
+    <img src="/docs/img/quickstart/examples/13_example2_configure_numerical.png" alt="Configure Numerical Filter">
+</div>
+<ul>
+<li>As a next step we add an aggregation to the water level. This reduces the inaccuracies we have because the water moves in the tank.</li>
+<li>Select the <strong>A</strong> (Aggregation) processing element</li>
+<li>Connect the <strong>WL1</strong> with <strong>A</strong></li>
+<li>Configure <strong>Aggregation</strong>:
+<ul>
+<li>Property Selection: <strong>level</strong></li>
+<li>Operation: <strong>Average</strong></li>
+<li>Time Window Size: <strong>10</strong></li>
+<li>Output Frequency: <strong>1</strong></li>
+<li>Groupe By: <strong>None</strong></li>
+</ul></li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/14_example2_aggregate.png" alt="Select Aggregation">
+    <img src="/docs/img/quickstart/examples/15_example2_configure_aggregate.png" alt="Configure Aggregation">
+</div>
+<ul>
+<li>With the next processing element we check if the water level decreases too fast</li>
+<li>Select <strong>I</strong> (Increase) and connect it to <strong>A</strong></li>
+<li>Configure <strong>Increase</strong>:
+<ul>
+<li>Timestamp field: <strong>timestamp</strong></li>
+<li>Value to observe: <strong>aggregatedValue</strong> (This value is created by previous element)</li>
+<li>Group by: <strong>sensorId</strong></li>
+<li>Increase / Decrease: <strong>Decrease</strong></li>
+<li>Percentage of Increase / Decrease: <strong>20</strong></li>
+<li>Time Window Length: <strong>10</strong></li>
+<li>Select Output: <strong>All</strong></li>
+</ul></li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/16_example2_increase.png" alt="Select Increase">
+    <img src="/docs/img/quickstart/examples/17_example2_configure1_increase.png" alt="Configute 01 Increase">
+    <img src="/docs/img/quickstart/examples/18_example2_configure2_increase.png" alt="Configute 02 Increase">
+</div>
+<ul>
+<li>Now we connect the two stream with the sequence element, which checks if both events occur in a certain time</li>
+<li>Select <strong>S</strong> (Sequence) and connect both data streams to it</li>
+<li>Configure <strong>Sequence</strong>:
+<ul>
+<li>Time Window Size: <strong>1</strong></li>
+<li>Time Unit: <strong>sec</strong></li>
+</ul></li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/19_example2_sequence.png" alt="Select Sequence Detection">
+    <img src="/docs/img/quickstart/examples/20_example2_configure_sequence.png" alt="ConfigureSequence Detection">
+</div>
+<ul>
+<li>Now we create a notification for the service technician that something is wrong with the system</li>
+<li>Select <strong>N</strong> (Notification) from the data sink tab</li>
+<li>Connect <strong>S</strong>  with <strong>N</strong></li>
+<li>Configure <strong>Notification</strong>:
+<ul>
+<li>Notification title: <strong>Alarm</strong></li>
+<li>Content: <strong>One notification was triggered by our first complex pipeline. Yeahhhh!</strong></li>
+</ul></li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/21_example2_notification.png" alt="Select Notification">
+    <img src="/docs/img/quickstart/examples/22_example2_configure_notification.png" alt="Configure Notification">
+</div>
+<ul>
+<li>Add the dashboard sink to the increase element to monitor the preliminary results</li>
+<li>Select <strong>DS</strong> and connect to <strong>I</strong></li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/23_example2_dashboard_sink.png" alt="Select Dashboard">
+</div>
+<ul>
+<li>Save the pipeline</li>
+<li>Save configuration:
+<ul>
+<li>Pipeline Name: <strong>Second Pipeline</strong></li>
+<li>Description: <strong>Complex monitorung rule</strong></li>
+<li>Start pipeline immediately: <strong>CHECK</strong></li>
+</ul></li>
+<li>Click <strong>Save and go to pipeline view</strong></li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/24_example2_save.png" alt="Save Pipeline">
+</div>
+<ul>
+<li>All pipeline elements should be started successfully</li>
+<li>It can be seen that the elements run on different technologies, in flink and a java container
+<ul>
+<li><a href="http://pe-flink-examples:8090">http://pe-flink-examples:8090</a></li>
+<li><a href="http://pe-jvm-examples:8090">http://pe-jvm-examples:8090</a></li>
+</ul></li>
+<li>Go to visualization and create <strong>Raw Data</strong> visualization for the new pipeline</li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/25_example2_started.png" alt="Pipeline Started Sucessfull">
+    <img src="/docs/img/quickstart/examples/26_example2_visualisation.png" alt="Add Visualization">
+</div>
+<ul>
+<li>Every time you can see output in the <strong>Raw Data</strong> visualization of the new pipeline and the <strong>Line Chart</strong> from the first example are zero, a Notification is triggered by the pipeline.</li>
+<li>Go to the <strong>Notifications</strong> view and have a look at the notification</li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/27_example2_notification.png" alt="Show Notification">
+</div>
+<p>Congratulation you finished the quick start!
+It is recommended to stop the last pipeline, because it will keep creating notifications ;)</p>
+<p>We hope we gave you an easy quick start into StreamPipes.
+If you have any questions or suggestions, just send us an email.
+From here on you can explore all features in the <a href="/docs/docs/0.55.2-pre-asf/user-guide-introduction">User Guide</a> or go to the <a href="/docs/docs/0.55.2-pre-asf/dev-guide-introduction">Developer Guide</a> to learn how to write your own StreamPipes processing elements.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/user-guide-introduction"><span class="arrow-prev">← </span><span>Introduction</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/user-guide-installation"><span>Installation</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#setup-streampipes">Setup StreamPipes</a></li><li><a href="#f [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/user-guide-getting-started/index.html b/docs/docs/0.55.2-pre-asf/user-guide-getting-started/index.html
new file mode 100644
index 0000000..0a2e26f
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/user-guide-getting-started/index.html
@@ -0,0 +1,292 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Getting Started · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;This quick start explains how StreamPipes can be set up in the browser.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Getting Started · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;This quick start explains how StreamPipes can be set up in the browser.&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Getting Started</h1></header><article><div><span><p>This quick start explains how StreamPipes can be set up in the browser.
+Before starting with this guide, all steps from the installation guide must be finished successfully and StreamPipes must be up and running.
+Navigate to the StreamPipes graphical user interface in the browser.
+Use the IP or hostname of the server StreamPipes is running on.</p>
+<p>This guide consists of three steps.
+First, StreamPipes is configured, then all pipeline elements are installed.
+In the end of this quick start, you will create your first pipelines.
+Now lets begin with setting up StreamPipes.</p>
+<h2><a class="anchor" aria-hidden="true" id="setup-streampipes"></a><a href="#setup-streampipes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>In the browser you should see the image below.
+To set up the system enter a user email address and a password and click on install.
+Do NOT change the advanced settings, just click on install.
+The installation might take some time, continue by clicking on &quot;Go to login page&quot;, once all components are successfully configured.
+If there is a problem with any of the components, please restart the whole system and delete the &quot;config&quot; directory on the server.
+This directory is in the same folder as the docker-compose.yml file.</p>
+<p>On the login page, enter your credentials, then you should be forwarded to the home page.
+Congratulations! You've just configured your first StreamPipes instance.
+The system configured all components by itself and the individual StreamPipes services are now ready.</p>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/setup/01_register_user.png" alt="Set Up User">
+    <img src="/docs/img/quickstart/setup/02_user_set_up.png" alt="SetUp StreamPipes Components">
+    <img src="/docs/img/quickstart/setup/03_login.png" alt="Go to login page">
+    <img src="/docs/img/quickstart/setup/04_home.png" alt="Home page">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="first-examples"></a><a href="#first-examples" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>In this tutorial, you will create two simple pipelines that demonstrate the basic functionality of StreamPipes.
+The first example deals with monitoring a flow rate sensor.
+This pipeline ensures that everything works properly and data is sent through the whole system.
+In the second example we model a more complex situation detection pipeline that triggers a notification.
+Let's start with our first pipeline.
+If you have problems with any of the examples, please send us an email.
+We are happy to help you.</p>
+<h2><a class="anchor" aria-hidden="true" id="data-simulation"></a><a href="#data-simulation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>All the data sources that we have integrated in the StreamPipes demonstrator are simulated according to real world sensors.
+For example a flow rate sensor in a water pipe, which measures how much water flows in that pipe or a water level sensor in a water tank, that reports how high the water level is in the tank.
+In the next section you will use the flow rate sensor to build your first pipeline.</p>
+<h2><a class="anchor" aria-hidden="true" id="flow-rate-visualization"></a><a href="#flow-rate-visualization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>In the first example, we create a live line chart to monitor the value of the mass flow from a flow rate sensor.</p>
+<h3><a class="anchor" aria-hidden="true" id="create-pipeline"></a><a href="#create-pipeline" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<ul>
+<li>As a first step go to the pipeline editor</li>
+<li>Select the <strong>FRS1</strong> (Flow Rate Source 1)source</li>
+<li>Then navigate to the <strong>Data Sink</strong> tab</li>
+<li>Select the <strong>DS</strong> (Dashboard Sink) and connect the source with the sink</li>
+<li>After connecting the elements save the pipeline by clicking on the save button on the top left corner</li>
+<li>In the save menu add a name <em>Flow Rate Monitoring</em> and a description <em>This is my very first pipeline!</em></li>
+<li>Also select the <strong>Start pipeline immediatly</strong> checkbox</li>
+<li>Then click the button <strong>Save and go to pipeline view</strong></li>
+<li>You are navigated to the pipeline view and a confirmation that the pipeline was started successfully should be shown</li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/01_example1_empty.png" alt="Show Pipeline Editor Sources">
+    <img src="/docs/img/quickstart/examples/02_example1_source.png" alt="Sources">
+    <img src="/docs/img/quickstart/examples/03_example1_pipeline_finished.png" alt="Pipeline Finished">
+    <img src="/docs/img/quickstart/examples/04_example1_save.png" alt="Saved Pipeline">
+    <img src="/docs/img/quickstart/examples/05_example1_pipeline_started.png" alt="Pipeline 01 Started">
+</div>
+<h3><a class="anchor" aria-hidden="true" id="create-visualization"></a><a href="#create-visualization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<ul>
+<li>After we have created the pipeline we must create the line chart</li>
+<li>Navigate to the <strong>Live Dashboard</strong> of StreamPipes</li>
+<li>Click on the <strong>Add visualization</strong> button</li>
+<li>Select the just created pipeline <strong>Flow Rate Monitoring</strong> and click the <strong>next</strong> button</li>
+<li>For the visualization select the <strong>Line Chart</strong> and click <strong>next</strong> again</li>
+<li>Now you have to enter the configuration for the line chart
+<ul>
+<li>Select time mapping: <strong>timestamp</strong></li>
+<li>Select number mapping: <strong>mass_flow</strong></li>
+<li>Range Minimum: <strong>0</strong></li>
+<li>Range Maximum: <strong>10</strong></li>
+</ul></li>
+<li>When all parameters are set correctly click the next button again.</li>
+<li>Congratulation you created the first pipeline and should now see the line chart</li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/06_example01_live_visualisation.png" alt="Visualize Pipeline">
+    <img src="/docs/img/quickstart/examples/07_example01_first_step.png" alt="Configure Visualization Step 1">
+    <img src="/docs/img/quickstart/examples/08_example01_second_step.png" alt="Configure Visualization Step 2">
+    <img src="/docs/img/quickstart/examples/09_example01_third_step.png" alt="Configure Visualization Step 3">
+    <img src="/docs/img/quickstart/examples/10_example1_finished.png" alt="Pipeline 01 Done">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="condition-monitoring-of-a-water-tank"></a><a href="#condition-monitoring-of-a-water-tank" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 [...]
+<p>In our second example we are going to create a more complex pipeline.
+This pipeline has two sources, the flow rate sensor from the previous example and a source measuring the water level in a tank.
+Our goal is to send a notification when the flow rate stops and the water level in the water tank sinks too fast.
+In this case a service technician should check the system as soon as possible.
+This example should just illustrate how the individual components work.
+Since the system currently uses simulated data each time the situation occurs a notification is triggered.</p>
+<p>Now lets start!</p>
+<h3><a class="anchor" aria-hidden="true" id="build-the-pipeline"></a><a href="#build-the-pipeline" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<ul>
+<li>First we have to select the <strong>FRS1</strong> (Flow Rate Sensor 1) and <strong>WL1</strong> (Water Level) form the sources tab</li>
+<li>In a first step we want to detect when the flow rate stops</li>
+<li>Use the <strong>NF</strong> (Numerical Filter) from the processing elements tab and connect it to the <strong>FRS1</strong> source</li>
+<li>Configure the <strong>Numerical Filter</strong>:
+<ul>
+<li>Field name for filter operator: <strong>mass_flow</strong></li>
+<li>Filter Operation: <strong>&lt;</strong></li>
+<li>Threshold value: <strong>1</strong></li>
+</ul></li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/11_example2_start.png" alt="Start Example 2">
+    <img src="/docs/img/quickstart/examples/12_example2_numerical.png" alt="Select Numericl Filter">
+    <img src="/docs/img/quickstart/examples/13_example2_configure_numerical.png" alt="Configure Numerical Filter">
+</div>
+<ul>
+<li>As a next step we add an aggregation to the water level. This reduces the inaccuracies we have because the water moves in the tank.</li>
+<li>Select the <strong>A</strong> (Aggregation) processing element</li>
+<li>Connect the <strong>WL1</strong> with <strong>A</strong></li>
+<li>Configure <strong>Aggregation</strong>:
+<ul>
+<li>Property Selection: <strong>level</strong></li>
+<li>Operation: <strong>Average</strong></li>
+<li>Time Window Size: <strong>10</strong></li>
+<li>Output Frequency: <strong>1</strong></li>
+<li>Groupe By: <strong>None</strong></li>
+</ul></li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/14_example2_aggregate.png" alt="Select Aggregation">
+    <img src="/docs/img/quickstart/examples/15_example2_configure_aggregate.png" alt="Configure Aggregation">
+</div>
+<ul>
+<li>With the next processing element we check if the water level decreases too fast</li>
+<li>Select <strong>I</strong> (Increase) and connect it to <strong>A</strong></li>
+<li>Configure <strong>Increase</strong>:
+<ul>
+<li>Timestamp field: <strong>timestamp</strong></li>
+<li>Value to observe: <strong>aggregatedValue</strong> (This value is created by previous element)</li>
+<li>Group by: <strong>sensorId</strong></li>
+<li>Increase / Decrease: <strong>Decrease</strong></li>
+<li>Percentage of Increase / Decrease: <strong>20</strong></li>
+<li>Time Window Length: <strong>10</strong></li>
+<li>Select Output: <strong>All</strong></li>
+</ul></li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/16_example2_increase.png" alt="Select Increase">
+    <img src="/docs/img/quickstart/examples/17_example2_configure1_increase.png" alt="Configute 01 Increase">
+    <img src="/docs/img/quickstart/examples/18_example2_configure2_increase.png" alt="Configute 02 Increase">
+</div>
+<ul>
+<li>Now we connect the two stream with the sequence element, which checks if both events occur in a certain time</li>
+<li>Select <strong>S</strong> (Sequence) and connect both data streams to it</li>
+<li>Configure <strong>Sequence</strong>:
+<ul>
+<li>Time Window Size: <strong>1</strong></li>
+<li>Time Unit: <strong>sec</strong></li>
+</ul></li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/19_example2_sequence.png" alt="Select Sequence Detection">
+    <img src="/docs/img/quickstart/examples/20_example2_configure_sequence.png" alt="ConfigureSequence Detection">
+</div>
+<ul>
+<li>Now we create a notification for the service technician that something is wrong with the system</li>
+<li>Select <strong>N</strong> (Notification) from the data sink tab</li>
+<li>Connect <strong>S</strong>  with <strong>N</strong></li>
+<li>Configure <strong>Notification</strong>:
+<ul>
+<li>Notification title: <strong>Alarm</strong></li>
+<li>Content: <strong>One notification was triggered by our first complex pipeline. Yeahhhh!</strong></li>
+</ul></li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/21_example2_notification.png" alt="Select Notification">
+    <img src="/docs/img/quickstart/examples/22_example2_configure_notification.png" alt="Configure Notification">
+</div>
+<ul>
+<li>Add the dashboard sink to the increase element to monitor the preliminary results</li>
+<li>Select <strong>DS</strong> and connect to <strong>I</strong></li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/23_example2_dashboard_sink.png" alt="Select Dashboard">
+</div>
+<ul>
+<li>Save the pipeline</li>
+<li>Save configuration:
+<ul>
+<li>Pipeline Name: <strong>Second Pipeline</strong></li>
+<li>Description: <strong>Complex monitorung rule</strong></li>
+<li>Start pipeline immediately: <strong>CHECK</strong></li>
+</ul></li>
+<li>Click <strong>Save and go to pipeline view</strong></li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/24_example2_save.png" alt="Save Pipeline">
+</div>
+<ul>
+<li>All pipeline elements should be started successfully</li>
+<li>It can be seen that the elements run on different technologies, in flink and a java container
+<ul>
+<li><a href="http://pe-flink-examples:8090">http://pe-flink-examples:8090</a></li>
+<li><a href="http://pe-jvm-examples:8090">http://pe-jvm-examples:8090</a></li>
+</ul></li>
+<li>Go to visualization and create <strong>Raw Data</strong> visualization for the new pipeline</li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/25_example2_started.png" alt="Pipeline Started Sucessfull">
+    <img src="/docs/img/quickstart/examples/26_example2_visualisation.png" alt="Add Visualization">
+</div>
+<ul>
+<li>Every time you can see output in the <strong>Raw Data</strong> visualization of the new pipeline and the <strong>Line Chart</strong> from the first example are zero, a Notification is triggered by the pipeline.</li>
+<li>Go to the <strong>Notifications</strong> view and have a look at the notification</li>
+</ul>
+<div class="my-carousel">
+    <img src="/docs/img/quickstart/examples/27_example2_notification.png" alt="Show Notification">
+</div>
+<p>Congratulation you finished the quick start!
+It is recommended to stop the last pipeline, because it will keep creating notifications ;)</p>
+<p>We hope we gave you an easy quick start into StreamPipes.
+If you have any questions or suggestions, just send us an email.
+From here on you can explore all features in the <a href="/docs/docs/0.55.2-pre-asf/user-guide-introduction">User Guide</a> or go to the <a href="/docs/docs/0.55.2-pre-asf/dev-guide-introduction">Developer Guide</a> to learn how to write your own StreamPipes processing elements.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/user-guide-introduction"><span class="arrow-prev">← </span><span>Introduction</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/user-guide-installation"><span>Installation</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#setup-streampipes">Setup StreamPipes</a></li><li><a href="#f [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/user-guide-installation.html b/docs/docs/0.55.2-pre-asf/user-guide-installation.html
new file mode 100644
index 0000000..d888ffc
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/user-guide-installation.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Installation · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;div class=&quot;admonition error&quot;&gt;"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Installation · Stre [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Installation</h1></header><article><div><span><div class="admonition error">
+<div class="admonition-title">StreamPipes desktop version</div>
+<p>StreamPipes usually runs on a big data infrastructure. We did our best that you can install it yourself with less powerful hardware, even on your laptop.<br/>
+    If you have any problems or are interested in a production system please <a href="mailto:feedback@streampipes.org">contact us</a>!</p>
+</div>
+<h2><a class="anchor" aria-hidden="true" id="prerequisites"></a><a href="#prerequisites" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>StreamPipes is a modern web application, therefore you need Chrome (recommended) or Firefox to test it.</p>
+<h3><a class="anchor" aria-hidden="true" id="supported-operating-systems"></a><a href="#supported-operating-systems" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>We rely on Docker and support three operating systems for the StreamPipes system</p>
+<ul>
+<li>Linux</li>
+<li>OSX</li>
+<li>Windows 10
+<ul>
+<li>Please note that older Windows versions are not compatible with Docker. Also Linux VMs under Windows might not work, due to network problems with docker.</li>
+</ul></li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="installation"></a><a href="#installation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>You need to have Docker installed on your system before you continue with the installation guide.</p>
+<div class="admonition info">
+<div class="admonition-title">Install Docker</div>
+<p>Go to https://docs.docker.com/installation/ and follow the instructions to install Docker for your OS. Make sure docker can be started as a non-root user (described in the installation manual, don’t forget to log out and in again) and check that Docker is installed correctly by executing docker-run hello-world</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Configure Docker</div>
+<p>By default, Docker uses only a limited number of CPU cores and memory.
+       If you run StreamPipes on Windows or on a Mac you need to adjust the default settings.
+       To do that, click on the Docker icon in your tab bar and open the preferences.
+       Go to the advanced preferences and set the **number of CPUs to 6** (recommended) and the **Memory to 8GB**.
+       After changing the settings, Docker needs to be restarted.</p></div>
+<div class="admonition warn">
+<div class="admonition-title">Server Recommendations</div>
+<p>
+<li>Unix based OS is recommended (also works with Windows)</li>
+    <li>min. 12 GB RAM (16 recommended)</li>
+    <li>Docker (latest version, see instructions above)</li>
+    <li>Docker Compose (latest version., see instructions above)</li>
+</p>
+</div>
+<h2><a class="anchor" aria-hidden="true" id="install-streampipes"></a><a href="#install-streampipes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p>We provide a script to install, stop, and start StreamPipes.</p>
+<p>The installer is available in two different versions, one to run StreamPipes on your laptop and another big data version which is intended to be run on a more powerful computer or server.
+In the desktop version, only a limited amount of processors is available to ensure that the system also runs with less memory.</p>
+<div class="admonition info">
+<div class="admonition-title">Installation might take some minutes</div>
+<p> StreamPipes is a modular, easily extensible system consisting of several micro services.
+       The installer automatically downloads all required services. Depending on your internet connection, the first installation may take some while.</p></div>
+<p><a href="https://github.com/streampipes/streampipes-installer" target="_blank">Download Installer on GitHub</a></p>
+<p>After installing it, open your browser and navigate to <code>localhost</code>.</p>
+<p>Now you can continue with the tutorial on page <a href="user-guide-getting-started.md">Getting Started</a>.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/user-guide-getting-started"><span class="arrow-prev">← </span><span>Previous</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/user-guide-tour"><span>Tour</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#prerequisites">Prerequisites</a><ul class="toc-headings"><li><a href="#suppor [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/user-guide-installation/index.html b/docs/docs/0.55.2-pre-asf/user-guide-installation/index.html
new file mode 100644
index 0000000..d888ffc
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/user-guide-installation/index.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Installation · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;div class=&quot;admonition error&quot;&gt;"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Installation · Stre [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Installation</h1></header><article><div><span><div class="admonition error">
+<div class="admonition-title">StreamPipes desktop version</div>
+<p>StreamPipes usually runs on a big data infrastructure. We did our best that you can install it yourself with less powerful hardware, even on your laptop.<br/>
+    If you have any problems or are interested in a production system please <a href="mailto:feedback@streampipes.org">contact us</a>!</p>
+</div>
+<h2><a class="anchor" aria-hidden="true" id="prerequisites"></a><a href="#prerequisites" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>StreamPipes is a modern web application, therefore you need Chrome (recommended) or Firefox to test it.</p>
+<h3><a class="anchor" aria-hidden="true" id="supported-operating-systems"></a><a href="#supported-operating-systems" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>We rely on Docker and support three operating systems for the StreamPipes system</p>
+<ul>
+<li>Linux</li>
+<li>OSX</li>
+<li>Windows 10
+<ul>
+<li>Please note that older Windows versions are not compatible with Docker. Also Linux VMs under Windows might not work, due to network problems with docker.</li>
+</ul></li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="installation"></a><a href="#installation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>You need to have Docker installed on your system before you continue with the installation guide.</p>
+<div class="admonition info">
+<div class="admonition-title">Install Docker</div>
+<p>Go to https://docs.docker.com/installation/ and follow the instructions to install Docker for your OS. Make sure docker can be started as a non-root user (described in the installation manual, don’t forget to log out and in again) and check that Docker is installed correctly by executing docker-run hello-world</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Configure Docker</div>
+<p>By default, Docker uses only a limited number of CPU cores and memory.
+       If you run StreamPipes on Windows or on a Mac you need to adjust the default settings.
+       To do that, click on the Docker icon in your tab bar and open the preferences.
+       Go to the advanced preferences and set the **number of CPUs to 6** (recommended) and the **Memory to 8GB**.
+       After changing the settings, Docker needs to be restarted.</p></div>
+<div class="admonition warn">
+<div class="admonition-title">Server Recommendations</div>
+<p>
+<li>Unix based OS is recommended (also works with Windows)</li>
+    <li>min. 12 GB RAM (16 recommended)</li>
+    <li>Docker (latest version, see instructions above)</li>
+    <li>Docker Compose (latest version., see instructions above)</li>
+</p>
+</div>
+<h2><a class="anchor" aria-hidden="true" id="install-streampipes"></a><a href="#install-streampipes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p>We provide a script to install, stop, and start StreamPipes.</p>
+<p>The installer is available in two different versions, one to run StreamPipes on your laptop and another big data version which is intended to be run on a more powerful computer or server.
+In the desktop version, only a limited amount of processors is available to ensure that the system also runs with less memory.</p>
+<div class="admonition info">
+<div class="admonition-title">Installation might take some minutes</div>
+<p> StreamPipes is a modular, easily extensible system consisting of several micro services.
+       The installer automatically downloads all required services. Depending on your internet connection, the first installation may take some while.</p></div>
+<p><a href="https://github.com/streampipes/streampipes-installer" target="_blank">Download Installer on GitHub</a></p>
+<p>After installing it, open your browser and navigate to <code>localhost</code>.</p>
+<p>Now you can continue with the tutorial on page <a href="user-guide-getting-started.md">Getting Started</a>.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/user-guide-getting-started"><span class="arrow-prev">← </span><span>Previous</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/user-guide-tour"><span>Tour</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#prerequisites">Prerequisites</a><ul class="toc-headings"><li><a href="#suppor [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/user-guide-introduction.html b/docs/docs/0.55.2-pre-asf/user-guide-introduction.html
new file mode 100644
index 0000000..66ebfd0
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/user-guide-introduction.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Introduction · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;StreamPipes is a framework that enables users to work with data streams.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Introduction · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;StreamPipes is a framework that enables users to work with data streams.&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Introduction</h1></header><article><div><span><p>StreamPipes is a framework that enables users to work with data streams.
+It uses a lot of different technologies especially form the fields of big data, distributed computing and semantic web.
+One of the core concepts of StreamPipes is to add a higher semantic layer on top of big data processing technologies to ease their usage.
+StreamPipes is not just a UI, it is a framework with a lot of different capabilities, like modelling new data processing pipelines, execute them in a distributed environment.
+On top it uses semantics to provide guidance to non-technical people for better analyzing their data streams in a self-service manner.</p>
+<h2><a class="anchor" aria-hidden="true" id="pipelines"></a><a href="#pipelines" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>The core concept of StreamPipes are data processing pipelines.
+Those pipelines use data from different sources (Data Streams), then transform it via Processing Elements and store them in an database or send it to third party systems (Data Sinks).
+A brief introduction is given in the following sections.
+At the next page a detailed tour through StreamPies explains all the different features that are available.</p>
+<h2><a class="anchor" aria-hidden="true" id="data-streams"></a><a href="#data-streams" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>Data Streams represent the primary source for data in StreamPipes.
+A stream is an ordered sequence of events, where an event is described as one or more observation values.
+Those events can come from different sources like sensors, machines, log files or many more.
+It does not matter what kind of serialization format the events have or which kind of transportation protocol the individual data streams use.
+As long as a semantic description is provided StreamPipes is capable of processing the data.</p>
+<h2><a class="anchor" aria-hidden="true" id="processing-elements"></a><a href="#processing-elements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p>Processing Elements are defined as an processor that transforms one or more input event streams to an output event stream.
+Those transformations can be rather simple like filtering out events based on a predefined rule or more complex by applying algorithms on the data.<br>
+Processing elements define stream requirements that are a set of minimum properties an incoming event stream must provide.
+Furthermore, Processing Elements describe their output based on a set of output strategies.
+They also describe further (human) input in form of configuration parameters.
+The Processing Elements can be implemented in multiple technologies.
+This information is not necessary when constructing a pipeline, the user does not need to know where and how the actual algorithm is deployed and executed.
+During the modelling phase it is possible to set configuration parameters, wich are then injected into the program when it is started.
+A description is provided for all parameters and it is ensured by the system that the user can just enter semantically correct values.</p>
+<h2><a class="anchor" aria-hidden="true" id="data-sinks"></a><a href="#data-sinks" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>Data Sinks consume event streams similar to processing elements with the difference that sinks do not provide an output stream, i.e., they are defined as sinks that perform some action or trigger a visualization as a result of a stream transformation.
+The sinks also define stream requirements that must be fulfilled.
+In a pipeline it is not necessary to use a processing element to transform data.
+Often it can make sense to just use a data sink and connect it directly to the sensor to store the raw data into a data store for offline analysis.
+This is very simple with StreamPipes and no additional code must be written to create such a data lake.</p>
+<h2><a class="anchor" aria-hidden="true" id="target-audience"></a><a href="#target-audience" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>StreamPipes focuses on multiple target groups.
+This guide is for users who interact with the graphical user interface in the browser.
+If you are interested in the technical details or plan to extend the system with new algorithms, please read the Developer Guide.
+The graphical user interface is designed for domain experts who want to analyze data, but are not interested in technical details and do not want to write code.
+The SDK can be used by software developers to extend the framework with new functionality.
+After importing newly developed pipeline elements, they are available to all users of StreamPipes.</p>
+<h2><a class="anchor" aria-hidden="true" id="next-steps"></a><a href="#next-steps" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>To test StreamPipes on your local environment go to the <a href="/docs/docs/0.55.2-pre-asf/user-guide-installation">installation guide</a>.
+If you are further interested in the concepts of StreamPipes continue with the <a href="/docs/docs/0.55.2-pre-asf/user-guide-tour">tour</a>.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/user-guide-getting-started"><span>Next</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#pipelines">Pipelines</a></li><li><a href="#data-streams">Data Streams</a></li><li><a href="#processing-elements">Processing Elements</a></li><li><a href="#data-sinks">Data Sinks</a></li><li><a href="#target-audien [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/user-guide-introduction/index.html b/docs/docs/0.55.2-pre-asf/user-guide-introduction/index.html
new file mode 100644
index 0000000..66ebfd0
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/user-guide-introduction/index.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Introduction · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;StreamPipes is a framework that enables users to work with data streams.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Introduction · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;StreamPipes is a framework that enables users to work with data streams.&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Introduction</h1></header><article><div><span><p>StreamPipes is a framework that enables users to work with data streams.
+It uses a lot of different technologies especially form the fields of big data, distributed computing and semantic web.
+One of the core concepts of StreamPipes is to add a higher semantic layer on top of big data processing technologies to ease their usage.
+StreamPipes is not just a UI, it is a framework with a lot of different capabilities, like modelling new data processing pipelines, execute them in a distributed environment.
+On top it uses semantics to provide guidance to non-technical people for better analyzing their data streams in a self-service manner.</p>
+<h2><a class="anchor" aria-hidden="true" id="pipelines"></a><a href="#pipelines" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>The core concept of StreamPipes are data processing pipelines.
+Those pipelines use data from different sources (Data Streams), then transform it via Processing Elements and store them in an database or send it to third party systems (Data Sinks).
+A brief introduction is given in the following sections.
+At the next page a detailed tour through StreamPies explains all the different features that are available.</p>
+<h2><a class="anchor" aria-hidden="true" id="data-streams"></a><a href="#data-streams" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>Data Streams represent the primary source for data in StreamPipes.
+A stream is an ordered sequence of events, where an event is described as one or more observation values.
+Those events can come from different sources like sensors, machines, log files or many more.
+It does not matter what kind of serialization format the events have or which kind of transportation protocol the individual data streams use.
+As long as a semantic description is provided StreamPipes is capable of processing the data.</p>
+<h2><a class="anchor" aria-hidden="true" id="processing-elements"></a><a href="#processing-elements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p>Processing Elements are defined as an processor that transforms one or more input event streams to an output event stream.
+Those transformations can be rather simple like filtering out events based on a predefined rule or more complex by applying algorithms on the data.<br>
+Processing elements define stream requirements that are a set of minimum properties an incoming event stream must provide.
+Furthermore, Processing Elements describe their output based on a set of output strategies.
+They also describe further (human) input in form of configuration parameters.
+The Processing Elements can be implemented in multiple technologies.
+This information is not necessary when constructing a pipeline, the user does not need to know where and how the actual algorithm is deployed and executed.
+During the modelling phase it is possible to set configuration parameters, wich are then injected into the program when it is started.
+A description is provided for all parameters and it is ensured by the system that the user can just enter semantically correct values.</p>
+<h2><a class="anchor" aria-hidden="true" id="data-sinks"></a><a href="#data-sinks" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>Data Sinks consume event streams similar to processing elements with the difference that sinks do not provide an output stream, i.e., they are defined as sinks that perform some action or trigger a visualization as a result of a stream transformation.
+The sinks also define stream requirements that must be fulfilled.
+In a pipeline it is not necessary to use a processing element to transform data.
+Often it can make sense to just use a data sink and connect it directly to the sensor to store the raw data into a data store for offline analysis.
+This is very simple with StreamPipes and no additional code must be written to create such a data lake.</p>
+<h2><a class="anchor" aria-hidden="true" id="target-audience"></a><a href="#target-audience" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>StreamPipes focuses on multiple target groups.
+This guide is for users who interact with the graphical user interface in the browser.
+If you are interested in the technical details or plan to extend the system with new algorithms, please read the Developer Guide.
+The graphical user interface is designed for domain experts who want to analyze data, but are not interested in technical details and do not want to write code.
+The SDK can be used by software developers to extend the framework with new functionality.
+After importing newly developed pipeline elements, they are available to all users of StreamPipes.</p>
+<h2><a class="anchor" aria-hidden="true" id="next-steps"></a><a href="#next-steps" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>To test StreamPipes on your local environment go to the <a href="/docs/docs/0.55.2-pre-asf/user-guide-installation">installation guide</a>.
+If you are further interested in the concepts of StreamPipes continue with the <a href="/docs/docs/0.55.2-pre-asf/user-guide-tour">tour</a>.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/user-guide-getting-started"><span>Next</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#pipelines">Pipelines</a></li><li><a href="#data-streams">Data Streams</a></li><li><a href="#processing-elements">Processing Elements</a></li><li><a href="#data-sinks">Data Sinks</a></li><li><a href="#target-audien [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/user-guide-processing-elements.html b/docs/docs/0.55.2-pre-asf/user-guide-processing-elements.html
new file mode 100644
index 0000000..ebe8f7c
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/user-guide-processing-elements.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Processing Elements · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;This page explains all the Procesing Elements that are available in the StreamPipes Starter Kit.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Processing Elements · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;This page explains all the Procesing Elements that are available in the StreamPipes Starter Kit.&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Processing Elements</h1></header><article><div><span><p>This page explains all the Procesing Elements that are available in the StreamPipes Starter Kit.
+New Processing Elements can also be included during runtime.
+The once presented on this page come with StreamPipes and cen be used immediately.
+The next section &quot;Developer Guide&quot; explains how new Processing Elements can be implemented and integrated into StreamPipes.</p>
+<h2><a class="anchor" aria-hidden="true" id="data-streams"></a><a href="#data-streams" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p><details class="info">
+<summary>Water Level</summary></p>
+<pre><code class="hljs">    Example Event
+      {
+            &quot;underflow&quot;: false,
+            &quot;overflow&quot;: false,
+            &quot;level&quot;: 74.2184,
+            &quot;timestamp&quot;: 1515450274503,
+            &quot;sensorId&quot;: &quot;level01&quot;
+        }
+</code></pre>
+<p></details></p>
+<p><details class="info">
+<summary>Flow Rate</summary></p>
+<pre><code class="hljs">    Example Event:
+        {
+            &quot;mass_flow&quot;:5.344,
+            &quot;temperature&quot;:45.8665,
+            &quot;timestamp&quot;:1515450053387,
+            &quot;sensorId&quot;:&quot;flowrate01&quot;
+        }
+</code></pre>
+<p></details></p>
+<p><details class="info">
+<summary>Pressure Tank</summary></p>
+<pre><code class="hljs">Example Event:
+    {
+        &quot;pressure&quot;: 57.1648,
+        &quot;timestamp&quot;: 1515450424800,
+        &quot;sensorId&quot;: &quot;pressure01&quot;
+    }
+</code></pre>
+<p></details></p>
+<p><details class="info">
+<summary>Vehicle Position</summary>
+Example Event:
+{
+&quot;latitude&quot;: 40.7551,
+&quot;plateNumber&quot;: &quot;level02&quot;,
+&quot;timestamp&quot;: 1515450606449,
+&quot;longitude&quot;: -73.953
+}
+</details></p>
+<h2><a class="anchor" aria-hidden="true" id="processing-elements"></a><a href="#processing-elements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<div class="admonition info">
+<div class="admonition-title">Numerical Filter</div>
+<p>Filters numerical values based on a given threshold</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Projection</div>
+<p>Outputs a subset of an incoming event, e.g., if the input event contains both temperature and machineId, only the temperature can be send to the next component</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Text Filter</div>
+<p>Filters text-based fields based on a filter condition</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Aggregation</div>
+<p> Can be used to aggregate measurements, e.g., to calculate the average temperature during the last 10 minutes</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Peak Detection</div>
+<p>This component detects peaks in time series data</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Timestamp Enrichment</div>
+<p>Appends the current time to any incoming event</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Increase</div>
+<p>Detects the increase of a value over time, e.g., a 10-percent-increase of the temperature within 5 minutes</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Co-Occurrence</div>
+<p>Can be used to detect the co-occurrence of two events, e.g., a high temperature occurs together with high dust particle level within 10 minutes
+</p>
+</div>
+<h2><a class="anchor" aria-hidden="true" id="data-sinks"></a><a href="#data-sinks" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<div class="admonition info">
+<div class="admonition-title">Notification</div>
+<p>Creates a notification in the ProaSense UI.</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Dashboard</div>
+<p>Forwards events to the visualization component</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">CouchDB</div>
+<p>Stores data in a CouchDB database</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Kafka Publisher</div>
+<p>Forwards data to a Kafka cluster</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Elasticsearch</div>
+<p>Stores data in an Elasticsearch cluster</p>
+</div>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/user-guide-tour"><span class="arrow-prev">← </span><span>Tour</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/user-guide-software-components"><span>Software Components</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#data-streams">Data Streams</a></li><li><a href="#processing-el [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/user-guide-processing-elements/index.html b/docs/docs/0.55.2-pre-asf/user-guide-processing-elements/index.html
new file mode 100644
index 0000000..ebe8f7c
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/user-guide-processing-elements/index.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Processing Elements · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;This page explains all the Procesing Elements that are available in the StreamPipes Starter Kit.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Processing Elements · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;This page explains all the Procesing Elements that are available in the StreamPipes Starter Kit.&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Processing Elements</h1></header><article><div><span><p>This page explains all the Procesing Elements that are available in the StreamPipes Starter Kit.
+New Processing Elements can also be included during runtime.
+The once presented on this page come with StreamPipes and cen be used immediately.
+The next section &quot;Developer Guide&quot; explains how new Processing Elements can be implemented and integrated into StreamPipes.</p>
+<h2><a class="anchor" aria-hidden="true" id="data-streams"></a><a href="#data-streams" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p><details class="info">
+<summary>Water Level</summary></p>
+<pre><code class="hljs">    Example Event
+      {
+            &quot;underflow&quot;: false,
+            &quot;overflow&quot;: false,
+            &quot;level&quot;: 74.2184,
+            &quot;timestamp&quot;: 1515450274503,
+            &quot;sensorId&quot;: &quot;level01&quot;
+        }
+</code></pre>
+<p></details></p>
+<p><details class="info">
+<summary>Flow Rate</summary></p>
+<pre><code class="hljs">    Example Event:
+        {
+            &quot;mass_flow&quot;:5.344,
+            &quot;temperature&quot;:45.8665,
+            &quot;timestamp&quot;:1515450053387,
+            &quot;sensorId&quot;:&quot;flowrate01&quot;
+        }
+</code></pre>
+<p></details></p>
+<p><details class="info">
+<summary>Pressure Tank</summary></p>
+<pre><code class="hljs">Example Event:
+    {
+        &quot;pressure&quot;: 57.1648,
+        &quot;timestamp&quot;: 1515450424800,
+        &quot;sensorId&quot;: &quot;pressure01&quot;
+    }
+</code></pre>
+<p></details></p>
+<p><details class="info">
+<summary>Vehicle Position</summary>
+Example Event:
+{
+&quot;latitude&quot;: 40.7551,
+&quot;plateNumber&quot;: &quot;level02&quot;,
+&quot;timestamp&quot;: 1515450606449,
+&quot;longitude&quot;: -73.953
+}
+</details></p>
+<h2><a class="anchor" aria-hidden="true" id="processing-elements"></a><a href="#processing-elements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<div class="admonition info">
+<div class="admonition-title">Numerical Filter</div>
+<p>Filters numerical values based on a given threshold</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Projection</div>
+<p>Outputs a subset of an incoming event, e.g., if the input event contains both temperature and machineId, only the temperature can be send to the next component</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Text Filter</div>
+<p>Filters text-based fields based on a filter condition</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Aggregation</div>
+<p> Can be used to aggregate measurements, e.g., to calculate the average temperature during the last 10 minutes</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Peak Detection</div>
+<p>This component detects peaks in time series data</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Timestamp Enrichment</div>
+<p>Appends the current time to any incoming event</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Increase</div>
+<p>Detects the increase of a value over time, e.g., a 10-percent-increase of the temperature within 5 minutes</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Co-Occurrence</div>
+<p>Can be used to detect the co-occurrence of two events, e.g., a high temperature occurs together with high dust particle level within 10 minutes
+</p>
+</div>
+<h2><a class="anchor" aria-hidden="true" id="data-sinks"></a><a href="#data-sinks" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<div class="admonition info">
+<div class="admonition-title">Notification</div>
+<p>Creates a notification in the ProaSense UI.</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Dashboard</div>
+<p>Forwards events to the visualization component</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">CouchDB</div>
+<p>Stores data in a CouchDB database</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Kafka Publisher</div>
+<p>Forwards data to a Kafka cluster</p>
+</div>
+<div class="admonition info">
+<div class="admonition-title">Elasticsearch</div>
+<p>Stores data in an Elasticsearch cluster</p>
+</div>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/user-guide-tour"><span class="arrow-prev">← </span><span>Tour</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/user-guide-software-components"><span>Software Components</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#data-streams">Data Streams</a></li><li><a href="#processing-el [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/user-guide-software-components.html b/docs/docs/0.55.2-pre-asf/user-guide-software-components.html
new file mode 100644
index 0000000..d53814d
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/user-guide-software-components.html
@@ -0,0 +1,352 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Software Components · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;This page contains all the software components that can be used within the StreamPipes framework.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Software Components · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;This page contains all the software components that can be used within the StreamPipes framework.&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Software Components</h1></header><article><div><span><p>This page contains all the software components that can be used within the StreamPipes framework.
+Some of them are mandatory but others are just necessary for a special capabilities.
+In the <a href="/docs/docs/0.55.2-pre-asf/user-guide-installation">Installation Guide</a> we  already provide a docker-compose.yml file with all the necessary components
+for a minimal setup.
+Extend this configuration files with further containers described on this page and configure StreamPipes
+according to your needs.</p>
+<h2><a class="anchor" aria-hidden="true" id="streampipes-framework"></a><a href="#streampipes-framework" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
+<p><details class="tip">
+<summary>StreamPipes Backend</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description"></a><a href="#description" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
+<p>The StreamPipes Backend is the main component of the StreamPipes Framework. It contains the application logic to create and execute pipelines.
+Furthermore, it provides a REST-API that is used by other components for communication.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose"></a><a href="#docker-compose" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">backend:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">streampipes/backend</span>
+  <span class="hljs-attr">depends_on:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"consul"</span>
+  <span class="hljs-attr">ports:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"8030:8030"</span>
+  <span class="hljs-attr">volumes:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">./config:/root/.streampipes</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">./config/aduna:/root/.aduna</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>StreamPipes UI</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-1"></a><a href="#description-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>This service uses nginx and contains the UI of StreamPipes.
+The UI can, for example, be used to import new pipeline elements, create new pipelines and manage the pipeline
+execution. The UI communicates with the backend via the REST interface.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-1"></a><a href="#docker-compose-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">nginx:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">streampipes/ui</span>
+  <span class="hljs-attr">ports:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"80:80"</span>
+  <span class="hljs-attr">depends_on:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">backend</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<h2><a class="anchor" aria-hidden="true" id="streampipes-services"></a><a href="#streampipes-services" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<p><details class="tip">
+<summary>Consul</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-2"></a><a href="#description-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>Consul is used to store configuration parameters of the backend service and processing elements.
+It is further used for service discovery. Once a processing element container is started in the network, it is
+automatically discovered via the service discovery feature of Consul.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-2"></a><a href="#docker-compose-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">consul:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">consul</span>
+    <span class="hljs-attr">environment:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_LOCAL_CONFIG={\"disable_update_check\": true}"</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_BIND_INTERFACE=eth0"</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_HTTP_ADDR=0.0.0.0"</span>
+    <span class="hljs-attr">entrypoint:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">consul</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">agent</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-server</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-bootstrap-expect=1</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-data-dir=/consul/data</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-node=consul-one</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-bind={{</span> <span class="hljs-string">GetInterfaceIP</span> <span class="hljs-string">"eth0"</span> <span class="hljs-string">}}</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-client=0.0.0.0</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-enable-script-checks=true</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-ui</span>
+    <span class="hljs-attr">volumes:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">./config/consul:/consul/data</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"8500:8500"</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"8600:8600"</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+        <span class="hljs-attr">ipv4_address:</span> <span class="hljs-number">172.30</span><span class="hljs-number">.0</span><span class="hljs-number">.9</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>Zookeeper</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-3"></a><a href="#description-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>Apache Kafka and Apache Flink require zookeeper to manage their clusters.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-3"></a><a href="#docker-compose-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">zookeeper:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">wurstmeister/zookeeper</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"2181:2181"</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>Kafka</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-4"></a><a href="#description-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>Kafka is used as the primary message broker. It is possible to use other brokers or even multiple message brokers in a single pipeline, but Kafka is the
+default. The communication between the processing elements in a pipeline is mostly done via Kafka.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-4"></a><a href="#docker-compose-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml">  <span class="hljs-attr">kafka:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">wurstmeister/kafka:0.10.0.1</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"9092:9092"</span>
+    <span class="hljs-attr">environment:</span>
+      <span class="hljs-attr">KAFKA_ADVERTISED_HOST_NAME:</span> <span class="hljs-comment">###TODO ADD HOSTNAME HERE ###</span>
+      <span class="hljs-attr">KAFKA_ZOOKEEPER_CONNECT:</span> <span class="hljs-string">zookeeper:2181</span>
+    <span class="hljs-attr">volumes:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">/var/run/docker.sock:/var/run/docker.sock</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>ActiveMQ</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-5"></a><a href="#description-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>ActiveMQ is another message broker which can be used in addition to Kafka. Currently, the main purpose is to provide
+an endpoint for the websocket connections required by the real-time dashboard of the StreamPipes UI.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-5"></a><a href="#docker-compose-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">activemq:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">streampipes/activemq</span>
+  <span class="hljs-attr">ports:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"61616:61616"</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"61614:61614"</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"8161:8161"</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+
+    <span class="hljs-string">```</span>
+<span class="hljs-string">&lt;/details&gt;</span>
+
+<span class="hljs-string">&lt;details</span> <span class="hljs-string">class="tip"&gt;</span>
+<span class="hljs-string">&lt;summary&gt;CouchDB&lt;/summary&gt;</span>
+
+<span class="hljs-comment">#### Description</span>
+<span class="hljs-string">CouchDB</span> <span class="hljs-string">is</span> <span class="hljs-string">the</span> <span class="hljs-string">main</span> <span class="hljs-string">database</span> <span class="hljs-string">for</span> <span class="hljs-string">StreamPipes</span> <span class="hljs-string">data</span> <span class="hljs-string">that</span> <span class="hljs-string">needs</span> <span class="hljs-string">to</span> <span class="hljs-string">be</span> <span class="hljs-string">per [...]
+
+<span class="hljs-comment">#### Docker Compose</span>
+<span class="hljs-string">```yaml</span>
+<span class="hljs-attr">couchdb:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">couchdb</span>
+  <span class="hljs-attr">ports:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"5984:5984"</span>
+  <span class="hljs-attr">volumes:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">./config/couchdb/data:/usr/local/var/lib/couchdb</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>Flink</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-6"></a><a href="#description-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>This service sets up a sample flink cluster with one jobmanager and one taskmanager. Although this cluster can be used for testing, it is not recommended for production use.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-6"></a><a href="#docker-compose-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">jobmanager:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">streampipes/flink</span>
+  <span class="hljs-attr">ports:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"8081:8099"</span>
+  <span class="hljs-attr">command:</span> <span class="hljs-string">jobmanager</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+
+
+<span class="hljs-attr">taskmanager:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/services/flink</span>
+  <span class="hljs-attr">command:</span> <span class="hljs-string">taskmanager</span>
+  <span class="hljs-attr">environment:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">FLINK_NUM_SLOTS=20</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<h2><a class="anchor" aria-hidden="true" id="processing-elements"></a><a href="#processing-elements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p><details class="tip">
+<summary>PE Examples Sources</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-7"></a><a href="#description-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>This Processing Element Container contains several sample data sources that can be used to work with StreamPipes.
+It consists of sources descriptions and data simulators that constantly produce data.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-7"></a><a href="#docker-compose-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml">    <span class="hljs-attr">pe-examples-sources:</span>
+      <span class="hljs-attr">image: streampipes/pe-examples-sources:</span>
+      <span class="hljs-attr">depends_on:</span>
+        <span class="hljs-bullet">-</span> <span class="hljs-string">"consul"</span>
+      <span class="hljs-attr">ports:</span>
+        <span class="hljs-bullet">-</span> <span class="hljs-string">"8098:8090"</span>
+      <span class="hljs-attr">networks:</span>
+        <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>PE Examples JVM</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-8"></a><a href="#description-8" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>This Processing Element Container contains some sink example implementations, like for example the real-time
+dashboard. This can be used to visualize data within StreamPipes.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-8"></a><a href="#docker-compose-8" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml">      <span class="hljs-attr">pe-exanmples-jvm:</span>
+        <span class="hljs-attr">image:</span> <span class="hljs-string">streampipes/pe-examples-jvm</span>
+        <span class="hljs-attr">depends_on:</span>
+          <span class="hljs-bullet">-</span> <span class="hljs-string">"consul"</span>
+        <span class="hljs-attr">environment:</span>
+          <span class="hljs-bullet">-</span> <span class="hljs-string">STREAMPIPES_HOST=###TODO</span> <span class="hljs-string">ADD</span> <span class="hljs-string">HOSTNAME</span> <span class="hljs-string">HERE</span> <span class="hljs-comment">###</span>
+        <span class="hljs-attr">ports:</span>
+          <span class="hljs-bullet">-</span> <span class="hljs-string">"8096:8090"</span>
+        <span class="hljs-attr">networks:</span>
+          <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>PE Examples Flink</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-9"></a><a href="#description-9" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The Flink Samples Processing Element Container contains some example algorithms that can be used within processing
+pipelines in the pipeline editor. Those algorithms are deployed to a Flink cluster once the pipeline is started.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-9"></a><a href="#docker-compose-9" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml">  <span class="hljs-attr">pe-flink-samples:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">streampipes/pe-examples-flink</span>
+    <span class="hljs-attr">depends_on:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"consul"</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"8094:8090"</span>
+    <span class="hljs-attr">volumes:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">./config:/root/.streampipes</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<h3><a class="anchor" aria-hidden="true" id="third-party-services"></a><a href="#third-party-services" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<p><details class="tip">
+<summary>Elasticsearch</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-10"></a><a href="#description-10" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>This service can be used to run Elasticsearch. Data can be written into Elasticsearch with the Elasticsearch
+sink of the PE Flink samples conatiner.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-10"></a><a href="#docker-compose-10" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">elasticsearch:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/services/elasticsearch</span>
+  <span class="hljs-attr">ports:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"9200:9200"</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"9300:9300"</span>
+  <span class="hljs-attr">volumes:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">./config/elasticsearch/data:/usr/share/elasticsearch/data</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>Kibana</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-11"></a><a href="#description-11" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>Kibana is used to visualize data that is written into Elasticsearch. It can be used in addition to our live dashboard
+to analyse and visualize historic data.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-11"></a><a href="#docker-compose-11" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">kibana:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">kibana:5.2.2</span>
+  <span class="hljs-attr">ports:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"5601:5601"</span>
+  <span class="hljs-attr">volumes:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">./config/kibana/kibana.yml:/opt/kibana/config/kibana.yml</span>
+  <span class="hljs-attr">environment:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">ELASTICSEARCH_URL=http://elasticsearch:9200</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>Kafka Web Console</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-12"></a><a href="#description-12" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>The kafka web console can be used to monitor the kafka cluster. This is a good tool for debugging your newly
+developed pipeline elements.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-12"></a><a href="#docker-compose-12" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">kafka-web-console:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">hwestphal/kafka-web-console</span>
+  <span class="hljs-attr">ports:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"9000:9000"</span>
+  <span class="hljs-attr">volumes:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">./config:/data</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/user-guide-processing-elements"><span class="arrow-prev">← </span><span>Previous</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#streampipes-framework">StreamPipes Framework</a></li><li><a href="#streampipes-services">StreamPipes Services</a></li><li><a href="#processing-elements">Processing Elements</a><ul class="toc-headings"><li> [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/user-guide-software-components/index.html b/docs/docs/0.55.2-pre-asf/user-guide-software-components/index.html
new file mode 100644
index 0000000..d53814d
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/user-guide-software-components/index.html
@@ -0,0 +1,352 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Software Components · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;This page contains all the software components that can be used within the StreamPipes framework.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Software Components · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;This page contains all the software components that can be used within the StreamPipes framework.&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Software Components</h1></header><article><div><span><p>This page contains all the software components that can be used within the StreamPipes framework.
+Some of them are mandatory but others are just necessary for a special capabilities.
+In the <a href="/docs/docs/0.55.2-pre-asf/user-guide-installation">Installation Guide</a> we  already provide a docker-compose.yml file with all the necessary components
+for a minimal setup.
+Extend this configuration files with further containers described on this page and configure StreamPipes
+according to your needs.</p>
+<h2><a class="anchor" aria-hidden="true" id="streampipes-framework"></a><a href="#streampipes-framework" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
+<p><details class="tip">
+<summary>StreamPipes Backend</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description"></a><a href="#description" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
+<p>The StreamPipes Backend is the main component of the StreamPipes Framework. It contains the application logic to create and execute pipelines.
+Furthermore, it provides a REST-API that is used by other components for communication.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose"></a><a href="#docker-compose" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">backend:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">streampipes/backend</span>
+  <span class="hljs-attr">depends_on:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"consul"</span>
+  <span class="hljs-attr">ports:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"8030:8030"</span>
+  <span class="hljs-attr">volumes:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">./config:/root/.streampipes</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">./config/aduna:/root/.aduna</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>StreamPipes UI</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-1"></a><a href="#description-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>This service uses nginx and contains the UI of StreamPipes.
+The UI can, for example, be used to import new pipeline elements, create new pipelines and manage the pipeline
+execution. The UI communicates with the backend via the REST interface.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-1"></a><a href="#docker-compose-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">nginx:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">streampipes/ui</span>
+  <span class="hljs-attr">ports:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"80:80"</span>
+  <span class="hljs-attr">depends_on:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">backend</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<h2><a class="anchor" aria-hidden="true" id="streampipes-services"></a><a href="#streampipes-services" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<p><details class="tip">
+<summary>Consul</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-2"></a><a href="#description-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>Consul is used to store configuration parameters of the backend service and processing elements.
+It is further used for service discovery. Once a processing element container is started in the network, it is
+automatically discovered via the service discovery feature of Consul.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-2"></a><a href="#docker-compose-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">consul:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">consul</span>
+    <span class="hljs-attr">environment:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_LOCAL_CONFIG={\"disable_update_check\": true}"</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_BIND_INTERFACE=eth0"</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_HTTP_ADDR=0.0.0.0"</span>
+    <span class="hljs-attr">entrypoint:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">consul</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">agent</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-server</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-bootstrap-expect=1</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-data-dir=/consul/data</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-node=consul-one</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-bind={{</span> <span class="hljs-string">GetInterfaceIP</span> <span class="hljs-string">"eth0"</span> <span class="hljs-string">}}</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-client=0.0.0.0</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-enable-script-checks=true</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">-ui</span>
+    <span class="hljs-attr">volumes:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">./config/consul:/consul/data</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"8500:8500"</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"8600:8600"</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+        <span class="hljs-attr">ipv4_address:</span> <span class="hljs-number">172.30</span><span class="hljs-number">.0</span><span class="hljs-number">.9</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>Zookeeper</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-3"></a><a href="#description-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>Apache Kafka and Apache Flink require zookeeper to manage their clusters.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-3"></a><a href="#docker-compose-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">zookeeper:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">wurstmeister/zookeeper</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"2181:2181"</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>Kafka</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-4"></a><a href="#description-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>Kafka is used as the primary message broker. It is possible to use other brokers or even multiple message brokers in a single pipeline, but Kafka is the
+default. The communication between the processing elements in a pipeline is mostly done via Kafka.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-4"></a><a href="#docker-compose-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml">  <span class="hljs-attr">kafka:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">wurstmeister/kafka:0.10.0.1</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"9092:9092"</span>
+    <span class="hljs-attr">environment:</span>
+      <span class="hljs-attr">KAFKA_ADVERTISED_HOST_NAME:</span> <span class="hljs-comment">###TODO ADD HOSTNAME HERE ###</span>
+      <span class="hljs-attr">KAFKA_ZOOKEEPER_CONNECT:</span> <span class="hljs-string">zookeeper:2181</span>
+    <span class="hljs-attr">volumes:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">/var/run/docker.sock:/var/run/docker.sock</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>ActiveMQ</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-5"></a><a href="#description-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>ActiveMQ is another message broker which can be used in addition to Kafka. Currently, the main purpose is to provide
+an endpoint for the websocket connections required by the real-time dashboard of the StreamPipes UI.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-5"></a><a href="#docker-compose-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">activemq:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">streampipes/activemq</span>
+  <span class="hljs-attr">ports:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"61616:61616"</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"61614:61614"</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"8161:8161"</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+
+    <span class="hljs-string">```</span>
+<span class="hljs-string">&lt;/details&gt;</span>
+
+<span class="hljs-string">&lt;details</span> <span class="hljs-string">class="tip"&gt;</span>
+<span class="hljs-string">&lt;summary&gt;CouchDB&lt;/summary&gt;</span>
+
+<span class="hljs-comment">#### Description</span>
+<span class="hljs-string">CouchDB</span> <span class="hljs-string">is</span> <span class="hljs-string">the</span> <span class="hljs-string">main</span> <span class="hljs-string">database</span> <span class="hljs-string">for</span> <span class="hljs-string">StreamPipes</span> <span class="hljs-string">data</span> <span class="hljs-string">that</span> <span class="hljs-string">needs</span> <span class="hljs-string">to</span> <span class="hljs-string">be</span> <span class="hljs-string">per [...]
+
+<span class="hljs-comment">#### Docker Compose</span>
+<span class="hljs-string">```yaml</span>
+<span class="hljs-attr">couchdb:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">couchdb</span>
+  <span class="hljs-attr">ports:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"5984:5984"</span>
+  <span class="hljs-attr">volumes:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">./config/couchdb/data:/usr/local/var/lib/couchdb</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>Flink</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-6"></a><a href="#description-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>This service sets up a sample flink cluster with one jobmanager and one taskmanager. Although this cluster can be used for testing, it is not recommended for production use.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-6"></a><a href="#docker-compose-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">jobmanager:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">streampipes/flink</span>
+  <span class="hljs-attr">ports:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"8081:8099"</span>
+  <span class="hljs-attr">command:</span> <span class="hljs-string">jobmanager</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+
+
+<span class="hljs-attr">taskmanager:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/services/flink</span>
+  <span class="hljs-attr">command:</span> <span class="hljs-string">taskmanager</span>
+  <span class="hljs-attr">environment:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">FLINK_NUM_SLOTS=20</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<h2><a class="anchor" aria-hidden="true" id="processing-elements"></a><a href="#processing-elements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p><details class="tip">
+<summary>PE Examples Sources</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-7"></a><a href="#description-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>This Processing Element Container contains several sample data sources that can be used to work with StreamPipes.
+It consists of sources descriptions and data simulators that constantly produce data.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-7"></a><a href="#docker-compose-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml">    <span class="hljs-attr">pe-examples-sources:</span>
+      <span class="hljs-attr">image: streampipes/pe-examples-sources:</span>
+      <span class="hljs-attr">depends_on:</span>
+        <span class="hljs-bullet">-</span> <span class="hljs-string">"consul"</span>
+      <span class="hljs-attr">ports:</span>
+        <span class="hljs-bullet">-</span> <span class="hljs-string">"8098:8090"</span>
+      <span class="hljs-attr">networks:</span>
+        <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>PE Examples JVM</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-8"></a><a href="#description-8" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>This Processing Element Container contains some sink example implementations, like for example the real-time
+dashboard. This can be used to visualize data within StreamPipes.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-8"></a><a href="#docker-compose-8" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml">      <span class="hljs-attr">pe-exanmples-jvm:</span>
+        <span class="hljs-attr">image:</span> <span class="hljs-string">streampipes/pe-examples-jvm</span>
+        <span class="hljs-attr">depends_on:</span>
+          <span class="hljs-bullet">-</span> <span class="hljs-string">"consul"</span>
+        <span class="hljs-attr">environment:</span>
+          <span class="hljs-bullet">-</span> <span class="hljs-string">STREAMPIPES_HOST=###TODO</span> <span class="hljs-string">ADD</span> <span class="hljs-string">HOSTNAME</span> <span class="hljs-string">HERE</span> <span class="hljs-comment">###</span>
+        <span class="hljs-attr">ports:</span>
+          <span class="hljs-bullet">-</span> <span class="hljs-string">"8096:8090"</span>
+        <span class="hljs-attr">networks:</span>
+          <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>PE Examples Flink</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-9"></a><a href="#description-9" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The Flink Samples Processing Element Container contains some example algorithms that can be used within processing
+pipelines in the pipeline editor. Those algorithms are deployed to a Flink cluster once the pipeline is started.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-9"></a><a href="#docker-compose-9" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-yaml">  <span class="hljs-attr">pe-flink-samples:</span>
+    <span class="hljs-attr">image:</span> <span class="hljs-string">streampipes/pe-examples-flink</span>
+    <span class="hljs-attr">depends_on:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"consul"</span>
+    <span class="hljs-attr">ports:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">"8094:8090"</span>
+    <span class="hljs-attr">volumes:</span>
+      <span class="hljs-bullet">-</span> <span class="hljs-string">./config:/root/.streampipes</span>
+    <span class="hljs-attr">networks:</span>
+      <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<h3><a class="anchor" aria-hidden="true" id="third-party-services"></a><a href="#third-party-services" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<p><details class="tip">
+<summary>Elasticsearch</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-10"></a><a href="#description-10" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>This service can be used to run Elasticsearch. Data can be written into Elasticsearch with the Elasticsearch
+sink of the PE Flink samples conatiner.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-10"></a><a href="#docker-compose-10" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">elasticsearch:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/services/elasticsearch</span>
+  <span class="hljs-attr">ports:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"9200:9200"</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"9300:9300"</span>
+  <span class="hljs-attr">volumes:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">./config/elasticsearch/data:/usr/share/elasticsearch/data</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>Kibana</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-11"></a><a href="#description-11" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>Kibana is used to visualize data that is written into Elasticsearch. It can be used in addition to our live dashboard
+to analyse and visualize historic data.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-11"></a><a href="#docker-compose-11" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">kibana:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">kibana:5.2.2</span>
+  <span class="hljs-attr">ports:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"5601:5601"</span>
+  <span class="hljs-attr">volumes:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">./config/kibana/kibana.yml:/opt/kibana/config/kibana.yml</span>
+  <span class="hljs-attr">environment:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">ELASTICSEARCH_URL=http://elasticsearch:9200</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+<p><details class="tip">
+<summary>Kafka Web Console</summary></p>
+<h4><a class="anchor" aria-hidden="true" id="description-12"></a><a href="#description-12" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>The kafka web console can be used to monitor the kafka cluster. This is a good tool for debugging your newly
+developed pipeline elements.</p>
+<h4><a class="anchor" aria-hidden="true" id="docker-compose-12"></a><a href="#docker-compose-12" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<pre><code class="hljs css language-yaml"><span class="hljs-attr">kafka-web-console:</span>
+  <span class="hljs-attr">image:</span> <span class="hljs-string">hwestphal/kafka-web-console</span>
+  <span class="hljs-attr">ports:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">"9000:9000"</span>
+  <span class="hljs-attr">volumes:</span>
+    <span class="hljs-bullet">-</span> <span class="hljs-string">./config:/data</span>
+  <span class="hljs-attr">networks:</span>
+    <span class="hljs-attr">spnet:</span>
+</code></pre>
+<p></details></p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/user-guide-processing-elements"><span class="arrow-prev">← </span><span>Previous</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#streampipes-framework">StreamPipes Framework</a></li><li><a href="#streampipes-services">StreamPipes Services</a></li><li><a href="#processing-elements">Processing Elements</a><ul class="toc-headings"><li> [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/user-guide-tour.html b/docs/docs/0.55.2-pre-asf/user-guide-tour.html
new file mode 100644
index 0000000..be3203c
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/user-guide-tour.html
@@ -0,0 +1,312 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Tour · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;StreamPipes is a framework that enables domain experts to model and execute stream processing pipelines in a big data infrastructure.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Tour · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;StreamPipes is a framework that enables domain experts to model and execute stream processing pipelines in a big data infrastructure.&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Tour</h1></header><article><div><span><p>StreamPipes is a framework that enables domain experts to model and execute stream processing pipelines in a big data infrastructure.
+The graphical user interface of StreamPipes is a web application that provides an easy to use solution for domain experts.
+In this page, an overview of the many features of StreamPipes is given. We will tour through all features and explain what they do and how users can interact with them.</p>
+<p>First of all, a user needs to log in to the system.
+The credentials for the user are specified during the installation process.</p>
+<p><img src="/docs/img/features/login.png" alt="StreamPipes Login"></p>
+<h2><a class="anchor" aria-hidden="true" id="home"></a><a href="#home" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
+<p>After logging in, the user is redirected on to the home page.
+The home page gives an overview over the different features available in the StreamPipes UI.</p>
+<p>On the left, the navigation menu can be seen.
+You can either use the icons on the left side or click on the menu icon on the
+top left to open the details view of the navigation menu.</p>
+<p>On the top right, a link refers to the documentation and the logout button is present.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/home/home.png" alt="Home">
+    <img src="/docs/img/features/home/menu.png" alt="Menu">
+    <img src="/docs/img/features/home/open_menu.png" alt="Open Menu">
+    <img src="/docs/img/features/home/logout.png" alt="Logout">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="pipeline-editor"></a><a href="#pipeline-editor" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>The first feature we are going to explain is the Pipeline Editor.
+This is one of the central features of StreamPipes, since graphical modeling of pipelines takes place in this view.</p>
+<p>On the top we can see three tabs: <strong>Data Streams</strong>, <strong>Processing Elements</strong>, and <strong>Data Sinks</strong>.
+Each tab contains multiple pipeline elements, which can be installed at runtime.
+The installation of pipeline elements is explained later in section <a href="/docs/docs/0.55.2-pre-asf/user-guide-tour#install-pipeline-elements">Install Pipeline Elements</a>.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/editor/1_data_streams.png" alt="Data Streams">
+    <img src="/docs/img/features/editor/2_processing_elements.png" alt="Processing Elements">
+    <img src="/docs/img/features/editor/3_data_sinks.png" alt="Data Sinks">
+</div>
+<p>There are multiple ways to search for a pipeline element.
+The easiest way is to enter a search term in the search field on the top left corner.
+The system filters the elements according to the search term and only presents the relevant ones.
+Another way is to select one of the categories from the drop down menu.
+The system then filters the elements according to the selected category.
+The category of an element is defined by its functionality.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/editor/4_text_filter.png" alt="Text Filter">
+    <img src="/docs/img/features/editor/5_category_drop_down.png" alt="Category Drop Down">
+    <img src="/docs/img/features/editor/6_category_filter.png" alt="Category Filter">
+</div>
+<p>Modelling of a pipeline starts with choosing one ore more data sources. Therefore a data stream must be selected
+and moved into the editor via drag and drop.
+After adding a data stream, we can select a processing element to transform the events of the data stream.
+This is done again by dragging the processing element icon into our editor.
+The mouse can be used to connect the two elements.
+It is automatically checked in the background if the two elements are semantically compatible.
+If this check is successful, a configuration menu is shown. It contains the parameters that can be modified by the
+user. For all parameters, a description is provided and the system also prevents the user from entering parameters that
+are not correct, according to the semantic description of the element.
+It is also ensured that all required parameters are provided by the user, otherwise an error message is displayed.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/editor/7_connect_elements.png" alt="Connect Elements">
+    <img src="/docs/img/features/editor/8_configure_element.png" alt="Configure Elements">
+</div>
+<p>When the user tries to connect two elements that are not compatible, the system shows a <strong>connection error</strong> message.
+The example illustrated below shows such a case. The user tried to connect a text filter to a temperature sensor.
+This is not possible since the text filter processing element requires at least one event property of type string, which is not provided by the temperature sensor.</p>
+<p><img src="../img/features/editor/9_connection_error.png" alt="Connection Error"></p>
+<p>To further improve the usability, multiple ways are available to connect new elements besides the drag and drop option.
+Each processing element has multiple short-cut buttons to connect it with another element.
+The first one can be used to get a suggestion of all elements that are compatible with the current element.
+The second one gives a recommendation on the elements the user might want to connect, based on the usage of the component in
+other pipelines.
+There is also a button to open the documentation of a selected element.
+Elements can be deleted by clicking the 'delete' button.
+Each element can also be re-configured at a later point in time using the configuration button.
+There is one important aspect about re-configuration of pipeline elements you need to be aware of: Only elements that are not yet connected to another element can be modified.
+The reason for this behaviour is that some of the following elements might rely on the configuration of previous elements.
+This way it is ensured that the user can not change the behaviour of the pipeline by accident.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/editor/10_shortcut_buttons.png" alt="Shortcut Buttons">
+    <img src="/docs/img/features/editor/11_compatible_elements.png" alt="Compatible Elements">
+    <img src="/docs/img/features/editor/12_recommend_elements.png" alt="Recommended elements">
+</div>
+<p>After the pipeline is completely modelled, the editor looks similar to the first image below.
+Especially for larger pipelines, the auto layout button in the editor menu might be helpful.
+With this button, the pipeline will be beautifully aligned in the editor, helping users to get a better overview of the complete pipeline.
+On the top left corner of the editor, the 'save' button can be found.
+After the modelling of the pipeline is done, use this button to save and execute the pipeline.
+A save dialogue pops up when clicking the save button.
+The pipeline title must be entered and an additional description can be provided.
+It is recommended to always provide a description, because it makes it easier for other users to understand the meaning of the pipeline.
+In the save menu, the user can either just store the pipeline configuration or store it and immediately start the pipeline.
+Once the pipeline is executed, the user is redirected to the <em>Manage Pipeline</em> view.
+In this view, the user gets immediate feedback whether all components did start correctly and the pipeline is up and running.
+This view also shows that individual elements might run in different environments on different servers.
+If there is an error during the execution, a notification containing a (hopefully) detailed error description is provided in this view.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/editor/13_save_adjust.png" alt="Save adjust delete">
+    <img src="/docs/img/features/editor/14_save_dialogue.png" alt="Complete pipeline">
+    <img src="/docs/img/features/editor/15_pipeline_sucessfully_started.png" alt="Pipeline sucessfully started">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="manage-pipelines"></a><a href="#manage-pipelines" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<p>The <em>Manage Pipelines</em> view provides an overview of all existing pipelines.
+Existing pipelines can be managed using this view.
+For instance, users can start and stop pipelines or delete them when they are not longer needed.
+Pipeline actions can be performed by clicking one of the buttons next to each pipeline.
+For each pipeline, the title and description is displayed in the table.
+By clicking the edit button, they can also be inspected in more detail.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/manage_pipelines/1_pipeline_overview.png" alt="Pipeline Overview">
+    <img src="/docs/img/features/manage_pipelines/2_start_stop_pipeline.png" alt="Start stop Pipelines">
+    <img src="/docs/img/features/manage_pipelines/3_delete_pipeline.png" alt="Delete Pipelines">
+    <img src="/docs/img/features/manage_pipelines/4_pipeline_deleted.png" alt="Delete Pipelines">
+</div>
+<p>In a setting with many defined pipelines, it can get really hard to keep track of all pipelines.
+This is why we introduce categories.
+A category is a set of pipelines that can be defined by users in order to better organize pipelines.
+By clicking on the &quot;Manage Categories&quot; button on the top left, a new category can be added to StreamPipes.
+In this example, we create a new category named &quot;New Demo Category&quot;.
+After saving a category, pipelines can be added to the newly created category.
+The new category is then presented as a tab in the <em>Pipeline Management</em> view.
+This tab contains all previously defined pipelines.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/manage_pipelines/5_pipeline_category.png" alt="Pipeline Category">
+    <img src="/docs/img/features/manage_pipelines/6_add_category.png" alt="Add Pipeline Category">
+    <img src="/docs/img/features/manage_pipelines/7_new_category.png" alt="New Category">
+    <img src="/docs/img/features/manage_pipelines/8_show_new_category.png" alt="Show new Category">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="live-dashboard"></a><a href="#live-dashboard" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>The live dashboard can be used for multiple use cases.
+It is a good way to live monitor a running system in a dashboard, but it can also be used during the pipeline development to get a fast feedback from newly created pipelines.
+Below is a screenshot of an example dashboard showing the current value of a water level, which further shows a line chart and a map.
+All pipelines that contain the &quot;Dashboard Sink&quot; can be visualized in this view.
+To add a new visualisation, click on the &quot;Add visualisation&quot; button on the top left corner.
+Afterwards, a three-step configuration menu is shown.
+The first step is to select the pipeline that should be visualized.
+In the second step, the type of visualization can be defined.
+Currently. 9 different types are available, including line charts, various map visualizations and data tables.
+After selecting the type (in our example &quot;Gauge&quot;), you can select the specific measurement values of the data stream that should be displayed.
+In the example below, the water level value should be monitored and the gauge value should range from 0 to 100.
+Once all steps are completed, the new visualization is placed on the dashboard and live data is presented as soon as it becomes available.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/dashboard/01_dashboard.png" alt="Screenshot of live dashboard">
+    <img src="/docs/img/features/dashboard/06_add_new.png" alt="New Visualization">
+    <img src="/docs/img/features/dashboard/02_new_visualisation.png" alt="Select Pipeline to visualize">
+    <img src="/docs/img/features/dashboard/03_select_gauge.png" alt="Select Visualization Type">
+    <img src="/docs/img/features/dashboard/04_configure_gauge.png" alt="Configure  Visualzation">
+    <img src="/docs/img/features/dashboard/05_new_gauge_done.png" alt="Show new Visualzation">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="file-download"></a><a href="#file-download" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>With the file download,  it is possible to download stored files directly from Elasticsearch.
+This can be very useful for example when a data dumb is needed for a specific time range.
+All data that is written into Elasticsearch using the <em>Elasticsearch Sink</em> can be accessed by the file downloader.
+A common use case is to download data for offline analysis and to train a machine learning algorithm.
+First, an index must be defined, afterwards, the time range must be set.
+A date picker helps users to enter the time range.
+When a user clicks the &quot;Create File&quot; button the file is created.
+All files stored on the server can be downloaded via the download button.
+If the files are not longer needed, they can be deleted by clicking the delete button.
+This will remove the file from the server.
+Since data is stored in Elasticsearch anyways. it is recommended not to store the files for a longer period of time on the server.
+When a file is needed again at a later point in time it is easy to create it again.
+This way a lot of disk space on the server can be saved, especially when the files are rather large.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/file_download/01_file_download.png" alt="File Download">
+    <img src="/docs/img/features/file_download/02_file_download.png" alt="File Download with selected time range">
+    <img src="/docs/img/features/file_download/03_file_downloaded.png" alt="File Download with new File">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="notifications"></a><a href="#notifications" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>Notifications are a good solution to notify someone when a specific situation occurs.
+A notification can be created by using the notification sink in the pipeline editor.
+When using such a sink a configuration dialogue is presented to the user.
+In this dialogue the user must provide enough information to resolve the solution when it occurs.
+The message can be nicely configured in the message editor.
+It is also possible to embed values of the event that triggered the notification.
+This can be done with the #property# notation.
+All available properties are presented in the notification configurator.
+When the notification is triggered the #property# template is replaced with the actual value of the property.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/notification/01_select_notification_sink.png" alt="Select Notification">
+    <img src="/docs/img/features/notification/02_configure_notification.png" alt="Configure Notification">
+    <img src="/docs/img/features/notification/03_use_event_properties.png" alt="Use Event Properties">
+</div>
+<p>A pop up icon on the notification tab in the menu shows the user how many unread notifications currently are in the system.
+This icon also alerts users when new notifications occur.
+In the notification overview all notifications are listed.
+On the top are the new notifications that are not read yet.
+A user can mark them as read by clicking on the little envelope icon.
+Those notifications are then no longer in the unread section, but they remain in the &quot;All Messages&quot; view.
+This way it is possible to keep track of all notifications and have a look at them at a later point in time.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/notification/04_new_notification.png" alt="New Notification">
+    <img src="/docs/img/features/notification/05_mark_read.png" alt="Mark Notification as read">
+    <img src="/docs/img/features/notification/06_marked_as_read.png" alt="Notification read">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="install-pipeline-elements"></a><a href="#install-pipeline-elements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
+<p>StreamPipes is highly configurable and extensible.
+Pipeline elements can be added and removed during runtime.
+This can be done in the &quot;Install Pipeline Elements&quot; view.
+All available pipeline elements are shown here and can be selected to install or uninstall.
+It is also possible to select multiple or all of them and then install them all together.
+When a new element is installed by the user it is automatically available in the &quot;Pipeline Editor&quot; and can be used for pipelines.
+Elements that are uninstalled are removed from the system.
+They can not longer be used within pipelines.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/install_elements/01_install_elements.png" alt="Install Elements View">
+    <img src="/docs/img/features/install_elements/02_install_absence.png" alt="Insall new Element">
+    <img src="/docs/img/features/install_elements/03_installed_absence.png" alt="Installation Successful">
+    <img src="/docs/img/features/install_elements/04_abcense_in_editor.png" alt="Show new installed element">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="my-elements"></a><a href="#my-elements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
+<p>The &quot;My Elements&quot; view gives a quick overview over all installed pipeline elements.
+Here they can be inspected and the description can be re-imported.
+In this view it is also possible to have a look at the JSON-LD representation of each element.
+This is not important for a user, but it is worth noting that the system uses this machine understandable format to support the user.
+For example all the information of the sources, like data schema or unit information is in the JSON-LD meta data.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/my_elements/01_my_elements.png" alt="My Elements Overview">
+    <img src="/docs/img/features/my_elements/02_my_elements_jsonls.png" alt="View JSON-LD">
+    <img src="/docs/img/features/my_elements/03_jsonld.png" alt="See JSON-LD">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="configuration"></a><a href="#configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The last feature is the <em>configuration view</em>.
+Here, it is possible to change the configuration parameters of installed components.
+All components containing processing elements automatically register in StreamPipes when they are started in the same network as the backend component.
+Once a container is registered it is represented in the configuration view.
+The green dot on the top left indicates that tha container is running properly.
+When there is a problem with a container the green dot changes to red and the user knows there is a problem.
+To configure the parameters the top right arrow of a configuration box must be clicked.
+Then the configuration menu pops up.
+Within there it is possible to change the parameters of a service.
+To make the changes persistent the &quot;Update&quot; button must be clicked.
+A user should keep in mind that sometimes it is necessary to restart a container when the parameters are changed.
+Sometimes it is also necessary to re-import the pipeline element description, either by uninstalling and re-installing them after the container restart or be reloading the description in the &quot;My elements&quot; view.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/configuration/01_configuration_overview.png" alt="Configuration Overview">
+    <img src="/docs/img/features/configuration/02_status.png" alt="Status of Processing Element Containers">
+    <img src="/docs/img/features/configuration/03_change_config.png" alt="Change Configuration">
+</div>
+<p>Congratulations! You've just finished your first tour of StreamPipes.
+Although there's still more to learn, we introduced most of the currently available features.
+On the next page, the different processing elements that come with the installation are explained.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/user-guide-installation"><span class="arrow-prev">← </span><span>Installation</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/user-guide-processing-elements"><span>Next</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#home">Home</a></li><li><a href="#pipeline-editor">Pipeline Ed [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2-pre-asf/user-guide-tour/index.html b/docs/docs/0.55.2-pre-asf/user-guide-tour/index.html
new file mode 100644
index 0000000..be3203c
--- /dev/null
+++ b/docs/docs/0.55.2-pre-asf/user-guide-tour/index.html
@@ -0,0 +1,312 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Tour · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;StreamPipes is a framework that enables domain experts to model and execute stream processing pipelines in a big data infrastructure.&lt;/p&gt;
+"/><meta name="docsearch:version" content="0.55.2-pre-asf"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Tour · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;StreamPipes is a framework that enables domain experts to model and execute stream processing pipelines in a big data infrastructure.&lt;/p&gt;
+"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2-pre-asf</h3></a><div class="navigationWrapper navigationSlider"><n [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              const headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                if (event.target.tagName === 'A') {
+                  document.body.classList.remove('tocActive');
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Tour</h1></header><article><div><span><p>StreamPipes is a framework that enables domain experts to model and execute stream processing pipelines in a big data infrastructure.
+The graphical user interface of StreamPipes is a web application that provides an easy to use solution for domain experts.
+In this page, an overview of the many features of StreamPipes is given. We will tour through all features and explain what they do and how users can interact with them.</p>
+<p>First of all, a user needs to log in to the system.
+The credentials for the user are specified during the installation process.</p>
+<p><img src="/docs/img/features/login.png" alt="StreamPipes Login"></p>
+<h2><a class="anchor" aria-hidden="true" id="home"></a><a href="#home" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
+<p>After logging in, the user is redirected on to the home page.
+The home page gives an overview over the different features available in the StreamPipes UI.</p>
+<p>On the left, the navigation menu can be seen.
+You can either use the icons on the left side or click on the menu icon on the
+top left to open the details view of the navigation menu.</p>
+<p>On the top right, a link refers to the documentation and the logout button is present.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/home/home.png" alt="Home">
+    <img src="/docs/img/features/home/menu.png" alt="Menu">
+    <img src="/docs/img/features/home/open_menu.png" alt="Open Menu">
+    <img src="/docs/img/features/home/logout.png" alt="Logout">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="pipeline-editor"></a><a href="#pipeline-editor" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>The first feature we are going to explain is the Pipeline Editor.
+This is one of the central features of StreamPipes, since graphical modeling of pipelines takes place in this view.</p>
+<p>On the top we can see three tabs: <strong>Data Streams</strong>, <strong>Processing Elements</strong>, and <strong>Data Sinks</strong>.
+Each tab contains multiple pipeline elements, which can be installed at runtime.
+The installation of pipeline elements is explained later in section <a href="/docs/docs/0.55.2-pre-asf/user-guide-tour#install-pipeline-elements">Install Pipeline Elements</a>.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/editor/1_data_streams.png" alt="Data Streams">
+    <img src="/docs/img/features/editor/2_processing_elements.png" alt="Processing Elements">
+    <img src="/docs/img/features/editor/3_data_sinks.png" alt="Data Sinks">
+</div>
+<p>There are multiple ways to search for a pipeline element.
+The easiest way is to enter a search term in the search field on the top left corner.
+The system filters the elements according to the search term and only presents the relevant ones.
+Another way is to select one of the categories from the drop down menu.
+The system then filters the elements according to the selected category.
+The category of an element is defined by its functionality.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/editor/4_text_filter.png" alt="Text Filter">
+    <img src="/docs/img/features/editor/5_category_drop_down.png" alt="Category Drop Down">
+    <img src="/docs/img/features/editor/6_category_filter.png" alt="Category Filter">
+</div>
+<p>Modelling of a pipeline starts with choosing one ore more data sources. Therefore a data stream must be selected
+and moved into the editor via drag and drop.
+After adding a data stream, we can select a processing element to transform the events of the data stream.
+This is done again by dragging the processing element icon into our editor.
+The mouse can be used to connect the two elements.
+It is automatically checked in the background if the two elements are semantically compatible.
+If this check is successful, a configuration menu is shown. It contains the parameters that can be modified by the
+user. For all parameters, a description is provided and the system also prevents the user from entering parameters that
+are not correct, according to the semantic description of the element.
+It is also ensured that all required parameters are provided by the user, otherwise an error message is displayed.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/editor/7_connect_elements.png" alt="Connect Elements">
+    <img src="/docs/img/features/editor/8_configure_element.png" alt="Configure Elements">
+</div>
+<p>When the user tries to connect two elements that are not compatible, the system shows a <strong>connection error</strong> message.
+The example illustrated below shows such a case. The user tried to connect a text filter to a temperature sensor.
+This is not possible since the text filter processing element requires at least one event property of type string, which is not provided by the temperature sensor.</p>
+<p><img src="../img/features/editor/9_connection_error.png" alt="Connection Error"></p>
+<p>To further improve the usability, multiple ways are available to connect new elements besides the drag and drop option.
+Each processing element has multiple short-cut buttons to connect it with another element.
+The first one can be used to get a suggestion of all elements that are compatible with the current element.
+The second one gives a recommendation on the elements the user might want to connect, based on the usage of the component in
+other pipelines.
+There is also a button to open the documentation of a selected element.
+Elements can be deleted by clicking the 'delete' button.
+Each element can also be re-configured at a later point in time using the configuration button.
+There is one important aspect about re-configuration of pipeline elements you need to be aware of: Only elements that are not yet connected to another element can be modified.
+The reason for this behaviour is that some of the following elements might rely on the configuration of previous elements.
+This way it is ensured that the user can not change the behaviour of the pipeline by accident.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/editor/10_shortcut_buttons.png" alt="Shortcut Buttons">
+    <img src="/docs/img/features/editor/11_compatible_elements.png" alt="Compatible Elements">
+    <img src="/docs/img/features/editor/12_recommend_elements.png" alt="Recommended elements">
+</div>
+<p>After the pipeline is completely modelled, the editor looks similar to the first image below.
+Especially for larger pipelines, the auto layout button in the editor menu might be helpful.
+With this button, the pipeline will be beautifully aligned in the editor, helping users to get a better overview of the complete pipeline.
+On the top left corner of the editor, the 'save' button can be found.
+After the modelling of the pipeline is done, use this button to save and execute the pipeline.
+A save dialogue pops up when clicking the save button.
+The pipeline title must be entered and an additional description can be provided.
+It is recommended to always provide a description, because it makes it easier for other users to understand the meaning of the pipeline.
+In the save menu, the user can either just store the pipeline configuration or store it and immediately start the pipeline.
+Once the pipeline is executed, the user is redirected to the <em>Manage Pipeline</em> view.
+In this view, the user gets immediate feedback whether all components did start correctly and the pipeline is up and running.
+This view also shows that individual elements might run in different environments on different servers.
+If there is an error during the execution, a notification containing a (hopefully) detailed error description is provided in this view.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/editor/13_save_adjust.png" alt="Save adjust delete">
+    <img src="/docs/img/features/editor/14_save_dialogue.png" alt="Complete pipeline">
+    <img src="/docs/img/features/editor/15_pipeline_sucessfully_started.png" alt="Pipeline sucessfully started">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="manage-pipelines"></a><a href="#manage-pipelines" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<p>The <em>Manage Pipelines</em> view provides an overview of all existing pipelines.
+Existing pipelines can be managed using this view.
+For instance, users can start and stop pipelines or delete them when they are not longer needed.
+Pipeline actions can be performed by clicking one of the buttons next to each pipeline.
+For each pipeline, the title and description is displayed in the table.
+By clicking the edit button, they can also be inspected in more detail.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/manage_pipelines/1_pipeline_overview.png" alt="Pipeline Overview">
+    <img src="/docs/img/features/manage_pipelines/2_start_stop_pipeline.png" alt="Start stop Pipelines">
+    <img src="/docs/img/features/manage_pipelines/3_delete_pipeline.png" alt="Delete Pipelines">
+    <img src="/docs/img/features/manage_pipelines/4_pipeline_deleted.png" alt="Delete Pipelines">
+</div>
+<p>In a setting with many defined pipelines, it can get really hard to keep track of all pipelines.
+This is why we introduce categories.
+A category is a set of pipelines that can be defined by users in order to better organize pipelines.
+By clicking on the &quot;Manage Categories&quot; button on the top left, a new category can be added to StreamPipes.
+In this example, we create a new category named &quot;New Demo Category&quot;.
+After saving a category, pipelines can be added to the newly created category.
+The new category is then presented as a tab in the <em>Pipeline Management</em> view.
+This tab contains all previously defined pipelines.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/manage_pipelines/5_pipeline_category.png" alt="Pipeline Category">
+    <img src="/docs/img/features/manage_pipelines/6_add_category.png" alt="Add Pipeline Category">
+    <img src="/docs/img/features/manage_pipelines/7_new_category.png" alt="New Category">
+    <img src="/docs/img/features/manage_pipelines/8_show_new_category.png" alt="Show new Category">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="live-dashboard"></a><a href="#live-dashboard" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>The live dashboard can be used for multiple use cases.
+It is a good way to live monitor a running system in a dashboard, but it can also be used during the pipeline development to get a fast feedback from newly created pipelines.
+Below is a screenshot of an example dashboard showing the current value of a water level, which further shows a line chart and a map.
+All pipelines that contain the &quot;Dashboard Sink&quot; can be visualized in this view.
+To add a new visualisation, click on the &quot;Add visualisation&quot; button on the top left corner.
+Afterwards, a three-step configuration menu is shown.
+The first step is to select the pipeline that should be visualized.
+In the second step, the type of visualization can be defined.
+Currently. 9 different types are available, including line charts, various map visualizations and data tables.
+After selecting the type (in our example &quot;Gauge&quot;), you can select the specific measurement values of the data stream that should be displayed.
+In the example below, the water level value should be monitored and the gauge value should range from 0 to 100.
+Once all steps are completed, the new visualization is placed on the dashboard and live data is presented as soon as it becomes available.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/dashboard/01_dashboard.png" alt="Screenshot of live dashboard">
+    <img src="/docs/img/features/dashboard/06_add_new.png" alt="New Visualization">
+    <img src="/docs/img/features/dashboard/02_new_visualisation.png" alt="Select Pipeline to visualize">
+    <img src="/docs/img/features/dashboard/03_select_gauge.png" alt="Select Visualization Type">
+    <img src="/docs/img/features/dashboard/04_configure_gauge.png" alt="Configure  Visualzation">
+    <img src="/docs/img/features/dashboard/05_new_gauge_done.png" alt="Show new Visualzation">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="file-download"></a><a href="#file-download" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>With the file download,  it is possible to download stored files directly from Elasticsearch.
+This can be very useful for example when a data dumb is needed for a specific time range.
+All data that is written into Elasticsearch using the <em>Elasticsearch Sink</em> can be accessed by the file downloader.
+A common use case is to download data for offline analysis and to train a machine learning algorithm.
+First, an index must be defined, afterwards, the time range must be set.
+A date picker helps users to enter the time range.
+When a user clicks the &quot;Create File&quot; button the file is created.
+All files stored on the server can be downloaded via the download button.
+If the files are not longer needed, they can be deleted by clicking the delete button.
+This will remove the file from the server.
+Since data is stored in Elasticsearch anyways. it is recommended not to store the files for a longer period of time on the server.
+When a file is needed again at a later point in time it is easy to create it again.
+This way a lot of disk space on the server can be saved, especially when the files are rather large.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/file_download/01_file_download.png" alt="File Download">
+    <img src="/docs/img/features/file_download/02_file_download.png" alt="File Download with selected time range">
+    <img src="/docs/img/features/file_download/03_file_downloaded.png" alt="File Download with new File">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="notifications"></a><a href="#notifications" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>Notifications are a good solution to notify someone when a specific situation occurs.
+A notification can be created by using the notification sink in the pipeline editor.
+When using such a sink a configuration dialogue is presented to the user.
+In this dialogue the user must provide enough information to resolve the solution when it occurs.
+The message can be nicely configured in the message editor.
+It is also possible to embed values of the event that triggered the notification.
+This can be done with the #property# notation.
+All available properties are presented in the notification configurator.
+When the notification is triggered the #property# template is replaced with the actual value of the property.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/notification/01_select_notification_sink.png" alt="Select Notification">
+    <img src="/docs/img/features/notification/02_configure_notification.png" alt="Configure Notification">
+    <img src="/docs/img/features/notification/03_use_event_properties.png" alt="Use Event Properties">
+</div>
+<p>A pop up icon on the notification tab in the menu shows the user how many unread notifications currently are in the system.
+This icon also alerts users when new notifications occur.
+In the notification overview all notifications are listed.
+On the top are the new notifications that are not read yet.
+A user can mark them as read by clicking on the little envelope icon.
+Those notifications are then no longer in the unread section, but they remain in the &quot;All Messages&quot; view.
+This way it is possible to keep track of all notifications and have a look at them at a later point in time.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/notification/04_new_notification.png" alt="New Notification">
+    <img src="/docs/img/features/notification/05_mark_read.png" alt="Mark Notification as read">
+    <img src="/docs/img/features/notification/06_marked_as_read.png" alt="Notification read">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="install-pipeline-elements"></a><a href="#install-pipeline-elements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
+<p>StreamPipes is highly configurable and extensible.
+Pipeline elements can be added and removed during runtime.
+This can be done in the &quot;Install Pipeline Elements&quot; view.
+All available pipeline elements are shown here and can be selected to install or uninstall.
+It is also possible to select multiple or all of them and then install them all together.
+When a new element is installed by the user it is automatically available in the &quot;Pipeline Editor&quot; and can be used for pipelines.
+Elements that are uninstalled are removed from the system.
+They can not longer be used within pipelines.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/install_elements/01_install_elements.png" alt="Install Elements View">
+    <img src="/docs/img/features/install_elements/02_install_absence.png" alt="Insall new Element">
+    <img src="/docs/img/features/install_elements/03_installed_absence.png" alt="Installation Successful">
+    <img src="/docs/img/features/install_elements/04_abcense_in_editor.png" alt="Show new installed element">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="my-elements"></a><a href="#my-elements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
+<p>The &quot;My Elements&quot; view gives a quick overview over all installed pipeline elements.
+Here they can be inspected and the description can be re-imported.
+In this view it is also possible to have a look at the JSON-LD representation of each element.
+This is not important for a user, but it is worth noting that the system uses this machine understandable format to support the user.
+For example all the information of the sources, like data schema or unit information is in the JSON-LD meta data.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/my_elements/01_my_elements.png" alt="My Elements Overview">
+    <img src="/docs/img/features/my_elements/02_my_elements_jsonls.png" alt="View JSON-LD">
+    <img src="/docs/img/features/my_elements/03_jsonld.png" alt="See JSON-LD">
+</div>
+<h2><a class="anchor" aria-hidden="true" id="configuration"></a><a href="#configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The last feature is the <em>configuration view</em>.
+Here, it is possible to change the configuration parameters of installed components.
+All components containing processing elements automatically register in StreamPipes when they are started in the same network as the backend component.
+Once a container is registered it is represented in the configuration view.
+The green dot on the top left indicates that tha container is running properly.
+When there is a problem with a container the green dot changes to red and the user knows there is a problem.
+To configure the parameters the top right arrow of a configuration box must be clicked.
+Then the configuration menu pops up.
+Within there it is possible to change the parameters of a service.
+To make the changes persistent the &quot;Update&quot; button must be clicked.
+A user should keep in mind that sometimes it is necessary to restart a container when the parameters are changed.
+Sometimes it is also necessary to re-import the pipeline element description, either by uninstalling and re-installing them after the container restart or be reloading the description in the &quot;My elements&quot; view.</p>
+<div class="my-carousel">
+    <img src="/docs/img/features/configuration/01_configuration_overview.png" alt="Configuration Overview">
+    <img src="/docs/img/features/configuration/02_status.png" alt="Status of Processing Element Containers">
+    <img src="/docs/img/features/configuration/03_change_config.png" alt="Change Configuration">
+</div>
+<p>Congratulations! You've just finished your first tour of StreamPipes.
+Although there's still more to learn, we introduced most of the currently available features.
+On the next page, the different processing elements that come with the installation are explained.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2-pre-asf/user-guide-installation"><span class="arrow-prev">← </span><span>Installation</span></a><a class="docs-next button" href="/docs/docs/0.55.2-pre-asf/user-guide-processing-elements"><span>Next</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#home">Home</a></li><li><a href="#pipeline-editor">Pipeline Ed [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '0fedc89dddf2810657708b178e56ef02',
+                indexName: 'streampipes',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2/dev-guide-architecture.html b/docs/docs/0.55.2/dev-guide-architecture.html
deleted file mode 100644
index a39f317..0000000
--- a/docs/docs/0.55.2/dev-guide-architecture.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Architecture · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The following picture illustrates the high-level architecture of StreamPipes:&lt;/p&gt;
-"/><meta name="docsearch:version" content="0.55.2"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Architecture · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;The following picture illustrates the high-level architecture of StreamPipes:&lt;/p&gt;
-"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
-        document.addEventListener('DOMContentLoaded', function() {
-          addBackToTop(
-            {"zIndex":100}
-          )
-        });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Architecture</h1></header><article><div><span><p>The following picture illustrates the high-level architecture of StreamPipes:</p>
-<p><img src="/docs/img/architecture/high-level-architecture.png" alt="High Level Architecture of StreamPipes"></p>
-<p>Users mainly interact (besides other UI components) with the <em>Pipeline Editor</em> to create stream processing pipelines based on data streams, data processors and data sinks.
-These reusable pipeline elements are provided by self-contained <em>pipeline element containers</em>, each of them having a semantic description that specifies their characteristics (e.g., input, output and required user input for data processors).
-Each pipeline element container has a REST endpoint that provides these characteristics as a JSON-LD document.</p>
-<p>Pipeline element containers are built using one of several provided <em>wrappers</em>.
-Wrappers abstract from the underlying runtime stream processing framework.
-Currently, the StreamPipes framework provides wrappers for Apache Flink, Esper and algorithms running directly on the JVM.</p>
-<p>The <em>pipeline manager</em> manages the definition and execution of pipelines.
-When creating pipelines, the manager continuously matches the pipeline against its semantic description and provides user guidance in form of recommendations.
-Once a pipeline is started, the pipeline manager invokes the corresponding pipeline element containers.
-The container prepares the actual execution logic and submits the program to the underlying execution engine, e.g., the program is deployed in the Apache Flink cluster.</p>
-<p>Pipeline elements exchange data using one or more message brokers and protocols (e.g., Kafka or MQTT).
-StreamPipes does not rely on a specific broker or message format, but negotiates suitable brokers based on the capabilities of connected pipeline elements.</p>
-<p>Thus, StreamPipes provides a higher-level abstraction of existing stream processing technology by leveraging domain experts to create streaming analytics pipelines in a self-service manner.</p>
-<h2><a class="anchor" aria-hidden="true" id="semantic-description"></a><a href="#semantic-description" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
-<p>Pipeline elements in StreamPipes are meant to be resuable:</p>
-<ul>
-<li>Data processors and data sink are generic (or domain-specific) elements that express their requirements and are able to operate on any stream that satisfies these requirements.</li>
-<li>Data processors and data sinks can be manually configured by offering possible configuration parameters which users can individually define when creating pipelines.</li>
-<li>Data streams can be connected to any data processor or data sink that matches the capabilities of the stream.</li>
-</ul>
-<p>When users create pipelines by connecting a data stream with a data processor (or further processors), the pipeline manager <em>matches</em> the input stream of a data processor against its requirements.
-This matching is performed based on the _semantic description of each element.
-The semantic description (technically an RDF graph serialized as JSON-LD) can be best understood by seeing it as an envelope around a pipeline element.
-It only provides metadata information, while we don't rely on any RDF at runtime for exchanging events between pipeline elements.
-While RDF-based metadata ensures good understanding of stream capabilities, lightweight event formats at runtime (such as JSON or Thrift) ensure fast processing of events.</p>
-<p>Let's look at an example stream that produces a continuous stream of vehicle positions as illustrated below:</p>
-<p><img src="/docs/img/architecture/semantic-description-stream.png" alt="Semantic description of data streams"></p>
-<p>While the runtime layer produces plain JSON by submitting actual values of the position and the vehicle's plate number, the description layer describes various characteristics of the stream:
-For instance, it defines the event schema (including, besides the data type and the runtime name of each property also a more fine-grained meaning of the property), quality aspects (e.g., the measurement unit of a property or the frequency) and the grounding (e.g., the format used at runtime and the communication protocol used for transmitting events).</p>
-<p>The same accounts for data processors and data sinks:</p>
-<p><img src="/docs/img/architecture/semantic-description-processor.png" alt="Semantic description of data processor"></p>
-<p>Data processors (and, with some differences, data sinks) are annotated by providing metadata information on their required input and output.
-For instance, we can define minimum schema requirements (such as geospatial coordinates that need to be provided by any stream that is connected to a processor), but also required (minimum or maximum) quality levels and supported transport protocols and formats.
-In addition, required configuration parameters users can define during the pipeline definition process are provided by the semantic description.</p>
-<p>Once new pipeline elements are imported into StreamPipes, we store all information provided by the description layer in a central repository and use this information to guide useres through the pipeline definition process.</p>
-<p>Don't worry - you will never be required to model RDF by yourself.
-Our SDK provides convenience methods that help creating the description automatically.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2/dev-guide-introduction"><span class="arrow-prev">← </span><span>Introduction</span></a><a class="docs-next button" href="/docs/docs/0.55.2/dev-guide-development-environment"><span>Development Environment</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#semantic-description">Semantic description</a></li></ul> [...]
-                document.addEventListener('keyup', function(e) {
-                  if (e.target !== document.body) {
-                    return;
-                  }
-                  // keyCode for '/' (slash)
-                  if (e.keyCode === 191) {
-                    const search = document.getElementById('search_input_react');
-                    search && search.focus();
-                  }
-                });
-              </script><script>
-              var search = docsearch({
-                
-                apiKey: '0fedc89dddf2810657708b178e56ef02',
-                indexName: 'streampipes',
-                inputSelector: '#search_input_react',
-                algoliaOptions: {}
-              });
-            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2/dev-guide-architecture/index.html b/docs/docs/0.55.2/dev-guide-architecture/index.html
deleted file mode 100644
index a39f317..0000000
--- a/docs/docs/0.55.2/dev-guide-architecture/index.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Architecture · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The following picture illustrates the high-level architecture of StreamPipes:&lt;/p&gt;
-"/><meta name="docsearch:version" content="0.55.2"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Architecture · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;The following picture illustrates the high-level architecture of StreamPipes:&lt;/p&gt;
-"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
-        document.addEventListener('DOMContentLoaded', function() {
-          addBackToTop(
-            {"zIndex":100}
-          )
-        });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Architecture</h1></header><article><div><span><p>The following picture illustrates the high-level architecture of StreamPipes:</p>
-<p><img src="/docs/img/architecture/high-level-architecture.png" alt="High Level Architecture of StreamPipes"></p>
-<p>Users mainly interact (besides other UI components) with the <em>Pipeline Editor</em> to create stream processing pipelines based on data streams, data processors and data sinks.
-These reusable pipeline elements are provided by self-contained <em>pipeline element containers</em>, each of them having a semantic description that specifies their characteristics (e.g., input, output and required user input for data processors).
-Each pipeline element container has a REST endpoint that provides these characteristics as a JSON-LD document.</p>
-<p>Pipeline element containers are built using one of several provided <em>wrappers</em>.
-Wrappers abstract from the underlying runtime stream processing framework.
-Currently, the StreamPipes framework provides wrappers for Apache Flink, Esper and algorithms running directly on the JVM.</p>
-<p>The <em>pipeline manager</em> manages the definition and execution of pipelines.
-When creating pipelines, the manager continuously matches the pipeline against its semantic description and provides user guidance in form of recommendations.
-Once a pipeline is started, the pipeline manager invokes the corresponding pipeline element containers.
-The container prepares the actual execution logic and submits the program to the underlying execution engine, e.g., the program is deployed in the Apache Flink cluster.</p>
-<p>Pipeline elements exchange data using one or more message brokers and protocols (e.g., Kafka or MQTT).
-StreamPipes does not rely on a specific broker or message format, but negotiates suitable brokers based on the capabilities of connected pipeline elements.</p>
-<p>Thus, StreamPipes provides a higher-level abstraction of existing stream processing technology by leveraging domain experts to create streaming analytics pipelines in a self-service manner.</p>
-<h2><a class="anchor" aria-hidden="true" id="semantic-description"></a><a href="#semantic-description" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
-<p>Pipeline elements in StreamPipes are meant to be resuable:</p>
-<ul>
-<li>Data processors and data sink are generic (or domain-specific) elements that express their requirements and are able to operate on any stream that satisfies these requirements.</li>
-<li>Data processors and data sinks can be manually configured by offering possible configuration parameters which users can individually define when creating pipelines.</li>
-<li>Data streams can be connected to any data processor or data sink that matches the capabilities of the stream.</li>
-</ul>
-<p>When users create pipelines by connecting a data stream with a data processor (or further processors), the pipeline manager <em>matches</em> the input stream of a data processor against its requirements.
-This matching is performed based on the _semantic description of each element.
-The semantic description (technically an RDF graph serialized as JSON-LD) can be best understood by seeing it as an envelope around a pipeline element.
-It only provides metadata information, while we don't rely on any RDF at runtime for exchanging events between pipeline elements.
-While RDF-based metadata ensures good understanding of stream capabilities, lightweight event formats at runtime (such as JSON or Thrift) ensure fast processing of events.</p>
-<p>Let's look at an example stream that produces a continuous stream of vehicle positions as illustrated below:</p>
-<p><img src="/docs/img/architecture/semantic-description-stream.png" alt="Semantic description of data streams"></p>
-<p>While the runtime layer produces plain JSON by submitting actual values of the position and the vehicle's plate number, the description layer describes various characteristics of the stream:
-For instance, it defines the event schema (including, besides the data type and the runtime name of each property also a more fine-grained meaning of the property), quality aspects (e.g., the measurement unit of a property or the frequency) and the grounding (e.g., the format used at runtime and the communication protocol used for transmitting events).</p>
-<p>The same accounts for data processors and data sinks:</p>
-<p><img src="/docs/img/architecture/semantic-description-processor.png" alt="Semantic description of data processor"></p>
-<p>Data processors (and, with some differences, data sinks) are annotated by providing metadata information on their required input and output.
-For instance, we can define minimum schema requirements (such as geospatial coordinates that need to be provided by any stream that is connected to a processor), but also required (minimum or maximum) quality levels and supported transport protocols and formats.
-In addition, required configuration parameters users can define during the pipeline definition process are provided by the semantic description.</p>
-<p>Once new pipeline elements are imported into StreamPipes, we store all information provided by the description layer in a central repository and use this information to guide useres through the pipeline definition process.</p>
-<p>Don't worry - you will never be required to model RDF by yourself.
-Our SDK provides convenience methods that help creating the description automatically.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2/dev-guide-introduction"><span class="arrow-prev">← </span><span>Introduction</span></a><a class="docs-next button" href="/docs/docs/0.55.2/dev-guide-development-environment"><span>Development Environment</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#semantic-description">Semantic description</a></li></ul> [...]
-                document.addEventListener('keyup', function(e) {
-                  if (e.target !== document.body) {
-                    return;
-                  }
-                  // keyCode for '/' (slash)
-                  if (e.keyCode === 191) {
-                    const search = document.getElementById('search_input_react');
-                    search && search.focus();
-                  }
-                });
-              </script><script>
-              var search = docsearch({
-                
-                apiKey: '0fedc89dddf2810657708b178e56ef02',
-                indexName: 'streampipes',
-                inputSelector: '#search_input_react',
-                algoliaOptions: {}
-              });
-            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2/dev-guide-development-environment.html b/docs/docs/0.55.2/dev-guide-development-environment.html
deleted file mode 100644
index 5f9e3ab..0000000
--- a/docs/docs/0.55.2/dev-guide-development-environment.html
+++ /dev/null
@@ -1,272 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Development Environment · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;In this section, we describe our recommended minimum setup for locally setting up a development instance of StreamPipes needed to develop, run and test new pipeline elements.&lt;/p&gt;
-"/><meta name="docsearch:version" content="0.55.2"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Development Environment · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;In this section, we describe our recommended minimum setup for locally setting up a development instance of StreamPipes needed to develop, run and test new [...]
-"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
-        document.addEventListener('DOMContentLoaded', function() {
-          addBackToTop(
-            {"zIndex":100}
-          )
-        });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Development Environment</h1></header><article><div><span><p>In this section, we describe our recommended minimum setup for locally setting up a development instance of StreamPipes needed to develop, run and test new pipeline elements.</p>
-<h2><a class="anchor" aria-hidden="true" id="ide-required-dev-tools"></a><a href="#ide-required-dev-tools" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
-<p>StreamPipes does not have specific requirements on the IDE - so feel free to choose the IDE of your choice.
-The only requirements in terms of development tools are that you have Java 8 and Maven installed.</p>
-<h2><a class="anchor" aria-hidden="true" id="docker-based-local-streampipes-instance"></a><a href="#docker-based-local-streampipes-instance" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2  [...]
-<p>In order to quickly test developed pipeline elements without needing to install all services required by StreamPipes, we provide a lightweight docker-compose file for development purposes.
-If you have Docker installed on your development machine, simply run the following docker-compose file, which has been successfully tested on both Linux and Windows-based operating systems.</p>
-<h3><a class="anchor" aria-hidden="true" id="docker-compose-file"></a><a href="#docker-compose-file" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
-<p><details class="info">
-<summary>docker-compose.yml</summary></p>
-<h4><a class="anchor" aria-hidden="true" id="docker-compose"></a><a href="#docker-compose" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<pre><code class="hljs css language-yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">"2"</span>
-<span class="hljs-attr">services:</span>
-  <span class="hljs-attr">consul:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">consul</span>
-    <span class="hljs-attr">environment:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_LOCAL_CONFIG={\"disable_update_check\": true}"</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_BIND_INTERFACE=eth0"</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_HTTP_ADDR=0.0.0.0"</span>
-    <span class="hljs-attr">entrypoint:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">consul</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">agent</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">-server</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">-bootstrap-expect=1</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">-data-dir=/consul/data</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">-node=consul-one</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">-bind={{</span> <span class="hljs-string">GetInterfaceIP</span> <span class="hljs-string">"eth0"</span> <span class="hljs-string">}}</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">-client=0.0.0.0</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">-enable-script-checks=true</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">-ui</span>
-    <span class="hljs-attr">volumes:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">./config/consul:/consul/data</span>
-    <span class="hljs-attr">ports:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"8500:8500"</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"8600:8600"</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-        <span class="hljs-attr">ipv4_address:</span> <span class="hljs-number">172.30</span><span class="hljs-number">.0</span><span class="hljs-number">.9</span>
-
-  <span class="hljs-attr">zookeeper:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">wurstmeister/zookeeper</span>
-    <span class="hljs-attr">ports:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"2181:2181"</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-
-  <span class="hljs-attr">kafka:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">wurstmeister/kafka:0.10.0.1</span>
-    <span class="hljs-attr">ports:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"9092:9092"</span>
-    <span class="hljs-attr">environment:</span>
-      <span class="hljs-attr">KAFKA_ADVERTISED_HOST_NAME:</span> <span class="hljs-comment">###TODO ADD HOSTNAME HERE ###</span>
-      <span class="hljs-attr">KAFKA_ZOOKEEPER_CONNECT:</span> <span class="hljs-string">zookeeper:2181</span>
-    <span class="hljs-attr">volumes:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">/var/run/docker.sock:/var/run/docker.sock</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-
-  <span class="hljs-attr">backend:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/ce/backend:SNAPSHOT</span>
-    <span class="hljs-attr">depends_on:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"consul"</span>
-    <span class="hljs-attr">ports:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"8030:8030"</span>
-    <span class="hljs-attr">volumes:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">./config:/root/.streampipes</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">./config/aduna:/root/.aduna</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-
-  <span class="hljs-attr">activemq:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/services/activemq</span>
-    <span class="hljs-attr">ports:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"61616:61616"</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"61614:61614"</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"8161:8161"</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-
-  <span class="hljs-attr">couchdb:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">couchdb</span>
-    <span class="hljs-attr">ports:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"5984:5984"</span>
-    <span class="hljs-attr">volumes:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">./config/couchdb/data:/usr/local/var/lib/couchdb</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-
-  <span class="hljs-attr">jobmanager:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/services/flink</span>
-    <span class="hljs-attr">ports:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"8081:8099"</span>
-    <span class="hljs-attr">command:</span> <span class="hljs-string">jobmanager</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-
-  <span class="hljs-attr">taskmanager:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/services/flink</span>
-    <span class="hljs-attr">command:</span> <span class="hljs-string">taskmanager</span>
-    <span class="hljs-attr">environment:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">FLINK_NUM_SLOTS=20</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-
-  <span class="hljs-attr">nginx:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/ui/dev</span>
-    <span class="hljs-attr">ports:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"80:80"</span>
-    <span class="hljs-attr">depends_on:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">backend</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-
-<span class="hljs-attr">networks:</span>
-  <span class="hljs-attr">spnet:</span>
-    <span class="hljs-attr">driver:</span> <span class="hljs-string">bridge</span>
-    <span class="hljs-attr">ipam:</span>
-     <span class="hljs-attr">config:</span>
-       <span class="hljs-bullet">-</span> <span class="hljs-attr">subnet:</span> <span class="hljs-number">172.30</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><span class="hljs-string">/16</span>
-         <span class="hljs-attr">gateway:</span> <span class="hljs-number">172.30</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span>
-</code></pre>
-<p></details></p>
-<p>Do not forget to replace the ##Add HOSTNAME## variable in the compose file with the hostname of your machine!</p>
-<h2><a class="anchor" aria-hidden="true" id="starter-projects"></a><a href="#starter-projects" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
-<p>Now, once you've started the development instance, you are ready to develop your very first pipeline element.
-Instead of starting from scratch, we recommend using either one of our sample projects as a starting point or one of our provided maven archetypes:</p>
-<h3><a class="anchor" aria-hidden="true" id="sample-projects"></a><a href="#sample-projects" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
-<p>We provide basic skeletons for defining data sources, data processors and data sinks in form of sample projects.
-These are available on Github as defined below. Just clone the project and change the corresponding groupId and artifactId as you like.</p>
-<ul>
-<li><p>templates-sources (<a href="https://github.com/streampipes/templates-sources">https://github.com/streampipes/templates-sources</a>)
-This sample project can be used to connect new data streams with StreamPipes.</p></li>
-<li><p>templates-flink (<a href="https://github.com/streampipes/templates-flink">https://github.com/streampipes/templates-flink</a>)
-This sample project can be used to define new data processors and data sinks for StreamPipes that are executed in an Apache Flink cluster.</p></li>
-</ul>
-<h3><a class="anchor" aria-hidden="true" id="maven-archetypes"></a><a href="#maven-archetypes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
-<p>(coming soon)</p>
-<h3><a class="anchor" aria-hidden="true" id="starting-from-scratch"></a><a href="#starting-from-scratch" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
-<p>In order to develop a new pipeline element from scratch, you need to create a new Maven project and import the following dependencies:</p>
-<p><details class="info">
-<summary>pom.xml</summary></p>
-<pre><code class="hljs"><span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-container-standalone<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-
-<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-sdk<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-
-<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-vocabulary<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-
-<span class="hljs-comment">&lt;!-- This dependency needs to be imported if you plan to connect a new data stream with StreamPipes --&gt;</span>
-<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-sources<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-
-<span class="hljs-comment">&lt;!-- This dependency needs to be imported if you plan to develop a new data processor or data sink using the Apache Flink wrapper --&gt;</span>
-<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-wrapper-flink<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-
-<span class="hljs-comment">&lt;!-- This dependency needs to be imported if you plan to develop a new data processor or data sink which is running directly on the JVM --&gt;</span>
-<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-wrapper-standalone<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-</code></pre>
-<p></details></p>
-<p>The following three dependencies are mandatory:</p>
-<ul>
-<li><code>streampipes-container-standalone</code>, defines that we are going to create a new pipeline element where the description will be accessible through an embedded web server.</li>
-<li><code>streampipes-sdk</code> imports the SDK which provides many convencience functions to create new pipeline elements.</li>
-<li><code>streampipes-vocabulary</code> imports various RDF vocabularies which are used by the SDK to auto-generate the semantic description of pipeline elements.</li>
-</ul>
-<p>The following three dependencies might be optional depending on the pipeline element type you plan to create:</p>
-<ul>
-<li><code>streampipes-sources</code> should be used in case you plan to connect a new data stream with StreamPipes.</li>
-<li><code>streampipes-wrapper-flink</code> should be used in case you plan to connect a new data processor or data sink that uses Apache Flink for processing events at runtime.</li>
-<li><code>streampipes-wrapper-standalone</code> should be used in case you plan to connect a new data processor or data sink that does not use an external processing engine. Events are directly processed in a single-host fashion.</li>
-</ul>
-<p>Finally, this dependency will provide abstract classes to define data sources and streams.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2/dev-guide-architecture"><span class="arrow-prev">← </span><span>Architecture</span></a><a class="docs-next button" href="/docs/docs/0.55.2/dev-guide-tutorial-sources"><span>Tutorial: Data Sources</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#ide-required-dev-tools">IDE &amp; required dev tools</a></li><li [...]
-                document.addEventListener('keyup', function(e) {
-                  if (e.target !== document.body) {
-                    return;
-                  }
-                  // keyCode for '/' (slash)
-                  if (e.keyCode === 191) {
-                    const search = document.getElementById('search_input_react');
-                    search && search.focus();
-                  }
-                });
-              </script><script>
-              var search = docsearch({
-                
-                apiKey: '0fedc89dddf2810657708b178e56ef02',
-                indexName: 'streampipes',
-                inputSelector: '#search_input_react',
-                algoliaOptions: {}
-              });
-            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2/dev-guide-development-environment/index.html b/docs/docs/0.55.2/dev-guide-development-environment/index.html
deleted file mode 100644
index 5f9e3ab..0000000
--- a/docs/docs/0.55.2/dev-guide-development-environment/index.html
+++ /dev/null
@@ -1,272 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Development Environment · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;In this section, we describe our recommended minimum setup for locally setting up a development instance of StreamPipes needed to develop, run and test new pipeline elements.&lt;/p&gt;
-"/><meta name="docsearch:version" content="0.55.2"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Development Environment · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;In this section, we describe our recommended minimum setup for locally setting up a development instance of StreamPipes needed to develop, run and test new [...]
-"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
-        document.addEventListener('DOMContentLoaded', function() {
-          addBackToTop(
-            {"zIndex":100}
-          )
-        });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Development Environment</h1></header><article><div><span><p>In this section, we describe our recommended minimum setup for locally setting up a development instance of StreamPipes needed to develop, run and test new pipeline elements.</p>
-<h2><a class="anchor" aria-hidden="true" id="ide-required-dev-tools"></a><a href="#ide-required-dev-tools" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
-<p>StreamPipes does not have specific requirements on the IDE - so feel free to choose the IDE of your choice.
-The only requirements in terms of development tools are that you have Java 8 and Maven installed.</p>
-<h2><a class="anchor" aria-hidden="true" id="docker-based-local-streampipes-instance"></a><a href="#docker-based-local-streampipes-instance" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2  [...]
-<p>In order to quickly test developed pipeline elements without needing to install all services required by StreamPipes, we provide a lightweight docker-compose file for development purposes.
-If you have Docker installed on your development machine, simply run the following docker-compose file, which has been successfully tested on both Linux and Windows-based operating systems.</p>
-<h3><a class="anchor" aria-hidden="true" id="docker-compose-file"></a><a href="#docker-compose-file" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
-<p><details class="info">
-<summary>docker-compose.yml</summary></p>
-<h4><a class="anchor" aria-hidden="true" id="docker-compose"></a><a href="#docker-compose" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<pre><code class="hljs css language-yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">"2"</span>
-<span class="hljs-attr">services:</span>
-  <span class="hljs-attr">consul:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">consul</span>
-    <span class="hljs-attr">environment:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_LOCAL_CONFIG={\"disable_update_check\": true}"</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_BIND_INTERFACE=eth0"</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"CONSUL_HTTP_ADDR=0.0.0.0"</span>
-    <span class="hljs-attr">entrypoint:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">consul</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">agent</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">-server</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">-bootstrap-expect=1</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">-data-dir=/consul/data</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">-node=consul-one</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">-bind={{</span> <span class="hljs-string">GetInterfaceIP</span> <span class="hljs-string">"eth0"</span> <span class="hljs-string">}}</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">-client=0.0.0.0</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">-enable-script-checks=true</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">-ui</span>
-    <span class="hljs-attr">volumes:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">./config/consul:/consul/data</span>
-    <span class="hljs-attr">ports:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"8500:8500"</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"8600:8600"</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-        <span class="hljs-attr">ipv4_address:</span> <span class="hljs-number">172.30</span><span class="hljs-number">.0</span><span class="hljs-number">.9</span>
-
-  <span class="hljs-attr">zookeeper:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">wurstmeister/zookeeper</span>
-    <span class="hljs-attr">ports:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"2181:2181"</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-
-  <span class="hljs-attr">kafka:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">wurstmeister/kafka:0.10.0.1</span>
-    <span class="hljs-attr">ports:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"9092:9092"</span>
-    <span class="hljs-attr">environment:</span>
-      <span class="hljs-attr">KAFKA_ADVERTISED_HOST_NAME:</span> <span class="hljs-comment">###TODO ADD HOSTNAME HERE ###</span>
-      <span class="hljs-attr">KAFKA_ZOOKEEPER_CONNECT:</span> <span class="hljs-string">zookeeper:2181</span>
-    <span class="hljs-attr">volumes:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">/var/run/docker.sock:/var/run/docker.sock</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-
-  <span class="hljs-attr">backend:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/ce/backend:SNAPSHOT</span>
-    <span class="hljs-attr">depends_on:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"consul"</span>
-    <span class="hljs-attr">ports:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"8030:8030"</span>
-    <span class="hljs-attr">volumes:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">./config:/root/.streampipes</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">./config/aduna:/root/.aduna</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-
-  <span class="hljs-attr">activemq:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/services/activemq</span>
-    <span class="hljs-attr">ports:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"61616:61616"</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"61614:61614"</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"8161:8161"</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-
-  <span class="hljs-attr">couchdb:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">couchdb</span>
-    <span class="hljs-attr">ports:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"5984:5984"</span>
-    <span class="hljs-attr">volumes:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">./config/couchdb/data:/usr/local/var/lib/couchdb</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-
-  <span class="hljs-attr">jobmanager:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/services/flink</span>
-    <span class="hljs-attr">ports:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"8081:8099"</span>
-    <span class="hljs-attr">command:</span> <span class="hljs-string">jobmanager</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-
-  <span class="hljs-attr">taskmanager:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/services/flink</span>
-    <span class="hljs-attr">command:</span> <span class="hljs-string">taskmanager</span>
-    <span class="hljs-attr">environment:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">FLINK_NUM_SLOTS=20</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-
-  <span class="hljs-attr">nginx:</span>
-    <span class="hljs-attr">image:</span> <span class="hljs-string">ipe-wim-gitlab.fzi.de:5000/streampipes/ui/dev</span>
-    <span class="hljs-attr">ports:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">"80:80"</span>
-    <span class="hljs-attr">depends_on:</span>
-      <span class="hljs-bullet">-</span> <span class="hljs-string">backend</span>
-    <span class="hljs-attr">networks:</span>
-      <span class="hljs-attr">spnet:</span>
-
-<span class="hljs-attr">networks:</span>
-  <span class="hljs-attr">spnet:</span>
-    <span class="hljs-attr">driver:</span> <span class="hljs-string">bridge</span>
-    <span class="hljs-attr">ipam:</span>
-     <span class="hljs-attr">config:</span>
-       <span class="hljs-bullet">-</span> <span class="hljs-attr">subnet:</span> <span class="hljs-number">172.30</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><span class="hljs-string">/16</span>
-         <span class="hljs-attr">gateway:</span> <span class="hljs-number">172.30</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span>
-</code></pre>
-<p></details></p>
-<p>Do not forget to replace the ##Add HOSTNAME## variable in the compose file with the hostname of your machine!</p>
-<h2><a class="anchor" aria-hidden="true" id="starter-projects"></a><a href="#starter-projects" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
-<p>Now, once you've started the development instance, you are ready to develop your very first pipeline element.
-Instead of starting from scratch, we recommend using either one of our sample projects as a starting point or one of our provided maven archetypes:</p>
-<h3><a class="anchor" aria-hidden="true" id="sample-projects"></a><a href="#sample-projects" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
-<p>We provide basic skeletons for defining data sources, data processors and data sinks in form of sample projects.
-These are available on Github as defined below. Just clone the project and change the corresponding groupId and artifactId as you like.</p>
-<ul>
-<li><p>templates-sources (<a href="https://github.com/streampipes/templates-sources">https://github.com/streampipes/templates-sources</a>)
-This sample project can be used to connect new data streams with StreamPipes.</p></li>
-<li><p>templates-flink (<a href="https://github.com/streampipes/templates-flink">https://github.com/streampipes/templates-flink</a>)
-This sample project can be used to define new data processors and data sinks for StreamPipes that are executed in an Apache Flink cluster.</p></li>
-</ul>
-<h3><a class="anchor" aria-hidden="true" id="maven-archetypes"></a><a href="#maven-archetypes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
-<p>(coming soon)</p>
-<h3><a class="anchor" aria-hidden="true" id="starting-from-scratch"></a><a href="#starting-from-scratch" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
-<p>In order to develop a new pipeline element from scratch, you need to create a new Maven project and import the following dependencies:</p>
-<p><details class="info">
-<summary>pom.xml</summary></p>
-<pre><code class="hljs"><span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-container-standalone<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-
-<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-sdk<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-
-<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-vocabulary<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-
-<span class="hljs-comment">&lt;!-- This dependency needs to be imported if you plan to connect a new data stream with StreamPipes --&gt;</span>
-<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-sources<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-
-<span class="hljs-comment">&lt;!-- This dependency needs to be imported if you plan to develop a new data processor or data sink using the Apache Flink wrapper --&gt;</span>
-<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-wrapper-flink<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-
-<span class="hljs-comment">&lt;!-- This dependency needs to be imported if you plan to develop a new data processor or data sink which is running directly on the JVM --&gt;</span>
-<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-wrapper-standalone<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-</code></pre>
-<p></details></p>
-<p>The following three dependencies are mandatory:</p>
-<ul>
-<li><code>streampipes-container-standalone</code>, defines that we are going to create a new pipeline element where the description will be accessible through an embedded web server.</li>
-<li><code>streampipes-sdk</code> imports the SDK which provides many convencience functions to create new pipeline elements.</li>
-<li><code>streampipes-vocabulary</code> imports various RDF vocabularies which are used by the SDK to auto-generate the semantic description of pipeline elements.</li>
-</ul>
-<p>The following three dependencies might be optional depending on the pipeline element type you plan to create:</p>
-<ul>
-<li><code>streampipes-sources</code> should be used in case you plan to connect a new data stream with StreamPipes.</li>
-<li><code>streampipes-wrapper-flink</code> should be used in case you plan to connect a new data processor or data sink that uses Apache Flink for processing events at runtime.</li>
-<li><code>streampipes-wrapper-standalone</code> should be used in case you plan to connect a new data processor or data sink that does not use an external processing engine. Events are directly processed in a single-host fashion.</li>
-</ul>
-<p>Finally, this dependency will provide abstract classes to define data sources and streams.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2/dev-guide-architecture"><span class="arrow-prev">← </span><span>Architecture</span></a><a class="docs-next button" href="/docs/docs/0.55.2/dev-guide-tutorial-sources"><span>Tutorial: Data Sources</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#ide-required-dev-tools">IDE &amp; required dev tools</a></li><li [...]
-                document.addEventListener('keyup', function(e) {
-                  if (e.target !== document.body) {
-                    return;
-                  }
-                  // keyCode for '/' (slash)
-                  if (e.keyCode === 191) {
-                    const search = document.getElementById('search_input_react');
-                    search && search.focus();
-                  }
-                });
-              </script><script>
-              var search = docsearch({
-                
-                apiKey: '0fedc89dddf2810657708b178e56ef02',
-                indexName: 'streampipes',
-                inputSelector: '#search_input_react',
-                algoliaOptions: {}
-              });
-            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2/dev-guide-introduction.html b/docs/docs/0.55.2/dev-guide-introduction.html
deleted file mode 100644
index 69c9bda..0000000
--- a/docs/docs/0.55.2/dev-guide-introduction.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Introduction · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;StreamPipes is an open platform which can be easily extended at runtime by adding new data streams, data processors and data sinks.&lt;/p&gt;
-"/><meta name="docsearch:version" content="0.55.2"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Introduction · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;StreamPipes is an open platform which can be easily extended at runtime by adding new data streams, data processors and data sinks.&lt;/p&gt;
-"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
-        document.addEventListener('DOMContentLoaded', function() {
-          addBackToTop(
-            {"zIndex":100}
-          )
-        });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Introduction</h1></header><article><div><span><p>StreamPipes is an open platform which can be easily extended at runtime by adding new data streams, data processors and data sinks.
-When developing new components, usually multiple elements, called <em>pipeline elements</em>, are bundled into a self-contained <em>pipeline element container</em>. This container is deployed as a standalone microservice. This service is self-descriptive and exposes its description (see below for a detailed explanation) to the StreamPipes management backend. Once the service is deployed, it can be installed using the StreamPipes UI and all elements provided by this service are ready to b [...]
-<p>To ease the extension of StreamPipes, we provide a powerful Software Development Kit (SDK) that allows you to define new pipeline elements for your StreamPipes instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="concepts"></a><a href="#concepts" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
-<p>In this section, we briefly describe the main concepts of StreamPipes. Although it might give an abstract overview, we are sure that many concepts will be more clear once you've created your very first pipeline element yourself. So check out our tutorials!</p>
-<h3><a class="anchor" aria-hidden="true" id="data-stream"></a><a href="#data-stream" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
-<p>A <em>Data Stream</em> is the main concept to describe the source of a pipeline. <em>DataStreams</em> consist of
-an RDF <em>description</em> (which will be generated automatically when using the SDK) and a runtime
-<em>implementation</em>. The description includes information on the <em>schema</em> of a data stream, e.g., measurement properties the payload of a stream provides.
-Furthermore, the description contains information on the <em>grounding</em>, such as the transport format (e.g., JSON) and transport protoocol (e.g., MQTT or Kafka).
-One or more data streams are assigned to a <em>Data Source</em> to improve discovery of existing streams.</p>
-<h3><a class="anchor" aria-hidden="true" id="data-processor"></a><a href="#data-processor" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p><em>Data Processors</em> transform on or more input event streams to an output event stream. Data processors can be stateless (e.g., filter operations on every event of an input stream) or stateful (e.g., time-based aggregations using sliding windows).
-Similar to data streams, processors consist of an RDF <em>description</em> and a corresponding <em>implementation</em>. The description is being used by the StreamPipes backend in order to determine the compatibility of a data processor and an input event stream and includes information the required minimum event schema as well as required user input and the definition of the output event stream.</p>
-<p>The implementation of a data processor can be defined using a set of provided <em>runtime wrappers</em>. These wrappers define where computation logic actually takes place once a pipeline was started. We currently provide runtime wrappers for various Big Data processing engines (e.g., Apache Flink) and lightweight standalone processors.</p>
-<h3><a class="anchor" aria-hidden="true" id="data-sink"></a><a href="#data-sink" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
-<p>The concept of <em>Data Sinks</em> is very similar to the concept of data processors with the exception that sinks do not produce any output streams.
-Therefore, sinks are used in StreamPipes to mark the end of a pipeline and reflect 3rd party applications, notifications or dashboard components.</p>
-<h3><a class="anchor" aria-hidden="true" id="static-property"></a><a href="#static-property" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
-<p>Some data processors or data sinks might require input from users when pipelines are created using these elements.
-For instance, a generic filter component might require information on the filter operation and a threshold value.
-Such required user input can be modeled by defining <em>static properties</em>. Static properties can be defined in many ways, e.g., plain text input, selections (e.g., radio buttons) or can be linked to separately stored domain knowledge.
-The SDK contains many convenient functions that help you defining static properties.</p>
-<h3><a class="anchor" aria-hidden="true" id="output-strategy"></a><a href="#output-strategy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
-<p>As mentioned above, data processors also define the output event schema. However, as data processors in StreamPipes are often generic and can therefore be linked to any event stream that matches the input requirement of a data processor, the exact output schema is not known in the development phase when a data processor is defined.
-Therefore, data processors define their output using <em>output strategies</em>. Such strategies describe the transformation process, i.e., how an input stream is transformed to an output stream.
-Multiple pre-defined output strategies exist that you can choose depending on the behaviour of a data processor.
-For instance, the output schema of a filter component is usually similar to the input schema, so you would use a <em>KeepOutputStrategy</em>.
-On the other hand, an enrichment component usually adds additional properties to an input schema - this can be defined using a <em>AppendOutputStrategy</em>.
-Sometimes you want to let the user define the output schema. In this case, a <em>CustomOutputStrategy</em> can be defined.</p>
-<h2><a class="anchor" aria-hidden="true" id="clients"></a><a href="#clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<p>As stated in the beginning, pipeline element containers are deployed as self-contained microservices. The client types describes the environment this service is running in.
-Currently supported clients are <em>standalone</em>, which defines a standalone service that contains both the description and implementation part (which is often submitted to a computing cluster prior to pipeline execution) in addition to an embedded Jetty web server which creates a fat jar file, and <em>embedded</em>, which creates a war file that can be imported into an existing application server.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-next button" href="/docs/docs/0.55.2/dev-guide-architecture"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#concepts">Concepts</a><ul class="toc-headings"><li><a href="#data-stream">Data Stream</a></li><li><a href="#data-processor">Data Processor</a></li><li><a href="#data-sink">Data Sink</a></li><li><a href="#static-proper [...]
-                document.addEventListener('keyup', function(e) {
-                  if (e.target !== document.body) {
-                    return;
-                  }
-                  // keyCode for '/' (slash)
-                  if (e.keyCode === 191) {
-                    const search = document.getElementById('search_input_react');
-                    search && search.focus();
-                  }
-                });
-              </script><script>
-              var search = docsearch({
-                
-                apiKey: '0fedc89dddf2810657708b178e56ef02',
-                indexName: 'streampipes',
-                inputSelector: '#search_input_react',
-                algoliaOptions: {}
-              });
-            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2/dev-guide-introduction/index.html b/docs/docs/0.55.2/dev-guide-introduction/index.html
deleted file mode 100644
index 69c9bda..0000000
--- a/docs/docs/0.55.2/dev-guide-introduction/index.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Introduction · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;StreamPipes is an open platform which can be easily extended at runtime by adding new data streams, data processors and data sinks.&lt;/p&gt;
-"/><meta name="docsearch:version" content="0.55.2"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Introduction · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;StreamPipes is an open platform which can be easily extended at runtime by adding new data streams, data processors and data sinks.&lt;/p&gt;
-"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
-        document.addEventListener('DOMContentLoaded', function() {
-          addBackToTop(
-            {"zIndex":100}
-          )
-        });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Introduction</h1></header><article><div><span><p>StreamPipes is an open platform which can be easily extended at runtime by adding new data streams, data processors and data sinks.
-When developing new components, usually multiple elements, called <em>pipeline elements</em>, are bundled into a self-contained <em>pipeline element container</em>. This container is deployed as a standalone microservice. This service is self-descriptive and exposes its description (see below for a detailed explanation) to the StreamPipes management backend. Once the service is deployed, it can be installed using the StreamPipes UI and all elements provided by this service are ready to b [...]
-<p>To ease the extension of StreamPipes, we provide a powerful Software Development Kit (SDK) that allows you to define new pipeline elements for your StreamPipes instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="concepts"></a><a href="#concepts" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
-<p>In this section, we briefly describe the main concepts of StreamPipes. Although it might give an abstract overview, we are sure that many concepts will be more clear once you've created your very first pipeline element yourself. So check out our tutorials!</p>
-<h3><a class="anchor" aria-hidden="true" id="data-stream"></a><a href="#data-stream" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
-<p>A <em>Data Stream</em> is the main concept to describe the source of a pipeline. <em>DataStreams</em> consist of
-an RDF <em>description</em> (which will be generated automatically when using the SDK) and a runtime
-<em>implementation</em>. The description includes information on the <em>schema</em> of a data stream, e.g., measurement properties the payload of a stream provides.
-Furthermore, the description contains information on the <em>grounding</em>, such as the transport format (e.g., JSON) and transport protoocol (e.g., MQTT or Kafka).
-One or more data streams are assigned to a <em>Data Source</em> to improve discovery of existing streams.</p>
-<h3><a class="anchor" aria-hidden="true" id="data-processor"></a><a href="#data-processor" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p><em>Data Processors</em> transform on or more input event streams to an output event stream. Data processors can be stateless (e.g., filter operations on every event of an input stream) or stateful (e.g., time-based aggregations using sliding windows).
-Similar to data streams, processors consist of an RDF <em>description</em> and a corresponding <em>implementation</em>. The description is being used by the StreamPipes backend in order to determine the compatibility of a data processor and an input event stream and includes information the required minimum event schema as well as required user input and the definition of the output event stream.</p>
-<p>The implementation of a data processor can be defined using a set of provided <em>runtime wrappers</em>. These wrappers define where computation logic actually takes place once a pipeline was started. We currently provide runtime wrappers for various Big Data processing engines (e.g., Apache Flink) and lightweight standalone processors.</p>
-<h3><a class="anchor" aria-hidden="true" id="data-sink"></a><a href="#data-sink" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
-<p>The concept of <em>Data Sinks</em> is very similar to the concept of data processors with the exception that sinks do not produce any output streams.
-Therefore, sinks are used in StreamPipes to mark the end of a pipeline and reflect 3rd party applications, notifications or dashboard components.</p>
-<h3><a class="anchor" aria-hidden="true" id="static-property"></a><a href="#static-property" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
-<p>Some data processors or data sinks might require input from users when pipelines are created using these elements.
-For instance, a generic filter component might require information on the filter operation and a threshold value.
-Such required user input can be modeled by defining <em>static properties</em>. Static properties can be defined in many ways, e.g., plain text input, selections (e.g., radio buttons) or can be linked to separately stored domain knowledge.
-The SDK contains many convenient functions that help you defining static properties.</p>
-<h3><a class="anchor" aria-hidden="true" id="output-strategy"></a><a href="#output-strategy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
-<p>As mentioned above, data processors also define the output event schema. However, as data processors in StreamPipes are often generic and can therefore be linked to any event stream that matches the input requirement of a data processor, the exact output schema is not known in the development phase when a data processor is defined.
-Therefore, data processors define their output using <em>output strategies</em>. Such strategies describe the transformation process, i.e., how an input stream is transformed to an output stream.
-Multiple pre-defined output strategies exist that you can choose depending on the behaviour of a data processor.
-For instance, the output schema of a filter component is usually similar to the input schema, so you would use a <em>KeepOutputStrategy</em>.
-On the other hand, an enrichment component usually adds additional properties to an input schema - this can be defined using a <em>AppendOutputStrategy</em>.
-Sometimes you want to let the user define the output schema. In this case, a <em>CustomOutputStrategy</em> can be defined.</p>
-<h2><a class="anchor" aria-hidden="true" id="clients"></a><a href="#clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<p>As stated in the beginning, pipeline element containers are deployed as self-contained microservices. The client types describes the environment this service is running in.
-Currently supported clients are <em>standalone</em>, which defines a standalone service that contains both the description and implementation part (which is often submitted to a computing cluster prior to pipeline execution) in addition to an embedded Jetty web server which creates a fat jar file, and <em>embedded</em>, which creates a war file that can be imported into an existing application server.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-next button" href="/docs/docs/0.55.2/dev-guide-architecture"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#concepts">Concepts</a><ul class="toc-headings"><li><a href="#data-stream">Data Stream</a></li><li><a href="#data-processor">Data Processor</a></li><li><a href="#data-sink">Data Sink</a></li><li><a href="#static-proper [...]
-                document.addEventListener('keyup', function(e) {
-                  if (e.target !== document.body) {
-                    return;
-                  }
-                  // keyCode for '/' (slash)
-                  if (e.keyCode === 191) {
-                    const search = document.getElementById('search_input_react');
-                    search && search.focus();
-                  }
-                });
-              </script><script>
-              var search = docsearch({
-                
-                apiKey: '0fedc89dddf2810657708b178e56ef02',
-                indexName: 'streampipes',
-                inputSelector: '#search_input_react',
-                algoliaOptions: {}
-              });
-            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2/dev-guide-sdk-guide-processors.html b/docs/docs/0.55.2/dev-guide-sdk-guide-processors.html
deleted file mode 100644
index 3fc1693..0000000
--- a/docs/docs/0.55.2/dev-guide-sdk-guide-processors.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>SDK Guide Processors · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot;true&quot; class=&quot;hash-li [...]
-"/><meta name="docsearch:version" content="0.55.2"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="SDK Guide Processors · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot [...]
-"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
-        document.addEventListener('DOMContentLoaded', function() {
-          addBackToTop(
-            {"zIndex":100}
-          )
-        });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">SDK Guide Processors</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3 [...]
-<p>(coming soon, please check the <a href="/docs/docs/0.55.2/dev-guide-tutorial-processors">tutorial</a> to learn how to define data processors)</p>
-<h2><a class="anchor" aria-hidden="true" id="sdk-reference"></a><a href="#sdk-reference" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>The complete SDK reference for defining data processors will follow soon. Please check the SDK's Javadoc for now!</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2/dev-guide-sdk-guide-sources"><span class="arrow-prev">← </span><span>SDK Guide: Data Sources</span></a><a class="docs-next button" href="/docs/docs/0.55.2/dev-guide-sdk-guide-sinks"><span>SDK Guide: Data Sinks</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#project-setup">Project Setup</a></li><li><a href=" [...]
-                document.addEventListener('keyup', function(e) {
-                  if (e.target !== document.body) {
-                    return;
-                  }
-                  // keyCode for '/' (slash)
-                  if (e.keyCode === 191) {
-                    const search = document.getElementById('search_input_react');
-                    search && search.focus();
-                  }
-                });
-              </script><script>
-              var search = docsearch({
-                
-                apiKey: '0fedc89dddf2810657708b178e56ef02',
-                indexName: 'streampipes',
-                inputSelector: '#search_input_react',
-                algoliaOptions: {}
-              });
-            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2/dev-guide-sdk-guide-processors/index.html b/docs/docs/0.55.2/dev-guide-sdk-guide-processors/index.html
deleted file mode 100644
index 3fc1693..0000000
--- a/docs/docs/0.55.2/dev-guide-sdk-guide-processors/index.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>SDK Guide Processors · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot;true&quot; class=&quot;hash-li [...]
-"/><meta name="docsearch:version" content="0.55.2"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="SDK Guide Processors · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot [...]
-"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
-        document.addEventListener('DOMContentLoaded', function() {
-          addBackToTop(
-            {"zIndex":100}
-          )
-        });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">SDK Guide Processors</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3 [...]
-<p>(coming soon, please check the <a href="/docs/docs/0.55.2/dev-guide-tutorial-processors">tutorial</a> to learn how to define data processors)</p>
-<h2><a class="anchor" aria-hidden="true" id="sdk-reference"></a><a href="#sdk-reference" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>The complete SDK reference for defining data processors will follow soon. Please check the SDK's Javadoc for now!</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2/dev-guide-sdk-guide-sources"><span class="arrow-prev">← </span><span>SDK Guide: Data Sources</span></a><a class="docs-next button" href="/docs/docs/0.55.2/dev-guide-sdk-guide-sinks"><span>SDK Guide: Data Sinks</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#project-setup">Project Setup</a></li><li><a href=" [...]
-                document.addEventListener('keyup', function(e) {
-                  if (e.target !== document.body) {
-                    return;
-                  }
-                  // keyCode for '/' (slash)
-                  if (e.keyCode === 191) {
-                    const search = document.getElementById('search_input_react');
-                    search && search.focus();
-                  }
-                });
-              </script><script>
-              var search = docsearch({
-                
-                apiKey: '0fedc89dddf2810657708b178e56ef02',
-                indexName: 'streampipes',
-                inputSelector: '#search_input_react',
-                algoliaOptions: {}
-              });
-            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2/dev-guide-sdk-guide-sinks.html b/docs/docs/0.55.2/dev-guide-sdk-guide-sinks.html
deleted file mode 100644
index 7a865ad..0000000
--- a/docs/docs/0.55.2/dev-guide-sdk-guide-sinks.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>SDK Guide Sinks · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&qu [...]
-"/><meta name="docsearch:version" content="0.55.2"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="SDK Guide Sinks · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot;true [...]
-"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
-        document.addEventListener('DOMContentLoaded', function() {
-          addBackToTop(
-            {"zIndex":100}
-          )
-        });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">SDK Guide Sinks</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69 [...]
-<p>(coming soon, please check the <a href="/docs/docs/0.55.2/dev-guide-tutorial-processors">tutorial</a> to learn how to define sinks)</p>
-<h2><a class="anchor" aria-hidden="true" id="sdk-reference"></a><a href="#sdk-reference" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>The complete SDK reference for defining data sinks will follow soon. Please check the SDK's Javadoc for now!</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2/dev-guide-sdk-guide-processors"><span class="arrow-prev">← </span><span>SDK Guide: Data Processors</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#project-setup">Project Setup</a></li><li><a href="#sdk-reference">SDK reference</a></li></ul></nav></div><div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/docs/" clas [...]
-                document.addEventListener('keyup', function(e) {
-                  if (e.target !== document.body) {
-                    return;
-                  }
-                  // keyCode for '/' (slash)
-                  if (e.keyCode === 191) {
-                    const search = document.getElementById('search_input_react');
-                    search && search.focus();
-                  }
-                });
-              </script><script>
-              var search = docsearch({
-                
-                apiKey: '0fedc89dddf2810657708b178e56ef02',
-                indexName: 'streampipes',
-                inputSelector: '#search_input_react',
-                algoliaOptions: {}
-              });
-            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2/dev-guide-sdk-guide-sinks/index.html b/docs/docs/0.55.2/dev-guide-sdk-guide-sinks/index.html
deleted file mode 100644
index 7a865ad..0000000
--- a/docs/docs/0.55.2/dev-guide-sdk-guide-sinks/index.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>SDK Guide Sinks · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&qu [...]
-"/><meta name="docsearch:version" content="0.55.2"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="SDK Guide Sinks · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot;true [...]
-"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
-        document.addEventListener('DOMContentLoaded', function() {
-          addBackToTop(
-            {"zIndex":100}
-          )
-        });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">SDK Guide Sinks</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69 [...]
-<p>(coming soon, please check the <a href="/docs/docs/0.55.2/dev-guide-tutorial-processors">tutorial</a> to learn how to define sinks)</p>
-<h2><a class="anchor" aria-hidden="true" id="sdk-reference"></a><a href="#sdk-reference" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>The complete SDK reference for defining data sinks will follow soon. Please check the SDK's Javadoc for now!</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2/dev-guide-sdk-guide-processors"><span class="arrow-prev">← </span><span>SDK Guide: Data Processors</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#project-setup">Project Setup</a></li><li><a href="#sdk-reference">SDK reference</a></li></ul></nav></div><div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/docs/" clas [...]
-                document.addEventListener('keyup', function(e) {
-                  if (e.target !== document.body) {
-                    return;
-                  }
-                  // keyCode for '/' (slash)
-                  if (e.keyCode === 191) {
-                    const search = document.getElementById('search_input_react');
-                    search && search.focus();
-                  }
-                });
-              </script><script>
-              var search = docsearch({
-                
-                apiKey: '0fedc89dddf2810657708b178e56ef02',
-                indexName: 'streampipes',
-                inputSelector: '#search_input_react',
-                algoliaOptions: {}
-              });
-            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2/dev-guide-sdk-guide-sources.html b/docs/docs/0.55.2/dev-guide-sdk-guide-sources.html
deleted file mode 100644
index 2b5d88c..0000000
--- a/docs/docs/0.55.2/dev-guide-sdk-guide-sources.html
+++ /dev/null
@@ -1,138 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>SDK Guide Sources · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link& [...]
-"/><meta name="docsearch:version" content="0.55.2"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="SDK Guide Sources · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot;tr [...]
-"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
-        document.addEventListener('DOMContentLoaded', function() {
-          addBackToTop(
-            {"zIndex":100}
-          )
-        });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">SDK Guide Sources</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1. [...]
-<p>Open the IDE of your choice and create a new maven project. Add the following dependencies to your pom file:</p>
-<p><details class="info">
-<summary>pom.xml</summary></p>
-<pre><code class="hljs css language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-container-standalone<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-
-<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-sdk<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-
-<span class="hljs-comment">&lt;!-- This dependency needs to be imported if you plan to connect a new data stream with StreamPipes --&gt;</span>
-<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-sources<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-</code></pre>
-<p></details></p>
-<p>Now you need to create three new classes:</p>
-<p>First, create a new class <code>MyStreamController</code> as follows:</p>
-<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.streampipes.model.SpDataStream;
-<span class="hljs-keyword">import</span> org.streampipes.model.graph.DataSourceDescription;
-<span class="hljs-keyword">import</span> org.streampipes.sources.AbstractAlreadyExistingStream;
-
-<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyStreamController</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">AbstractAlreadyExistingStream</span> </span>{
-
-  <span class="hljs-meta">@Override</span>
-  <span class="hljs-function"><span class="hljs-keyword">public</span> SpDataStream <span class="hljs-title">declareModel</span><span class="hljs-params">(DataSourceDescription sep)</span> </span>{
-
-  }
-}
-</code></pre>
-<p>Next, create a new class <code>MyStreamSource</code> as follows:</p>
-<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.streampipes.container.declarer.EventStreamDeclarer;
-<span class="hljs-keyword">import</span> org.streampipes.container.declarer.SemanticEventProducerDeclarer;
-<span class="hljs-keyword">import</span> org.streampipes.model.graph.DataSourceDescription;
-
-<span class="hljs-keyword">import</span> java.util.List;
-
-<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyStreamSource</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">SemanticEventProducerDeclarer</span> </span>{
-
-    <span class="hljs-meta">@Override</span>
-    <span class="hljs-function"><span class="hljs-keyword">public</span> DataSourceDescription <span class="hljs-title">declareModel</span><span class="hljs-params">()</span> </span>{
-      <span class="hljs-keyword">return</span> <span class="hljs-keyword">null</span>;
-    }
-
-    <span class="hljs-meta">@Override</span>
-    <span class="hljs-function"><span class="hljs-keyword">public</span> List&lt;EventStreamDeclarer&gt; <span class="hljs-title">getEventStreams</span><span class="hljs-params">()</span> </span>{
-        <span class="hljs-keyword">return</span> <span class="hljs-keyword">null</span>;
-    }
-}
-</code></pre>
-<h2><a class="anchor" aria-hidden="true" id="sdk-reference"></a><a href="#sdk-reference" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>The complete SDK reference for defining data processors will follow soon. Please check the SDK's Javadoc for now!</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2/dev-guide-tutorial-processors"><span class="arrow-prev">← </span><span>Tutorial: Data Processors</span></a><a class="docs-next button" href="/docs/docs/0.55.2/dev-guide-sdk-guide-processors"><span>SDK Guide: Data Processors</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#project-setup">Project Setup</a></li [...]
-                document.addEventListener('keyup', function(e) {
-                  if (e.target !== document.body) {
-                    return;
-                  }
-                  // keyCode for '/' (slash)
-                  if (e.keyCode === 191) {
-                    const search = document.getElementById('search_input_react');
-                    search && search.focus();
-                  }
-                });
-              </script><script>
-              var search = docsearch({
-                
-                apiKey: '0fedc89dddf2810657708b178e56ef02',
-                indexName: 'streampipes',
-                inputSelector: '#search_input_react',
-                algoliaOptions: {}
-              });
-            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2/dev-guide-sdk-guide-sources/index.html b/docs/docs/0.55.2/dev-guide-sdk-guide-sources/index.html
deleted file mode 100644
index 2b5d88c..0000000
--- a/docs/docs/0.55.2/dev-guide-sdk-guide-sources/index.html
+++ /dev/null
@@ -1,138 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>SDK Guide Sources · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link& [...]
-"/><meta name="docsearch:version" content="0.55.2"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="SDK Guide Sources · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;project-setup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#project-setup&quot; aria-hidden=&quot;tr [...]
-"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
-        document.addEventListener('DOMContentLoaded', function() {
-          addBackToTop(
-            {"zIndex":100}
-          )
-        });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">SDK Guide Sources</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1. [...]
-<p>Open the IDE of your choice and create a new maven project. Add the following dependencies to your pom file:</p>
-<p><details class="info">
-<summary>pom.xml</summary></p>
-<pre><code class="hljs css language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-container-standalone<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-
-<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-sdk<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-
-<span class="hljs-comment">&lt;!-- This dependency needs to be imported if you plan to connect a new data stream with StreamPipes --&gt;</span>
-<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.streampipes<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>streampipes-sources<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>0.50.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
-<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
-</code></pre>
-<p></details></p>
-<p>Now you need to create three new classes:</p>
-<p>First, create a new class <code>MyStreamController</code> as follows:</p>
-<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.streampipes.model.SpDataStream;
-<span class="hljs-keyword">import</span> org.streampipes.model.graph.DataSourceDescription;
-<span class="hljs-keyword">import</span> org.streampipes.sources.AbstractAlreadyExistingStream;
-
-<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyStreamController</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">AbstractAlreadyExistingStream</span> </span>{
-
-  <span class="hljs-meta">@Override</span>
-  <span class="hljs-function"><span class="hljs-keyword">public</span> SpDataStream <span class="hljs-title">declareModel</span><span class="hljs-params">(DataSourceDescription sep)</span> </span>{
-
-  }
-}
-</code></pre>
-<p>Next, create a new class <code>MyStreamSource</code> as follows:</p>
-<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.streampipes.container.declarer.EventStreamDeclarer;
-<span class="hljs-keyword">import</span> org.streampipes.container.declarer.SemanticEventProducerDeclarer;
-<span class="hljs-keyword">import</span> org.streampipes.model.graph.DataSourceDescription;
-
-<span class="hljs-keyword">import</span> java.util.List;
-
-<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyStreamSource</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">SemanticEventProducerDeclarer</span> </span>{
-
-    <span class="hljs-meta">@Override</span>
-    <span class="hljs-function"><span class="hljs-keyword">public</span> DataSourceDescription <span class="hljs-title">declareModel</span><span class="hljs-params">()</span> </span>{
-      <span class="hljs-keyword">return</span> <span class="hljs-keyword">null</span>;
-    }
-
-    <span class="hljs-meta">@Override</span>
-    <span class="hljs-function"><span class="hljs-keyword">public</span> List&lt;EventStreamDeclarer&gt; <span class="hljs-title">getEventStreams</span><span class="hljs-params">()</span> </span>{
-        <span class="hljs-keyword">return</span> <span class="hljs-keyword">null</span>;
-    }
-}
-</code></pre>
-<h2><a class="anchor" aria-hidden="true" id="sdk-reference"></a><a href="#sdk-reference" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>The complete SDK reference for defining data processors will follow soon. Please check the SDK's Javadoc for now!</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/docs/0.55.2/dev-guide-tutorial-processors"><span class="arrow-prev">← </span><span>Tutorial: Data Processors</span></a><a class="docs-next button" href="/docs/docs/0.55.2/dev-guide-sdk-guide-processors"><span>SDK Guide: Data Processors</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#project-setup">Project Setup</a></li [...]
-                document.addEventListener('keyup', function(e) {
-                  if (e.target !== document.body) {
-                    return;
-                  }
-                  // keyCode for '/' (slash)
-                  if (e.keyCode === 191) {
-                    const search = document.getElementById('search_input_react');
-                    search && search.focus();
-                  }
-                });
-              </script><script>
-              var search = docsearch({
-                
-                apiKey: '0fedc89dddf2810657708b178e56ef02',
-                indexName: 'streampipes',
-                inputSelector: '#search_input_react',
-                algoliaOptions: {}
-              });
-            </script></body></html>
\ No newline at end of file
diff --git a/docs/docs/0.55.2/dev-guide-tutorial-processors.html b/docs/docs/0.55.2/dev-guide-tutorial-processors.html
deleted file mode 100644
index 3cfa7a8..0000000
--- a/docs/docs/0.55.2/dev-guide-tutorial-processors.html
+++ /dev/null
@@ -1,440 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Tutorial: Data Processors · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;In this tutorial, we will add a new data processor using the Apache Flink wrapper.&lt;/p&gt;
-"/><meta name="docsearch:version" content="0.55.2"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Tutorial: Data Processors · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docs.streampipes.org/docs/"/><meta property="og:description" content="&lt;p&gt;In this tutorial, we will add a new data processor using the Apache Flink wrapper.&lt;/p&gt;
-"/><meta property="og:image" content="https://docs.streampipes.org/docs/img/favicon.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docs.streampipes.org/docs/img/docusaurus.png"/><link rel="shortcut icon" href="/docs/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link re [...]
-        document.addEventListener('DOMContentLoaded', function() {
-          addBackToTop(
-            {"zIndex":100}
-          )
-        });
-        </script><link rel="stylesheet" href="/docs/css/prism.css"/><link rel="stylesheet" href="/docs/css/main.css"/><script src="/docs/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/docs/"><img class="logo" src="/docs/img/sp-logo-color-docs.png" alt="StreamPipes"/></a><a href="/docs/versions"><h3>0.55.2</h3></a><div class="navigationWrapper navigationSlider"><nav class [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Tutorial: Data Processors</h1></header><article><div><span><p>In this tutorial, we will add a new data processor using the Apache Flink wrapper.</p>
-<p>From an architectural point of view, we will create a self-contained service that includes the description of the data processor and a Flink-compatible implementation.
-Once a pipeline is started that uses this data processor, the implementation is submitted to an Apache Flink cluster.</p>
-<p>If this is the first time you are extending StreamPipes, we recommend doing the <a href="/docs/docs/0.55.2/dev-guide-tutorial-sources">data source tutorial</a> first.</p>
-<h2><a class="anchor" aria-hidden="true" id="objective"></a><a href="#objective" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
-<p>We are going to create a new data processor that realized a simple geofencing algorithm - we detect vehicles that enter a specified radius around a user-defined location.
-This pipeline element will be a generic element that works with any event stream that provides geospatial coordinates in form of a latitude/longitude pair.</p>
-<p>The algorithm outputs every location event once the position has entered the geofence.</p>
-<div class="admonition note">
-<div class="admonition-title">Note</div>
-<p>The implementation in this tutorial is pretty simple - our processor will fire an event every time the GPS location is inside the geofence.
-       In a real-world application, you would probably want to define a pattern that recognizes the _first_ event a vehicle enters the geofence.<br/>
-       This can be easily done using a CEP library, e.g., Apache Flink CEP.</p>
-</div>
-<h2><a class="anchor" aria-hidden="true" id="project-setup"></a><a href="#project-setup" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>Similar to the data source tutorial, there are two options to start a new project (option 1 is recommended):</p>
-<p><strong>Option 1: Using a template project</strong></p>
-<p>Clone the following project from our Github repo: <a href="https://github.com/streampipes/templates-flink">https://github.com/streampipes/templates-flink</a></p>
-<p>Import the project into an IDE of your choice.
-You should see a structure like this:</p>
-<p><img src="/docs/img/tutorial-processors/project-structure-processor.PNG" alt="Project Structure Data Processor"></p>
-<p>Rename the classes (or create new classes by copying these files) as follows:</p>
-<ul>
-<li><code>ProcessorTemplateController.java</code> to <code>GeofencingController.java</code></li>
-<li><code>ProcessorTemplateFlatMap.java</code> to <code>GeofencingProcessor.java</code></li>
-<li><code>ProcessorTemplateParameters.java</code> to <code>GeofencingParameters.java</code></li>
-<li><code>ProcessorTemplateProgram.java</code> to <code>GeofencingProgram.java</code></li>
-</ul>
-<div class="admonition tip">
-<div class="admonition-title">Tip</div>
-<p>Besides the basic project skeleton, the sample project also includes an example Dockerfile you can use to package your application into a Docker container.</p>
-</div>
-<p><strong>Option 2: Start a new project from scratch</strong></p>
-<p>If you want to start from scratch, we refer to the <a href="/docs/docs/0.55.2/dev-guide-sdk-guide-processors">Processor SDK guide</a> which provides instructions on the general project setup.</p>
-<h2><a class="anchor" aria-hidden="true" id="adding-data-processor-requirements"></a><a href="#adding-data-processor-requirements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5 [...]
-<p>Now we will add a new data stream definition.
-First, open the class <code>GeofencingController</code> which should look as follows:</p>
-<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.streampipes.model.graph.DataProcessorDescription;
-<span class="hljs-keyword">import</span> org.streampipes.model.graph.DataProcessorInvocation;
-<span class="hljs-keyword">import</span> org.streampipes.wrapper.flink.AbstractFlinkAgentDeclarer;
-<span class="hljs-keyword">import</span> org.streampipes.wrapper.flink.FlinkSepaRuntime;
-
-<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GeofencingController</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">FlinkDataProcessorDeclarer</span>&lt;<span class="hljs-title">GeofencingParameters</span>&gt; </span>{
-
-    <span class="hljs-meta">@Override</span>
-    <span class="hljs-function"><span class="hljs-keyword">public</span> DataProcessorDescription <span class="hljs-title">declareModel</span><span class="hljs-params">()</span> </span>{
-
-    }
-
-    <span class="hljs-meta">@Override</span>
-    <span class="hljs-function"><span class="hljs-keyword">protected</span> FlinkDataProcessorRuntime&lt;GeofencingParameters&gt; <span class="hljs-title">getRuntime</span><span class="hljs-params">(DataProcessorInvocation sepaInvocation)</span> </span>{
-
-    }
-}
-</code></pre>
-<p>In this class, we need to implement two methods: The <code>declareModel</code> method is used to define abstract stream requirements such as event properties that must be present in any input stream that is later connected to the element using the StreamPipes UI.
-The second method, <code>getRuntime</code> is used to create and deploy the parameterized Flink program once a pipeline using this element is started.</p>
-<p>Similar to data sources, the SDK provides a builder class to generate the description for data processors.
-add the following lines to the <code>declareModel</code> method:</p>
-<pre><code class="hljs css language-java"><span class="hljs-keyword">return</span> ProcessingElementBuilder.create(<span class="hljs-string">"geofencing-flink"</span>, <span class="hljs-string">"Geofencing"</span>, <span class="hljs-string">"A simple geofencing data processor "</span> +
-            <span class="hljs-string">"using the Apache Flink wrapper"</span>)
-</code></pre>
-<p>This creates a new data processor with the ID, title and description assigned to the element builder.
-Next, we add some <em>stream requirements</em> to the description. As we'd like to develop a generic pipeline element that works with any event that provides a lat/lng pair, we define two stream requirements as stated below:</p>
-<pre><code class="hljs css language-java">.requiredStream(StreamRequirementsBuilder
-    .create()
-    .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lat),
-            Labels.from(<span class="hljs-string">"latitude-field"</span>, <span class="hljs-string">"Latitude"</span>, <span class="hljs-string">"The event "</span> +
-            <span class="hljs-string">"property containing the latitude value"</span>), PropertyScope.MEASUREMENT_PROPERTY)
-    .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lng),
-            Labels.from(<span class="hljs-string">"longitude-field"</span>, <span class="hljs-string">"Longitude"</span>, <span class="hljs-string">"The event "</span> +
-                    <span class="hljs-string">"property containing the longitude value"</span>), PropertyScope.MEASUREMENT_PROPERTY)
-    .build())
-</code></pre>
-<p>The first line, <code>.requiredStream()</code> defines that we want a data processor with exactly one input stream. Adding more stream requirements would create elements with multiple input connectors in StreamPipes.
-Stream requirements can be assigned by using the <code>StreamRequirementsBuilder</code> class.
-In our example, we define two requirements, so-called <em>domain property requirements</em>. In contrast to <em>data type requirements</em> where we'd expect an event property with a field of a specific data type (e.g., float), domain property requirements expect a specific domain property, e.g., from a vocabulary such as the WGS84 Geo vocab.</p>
-<p>Once a pipeline is deployed, we are interested in the actual field (and its field name) that contains the latitude and longitude values.
-In some cases, there might me more than one field that satisfies a property requirement and we would like users to select the property the geofencing component should operate on.
-Therefore, our example uses the method <code>requiredPropertyWithUnaryMapping</code>, which will map a requirement to a real event property of an input stream and  let the user choose the appropriate field in the StreamPipes UI when pipelines are defined.</p>
-<p>Finally, the <code>PropertyScope</code> indicates that the required property is a measurement value (in contrast to a dimension value). This allows us later to provide improved user guidance in the pipeline editor.</p>
-<p>Besides requirements, users should be able to define the center coordinate of the Geofence and the size of the fence defined as a radius around the center in meters.
-The radius can be defined by adding a simple required text field to the description:</p>
-<pre><code class="hljs css language-java">.requiredIntegerParameter(<span class="hljs-string">"radius"</span>, <span class="hljs-string">"Geofence Size"</span>, <span class="hljs-string">"The size of the circular geofence in meters."</span>, <span class="hljs-number">0</span>, <span class="hljs-number">1000</span>, <span class="hljs-number">1</span>)
-</code></pre>
-<p>Similar to mapping properties, text parameters have an internalId (radius), a label and a description.
-In addition, we can assign a <em>value specification</em> to the parameter indicating the value range we support.
-Our example supports a radius value between 0 and 1000 with a granularity of 1.
-In the StreamPipes UI, a required text parameter is rendered as a text input field, in case we provide an optional value specification, a slider input is automatically generated.</p>
-<p>Such user-defined parameters are called <em>static properties</em>. There are many different types of static properties (see the <a href="/docs/docs/0.55.2/dev-guide-sdk-guide-processors">Processor SDK</a> for an overview).</p>
-<p>One example are <em>DomainProperties</em> we use for defining the center of the geofence.
-Our data processor requires a lat/lng pair that marks the center of the geofence.
-However, letting users directly input latitude and longitude coordinates wouldn't be very user-friendly.
-Therefore, we can link required text parameters to <em>ontology concepts</em>. By understanding the required input, the StreamPipes UI is able to determine which user interface works best for a specific concept.</p>
-<p>Add the following line to the <code>declareModel</code> method:</p>
-<pre><code class="hljs css language-java">.requiredOntologyConcept(Labels.from(<span class="hljs-string">"location"</span>, <span class="hljs-string">"Geofence Center"</span>, <span class="hljs-string">"Provide the coordinate of the "</span> +
-    <span class="hljs-string">"geofence center"</span>), OntologyProperties.mandatory(Geo.lat), OntologyProperties.mandatory(Geo.lng))
-
-</code></pre>
-<p>We've now defined that we would like to receive an instance that provides a latitude and a longitude coordinate.
-Users can input these values either manually, or they can look up <em>domain knowledge</em> (part of the StreamPipes Enterprise Edition), i.e., knowledge stored isolated from the stream definition.</p>
-<p>Finally, we need to define technical requirements of the data processor, called <em>groundings</em>.
-StreamPipes supports various runtime data formats (e.g., JSON or Thrift) and various protocols (e.g., Kafka or JMS).
-Each component defines supports formats and protocol separately.
-For our example, we'd like to support JSON-based messages and Kafka as input and output broker protocol, so append the following:</p>
-<pre><code class="hljs css language-java">.supportedProtocols(SupportedProtocols.kafka())
-.supportedFormats(SupportedFormats.jsonFormat())
-.build();
-</code></pre>
-<p>Now we need to define the output of our Geofencing pipeline element.
-As explained in the first section, the element should fire every time some geo-located entity arrives within the defined geofence.
-Therefore, the processor outputs the same schema as it receives as an input.
-Although we don't know the exact input right now as it depends on the stream users connect in StreamPipes when creating pipelines, we can define an <em>output strategy</em> as follows:</p>
-<pre><code class="hljs css language-java">.outputStrategy(OutputStrategies.keep())
-</code></pre>
-<p>This defines a <em>KeepOutputStrategy</em>, i.e., the input event schema is not modified by the processor.
-There are many more output strategies you can define depending on the functionality you desire, e.g., <em>AppendOutput</em> for defining a processor that enriches events or <em>CustomOutput</em> in case you would like users to select the output by themselves.</p>
-<p>That's it! We've now defined input requirements, required user input, technical requirements concerned with data format and protocol and an output strategy.
-In the next section, you will learn how to extract these parameters once the pipeline element is invoked after a pipeline was created.</p>
-<h2><a class="anchor" aria-hidden="true" id="pipeline-element-invocation"></a><a href="#pipeline-element-invocation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
-<p>Once users start a pipeline that uses our geofencing component, the <em>getRuntime</em> method in our class is called. The class <code>DataSinkInovcation</code> includes a graph that contains information on the configuration parameters a users has selected in the pipeline editor and information on the acutal streams that are connected to the pipeline element.</p>
-<p>Before we explain in more detail how to extract these values from the processor invocation, we need to adapt a little helper class.
-Open the file <code>GeofencingParameters</code> and modify it as follows:</p>
-<pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GeofencingParameters</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">EventProcessorBindingParams</span> </span>{
-
-  <span class="hljs-keyword">private</span> String latitudeFieldName;
-  <span class="hljs-keyword">private</span> String longitudeFieldName;
-
-  <span class="hljs-keyword">private</span> Float centerLatitude;
-  <span class="hljs-keyword">private</span> Float centerLongitude;
-
-  <span class="hljs-keyword">private</span> Integer radius;
-
-  <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">GeofencingParameters</span><span class="hljs-params">(DataProcessorInvocation graph, String latitudeFieldName, String longitudeFieldName,
-                              Float centerLatitude, Float centerLongitude, Integer radius)</span> </span>{
-    <span class="hljs-keyword">super</span>(graph);
-    <span class="hljs-keyword">this</span>.latitudeFieldName = latitudeFieldName;
-    <span class="hljs-keyword">this</span>.longitudeFieldName = longitudeFieldName;
-    <span class="hljs-keyword">this</span>.centerLatitude = centerLatitude;
-    <span class="hljs-keyword">this</span>.centerLongitude = centerLongitude;
-    <span class="hljs-keyword">this</span>.radius = radius;
-  }
-
-  <span class="hljs-function"><span class="hljs-keyword">public</span> String <span class="hljs-title">getLatitudeFieldName</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-keyword">return</span> latitudeFieldName;
-  }
-
-  <span class="hljs-function"><span class="hljs-keyword">public</span> String <span class="hljs-title">getLongitudeFieldName</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-keyword">return</span> longitudeFieldName;
-  }
-
-  <span class="hljs-function"><span class="hljs-keyword">public</span> Float <span class="hljs-title">getCenterLatitude</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-keyword">return</span> centerLatitude;
-  }
-
-  <span class="hljs-function"><span class="hljs-keyword">public</span> Float <span class="hljs-title">getCenterLongitude</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-keyword">return</span> centerLongitude;
-  }
-
-  <span class="hljs-function"><span class="hljs-keyword">public</span> Integer <span class="hljs-title">getRadius</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-keyword">return</span> radius;
-  }
-</code></pre>
-<p>This simple Pojo class will later serve to store user-defined parameters in a single object.</p>
-<p>Now we go back to the controller class and extract these values from the invocation object.</p>
-<p>First, add the following line to the <code>getRuntime</code> method:</p>
-<pre><code class="hljs css language-java">ProcessingElementParameterExtractor extractor =
-    ProcessingElementParameterExtractor.from(dataProcessorInvocation);
-</code></pre>
-<p>The extractor provides convenience methods to extract the relevant information from the <code>DataProcessorInvocation</code> object.</p>
-<p>Next, we are interested in the fields of the input event stream that contains the latitude and longitude value we would like to compute against the geofence center location as follows:</p>
-<pre><code class="hljs css language-java">String latitudeFieldName = extractor.mappingPropertyValue(<span class="hljs-string">"latitude-field"</span>);
-String longitudeFieldName = extractor.mappingPropertyValue(<span class="hljs-string">"longitude-field"</span>);
-</code></pre>
-<p>We use the same <code>internalId</code> we've used to define the mapping property requirements in the <code>declareModel</code> method.</p>
-<p>Next, for extracting the geofence center coordinates, we use the following statements:</p>
-<pre><code class="hljs css language-java">Float centerLatitude = extractor.supportedOntologyPropertyValue(<span class="hljs-string">"location"</span>, Geo.lat, Float<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
-Float centerLongitude = extractor.supportedOntologyPropertyValue(<span class="hljs-string">"location"</span>, Geo.lng, Float<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
-</code></pre>
-<p>The radius value can be extracted as follows:</p>
-<pre><code class="hljs css language-java">Integer radius = extractor.singleValueParameter(<span class="hljs-string">"radius"</span>, Integer<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
-</code></pre>
-<p>Now we can create a new instance of our previously created parameter class:</p>
-<pre><code class="hljs css language-java">GeofencingParameters params = <span class="hljs-keyword">new</span> GeofencingParameters(dataProcessorInvocation, latitudeFieldName,
-            longitudeFieldName, centerLatitude, centerLongitude, radius);
-</code></pre>
-<p>Finally, return an instance of the class <code>GeofencingProgram</code>:</p>
-<pre><code class="hljs css language-java"><span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> GeofencingProgram(params);
-</code></pre>
-<div class="admonition tip">
-<div class="admonition-title">Info</div>
-<p>The line above uses the Flink MiniCluster to start the Flink program for debugging purposes.
-       Before you build the project and use it in a real environment, replace the line as follows, which triggers cluster execution:
-       <code>return new GeofencingProgram(params, new FlinkDeploymentConfig(Config.JAR_FILE, Config.INSTANCE.getFlinkHost(), Config.INSTANCE.getFlinkPort())</code></p>
-</div>
-<p>Great! That's all we need to describe a data processor for usage in StreamPipes. Your controller class should look as follows:</p>
-<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.streampipes.model.graph.DataProcessorDescription;
-<span class="hljs-keyword">import</span> org.streampipes.model.graph.DataProcessorInvocation;
-<span class="hljs-keyword">import</span> org.streampipes.model.schema.PropertyScope;
-<span class="hljs-keyword">import</span> org.streampipes.sdk.builder.ProcessingElementBuilder;
-<span class="hljs-keyword">import</span> org.streampipes.sdk.builder.StreamRequirementsBuilder;
-<span class="hljs-keyword">import</span> org.streampipes.sdk.extractor.ProcessingElementParameterExtractor;
-<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.EpRequirements;
-<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.Labels;
-<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.OntologyProperties;
-<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.OutputStrategies;
-<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.SupportedFormats;
-<span class="hljs-keyword">import</span> org.streampipes.sdk.helpers.SupportedProtocols;
-<span class="hljs-keyword">import</span> org.streampipes.vocabulary.Geo;
-<span class="hljs-keyword">import</span> org.streampipes.wrapper.flink.FlinkDataProcessorDeclarer;
-<span class="hljs-keyword">import</span> org.streampipes.wrapper.flink.FlinkDataProcessorRuntime;
-
-<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GeofencingController</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">FlinkDataProcessorDeclarer</span>&lt;<span class="hljs-title">GeofencingParameters</span>&gt; </span>{
-
-  <span class="hljs-meta">@Override</span>
-  <span class="hljs-function"><span class="hljs-keyword">protected</span> FlinkDataProcessorRuntime&lt;GeofencingParameters&gt; <span class="hljs-title">getRuntime</span><span class="hljs-params">(DataProcessorInvocation dataProcessorInvocation)</span> </span>{
-    ProcessingElementParameterExtractor extractor = ProcessingElementParameterExtractor.from(dataProcessorInvocation);
-
-    String latitudeFieldName = extractor.mappingPropertyValue(<span class="hljs-string">"latitude-field"</span>);
-    String longitudeFieldName = extractor.mappingPropertyValue(<span class="hljs-string">"longitude-field"</span>);
-
-    Float centerLatitude = extractor.supportedOntologyPropertyValue(<span class="hljs-string">"location"</span>, Geo.lat, Float<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
-    Float centerLongitude = extractor.supportedOntologyPropertyValue(<span class="hljs-string">"location"</span>, Geo.lng, Float<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
-
-    Integer radius = extractor.singleValueParameter(<span class="hljs-string">"radius"</span>, Integer<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;
-
-    GeofencingParameters params = <span class="hljs-keyword">new</span> GeofencingParameters(dataProcessorInvocation, latitudeFieldName,
-            longitudeFieldName, centerLatitude, centerLongitude, radius);
-
-    <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> GeofencingProgram(params);
-  }
-
-  <span class="hljs-meta">@Override</span>
-  <span class="hljs-function"><span class="hljs-keyword">public</span> DataProcessorDescription <span class="hljs-title">declareModel</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-keyword">return</span> ProcessingElementBuilder.create(<span class="hljs-string">"geofencing-flink"</span>, <span class="hljs-string">"Geofencing"</span>, <span class="hljs-string">"A simple geofencing data processor "</span> +
-            <span class="hljs-string">"using the Apache Flink wrapper"</span>)
-            .requiredStream(StreamRequirementsBuilder
-                    .create()
-                    .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lat),
-                            Labels.from(<span class="hljs-string">"latitude-field"</span>, <span class="hljs-string">"Latitude"</span>, <span class="hljs-string">"The event "</span> +
-                            <span class="hljs-string">"property containing the latitude value"</span>), PropertyScope.MEASUREMENT_PROPERTY)
-                    .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lng),
-                            Labels.from(<span class="hljs-string">"longitude-field"</span>, <span class="hljs-string">"Longitude"</span>, <span class="hljs-string">"The event "</span> +
-                                    <span class="hljs-string">"property containing the longitude value"</span>), PropertyScope.MEASUREMENT_PROPERTY)
-                    .build())
-            .requiredIntegerParameter(<span class="hljs-string">"radius"</span>, <span class="hljs-string">"Geofence Size"</span>, <span class="hljs-string">"The size of the circular geofence in meters."</span>,
-                    <span class="hljs-number">0</span>, <span class="hljs-number">1000</span>, <span class="hljs-number">1</span>)
-            .requiredOntologyConcept(Labels.from(<span class="hljs-string">"location"</span>, <span class="hljs-string">"Geofence Center"</span>, <span class="hljs-string">"Provide the coordinate of the "</span> +
-                    <span class="hljs-string">"geofence center"</span>), OntologyProperties.mandatory(Geo.lat), OntologyProperties.mandatory(Geo.lng))
-            .supportedProtocols(SupportedProtocols.kafka())
-            .supportedFormats(SupportedFormats.jsonFormat())
-            .outputStrategy(OutputStrategies.keep())
-            .build();
-  }
-}
-
-</code></pre>
-<h2><a class="anchor" aria-hidden="true" id="adding-an-implementation"></a><a href="#adding-an-implementation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>Everything we need to do now is to add an implementation which does not differ from writing an Apache Flink topology.</p>
-<p>Open the class <code>GeofencingProcessor.java</code> and add the following piece of code, which realizes the Geofencing functionality:</p>
-<pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GeofencingProcessor</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">FlatMapFunction</span>&lt;<span class="hljs-title">Map</span>&lt;<span class="hljs-title">String</span>, <span class="hljs-title">Object</span>&gt;, <span class="hljs-title">Map</span>&lt;<span class="hljs-title">String</s [...]
-
-  <span class="hljs-keyword">private</span> String latitudeFieldName;
-  <span class="hljs-keyword">private</span> String longitudeFieldName;
-
-  <span class="hljs-keyword">private</span> Float centerLatitude;
-  <span class="hljs-keyword">private</span> Float centerLongitude;
-
-  <span class="hljs-keyword">private</span> Integer radius;
-
-  <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">GeofencingProcessor</span><span class="hljs-params">(String latitudeFieldName, String longitudeFieldName, Float centerLatitude, Float centerLongitude, Integer radius)</span> </span>{
-    <span class="hljs-keyword">this</span>.latitudeFieldName = latitudeFieldName;
-    <span class="hljs-keyword">this</span>.longitudeFieldName = longitudeFieldName;
-    <span class="hljs-keyword">this</span>.centerLatitude = centerLatitude;
-    <span class="hljs-keyword">this</span>.centerLongitude = centerLongitude;
-    <span class="hljs-keyword">this</span>.radius = radius;
-  }
-
-  <span class="hljs-meta">@Override</span>
-  <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">flatMap</span><span class="hljs-params">(Map&lt;String, Object&gt; in, Collector&lt;Map&lt;String, Object&gt;&gt; out)</span> <span class="hljs-keyword">throws</span> Exception </span>{
-    Float latitude = Float.parseFloat(String.valueOf(in.get(latitudeFieldName)));
-    Float longitude = Float.parseFloat(String.valueOf(in.get(longitudeFieldName)));
-
-    Float distance = distFrom(latitude, longitude, centerLatitude, centerLongitude);
-
-    <span class="hljs-keyword">if</span> (distance &lt;= radius) {
-      out.collect(in);
-    }
-  }
-
-  <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> Float <span class="hljs-title">distFrom</span><span class="hljs-params">(<span class="hljs-keyword">float</span> lat1, <span class="hljs-keyword">float</span> lng1, <span class="hljs-keyword">float</span> lat2, <span class="hljs-keyword">float</span> lng2)</span> </span>{
-    <span class="hljs-keyword">double</span> earthRadius = <span class="hljs-number">6371000</span>;
-    <span class="hljs-keyword">double</span> dLat = Math.toRadians(lat2-lat1);
-    <span class="hljs-keyword">double</span> dLng = Math.toRadians(lng2-lng1);
-    <span class="hljs-keyword">double</span> a = Math.sin(dLat/<span class="hljs-number">2</span>) * Math.sin(dLat/<span class="hljs-number">2</span>) +
-            Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
-                    Math.sin(dLng/<span class="hljs-number">2</span>) * Math.sin(dLng/<span class="hljs-number">2</span>);
-    <span class="hljs-keyword">double</span> c = <span class="hljs-number">2</span> * Math.atan2(Math.sqrt(a), Math.sqrt(<span class="hljs-number">1</span>-a));
-    <span class="hljs-keyword">return</span> (<span class="hljs-keyword">float</span>) (earthRadius * c);
-  }
-
-}
-</code></pre>
-<p>We won't go into details here as this isn't StreamPipes-related code, but in general the class extracts latitude and longitude fields from the input event (which is provided as a map data type) and calculates the distance between the geofence center and these coordinates.
-If the distance is below the given radius, the event is forwarded to the next operator.</p>
-<p>Finally, we need to connect this program to the Flink topology. StreamPipes automatically adds things like the Kafka consumer and producer, so that you only need to invoke the actual geofencing processor.
-Open the file <code>GeofencingProgram</code> and append the following line inside the <code>getApplicationLogic()</code> method:</p>
-<pre><code class="hljs css language-java"><span class="hljs-keyword">return</span> dataStreams[<span class="hljs-number">0</span>].flatMap(<span class="hljs-keyword">new</span> GeofencingProcessor(params.getLatitudeFieldName(), params.getLongitudeFieldName(),
-    params.getCenterLatitude(), params.getCenterLongitude(), params.getRadius()));
-</code></pre>
-<div class="admonition info">
-<div class="admonition-title">Info</div>
-<p>Although you could pass the <code>GeofencingParameters</code> class directly to the <code>GeofencingProcessor</code>, in our example we extract the properties to the class.
-       This is due to the circumstance that the parameter class currently is not serializable and Flink requires all classes to be serializable.
-       Future versions will fix this bug in StreamPipes.</p>
-</div>
-<h2><a class="anchor" aria-hidden="true" id="preparing-the-container"></a><a href="#preparing-the-container" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
-<p>The final step is to define the deployment type of our new data source. In this tutorial, we will create a so-called <code>StandaloneModelSubmitter</code>.
-This client will start an embedded web server that provides the description of our data source and automatically submits the program to the registered Apache Flink cluster.</p>
-<p>Create a new class <code>Main</code> that implements <code>StandaloneModelSubmitter</code> and add the following code into the main method:</p>
-<pre><code class="hljs css language-java"><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
-
-   DeclarersSingleton.getInstance().add(<span class="hljs-keyword">new</span> GeofencingController());
-
-   <span class="hljs-keyword">new</span> Main().init(Config.INSTANCE);
-
-}
-</code></pre>
-<div class="admonition info">
-<div class="admonition-title">Info</div>
-<p>In the example above, we make use of a class `Config`.
-       This class contains both mandatory and additional configuration parameters required by a pipeline element container.
-       These values are stored in the Consul-based key-value store of your StreamPipes installation.
-       The SDK guide contains a detailed manual on managing container configurations.
-</p>
-</div>
-<h2><a class="anchor" aria-hidden="true" id="starting-the-container"></a><a href="#starting-the-container" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
-<div class="admonition tip">
-<div class="admonition-title">Tip</div>
-<p>By default, the container registers itself using the hostname later used by the Docker container, leading to a 404 error when you try to access an RDF description.
-       For local development, you need to change the hostname in Consul to `localhost`.
-       Open the class `TemplateConfig.java` and change the value defined in the `HOST` variable from `template-flink` to `localhost`.
-</p>
-</div>
-<div class="admonition tip">
... 127458 lines suppressed ...


Mime
View raw message