streampipes-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From github-...@apache.org
Subject [incubator-streampipes-website] 01/01: Automated deployment: Fri Nov 29 15:27:20 UTC 2019 00e6783bb64083b54e1b28e3711688d91b03d295
Date Fri, 29 Nov 2019 15:27:33 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

commit c8454df9a98f0c203baabf31fa05f4a462c9f00e
Author: dominikriemer <dominikriemer@users.noreply.github.com>
AuthorDate: Fri Nov 29 15:27:20 2019 +0000

    Automated deployment: Fri Nov 29 15:27:20 UTC 2019 00e6783bb64083b54e1b28e3711688d91b03d295
---
 css/bootstrap.min.css                              |    7 +
 css/buttons.css                                    |   62 +
 css/custom.css                                     |  349 +++
 css/font-awesome.min.css                           |    4 +
 css/footer.css                                     |   40 +
 css/nav.css                                        |   90 +
 css/page-banner.css                                |   35 +
 css/responsive.css                                 |  147 ++
 css/team.css                                       |   43 +
 docs/streampipes-docs/blog/2018/06/14/welcome.html |   78 +
 .../blog/2018/06/14/welcome/index.html             |   78 +
 .../06/18/how-to-understand-your-machine-data.html |  161 ++
 .../how-to-understand-your-machine-data/index.html |  161 ++
 .../blog/2018/09/17/preview-060.html               |  114 +
 .../blog/2018/09/17/preview-060/index.html         |  114 +
 .../blog/2018/11/24/container-cli.html             |  126 +
 .../blog/2018/11/24/container-cli/index.html       |  126 +
 .../blog/2019/04/04/release-0610.html              |  148 ++
 .../blog/2019/04/04/release-0610/index.html        |  148 ++
 .../blog/2019/05/23/release-0620.html              |  117 +
 .../blog/2019/05/23/release-0620/index.html        |  117 +
 .../blog/2019/09/05/release-0630.html              |  130 +
 .../blog/2019/09/05/release-0630/index.html        |  130 +
 .../blog/2019/09/19/release-0640.html              |  103 +
 .../blog/2019/09/19/release-0640/index.html        |  103 +
 .../blog/2019/11/23/release-0650.html              |  105 +
 .../blog/2019/11/23/release-0650/index.html        |  105 +
 .../blog/assets/2018-06-18/01_motivation.png       |  Bin 0 -> 75008 bytes
 .../blog/assets/2018-06-18/02_anlage.png           |  Bin 0 -> 592089 bytes
 .../blog/assets/2018-06-18/03_architecture.png     |  Bin 0 -> 103391 bytes
 .../blog/assets/2018-06-18/04_pipeline.png         |  Bin 0 -> 91407 bytes
 .../2018-09-17/streampipes-060-product-tour.png    |  Bin 0 -> 151357 bytes
 .../blog/assets/2018-09-17/streampipes-060.png     |  Bin 0 -> 157867 bytes
 .../blog/assets/2018-11-24/files.png               |  Bin 0 -> 42530 bytes
 .../blog/assets/2018-11-24/roles.png               |  Bin 0 -> 166171 bytes
 .../blog/assets/2018-11-24/variables.png           |  Bin 0 -> 70428 bytes
 .../blog/assets/2019-04-04/connect.png             |  Bin 0 -> 122780 bytes
 .../blog/assets/2019-04-04/validation.png          |  Bin 0 -> 136644 bytes
 .../blog/assets/2019-05-23/connect.png             |  Bin 0 -> 169555 bytes
 .../blog/assets/2019-05-23/pipeline-editor.png     |  Bin 0 -> 151809 bytes
 .../2019-05-23/pipeline-element-documentation.png  |  Bin 0 -> 145710 bytes
 .../blog/assets/2019-09-19/memory.png              |  Bin 0 -> 145509 bytes
 .../blog/assets/2019-09-19/spconnect.png           |  Bin 0 -> 132647 bytes
 docs/streampipes-docs/blog/atom.xml                |  153 ++
 docs/streampipes-docs/blog/feed.xml                |  114 +
 docs/streampipes-docs/blog/index.html              |  112 +
 docs/streampipes-docs/css/main.css                 |    1 +
 docs/streampipes-docs/css/prism.css                |  115 +
 .../docs/0.55.2/dev-guide-architecture.html        |  117 +
 .../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/0.55.2/dev-guide-introduction.html        |  111 +
 .../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/0.55.2/dev-guide-sdk-guide-sinks.html     |   82 +
 .../0.55.2/dev-guide-sdk-guide-sinks/index.html    |   82 +
 .../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/0.55.2/dev-guide-tutorial-sources.html    |  239 ++
 .../0.55.2/dev-guide-tutorial-sources/index.html   |  239 ++
 .../docs/0.55.2/faq-common-problems.html           |  122 +
 .../docs/0.55.2/faq-common-problems/index.html     |  122 +
 .../docs/0.55.2/pipeline-elements.html             |   80 +
 .../docs/0.55.2/pipeline-elements/index.html       |   80 +
 docs/streampipes-docs/docs/0.55.2/privacy.html     |   56 +
 .../docs/0.55.2/privacy/index.html                 |   56 +
 .../docs/0.55.2/user-guide-getting-started.html    |  292 +++
 .../0.55.2/user-guide-getting-started/index.html   |  292 +++
 .../docs/0.55.2/user-guide-installation.html       |  126 +
 .../docs/0.55.2/user-guide-installation/index.html |  126 +
 .../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/0.55.2/user-guide-tour.html               |  312 +++
 .../docs/0.55.2/user-guide-tour/index.html         |  312 +++
 .../docs/0.61.0/dev-guide-archetype.html           |  182 ++
 .../docs/0.61.0/dev-guide-archetype/index.html     |  182 ++
 .../docs/0.61.0/dev-guide-architecture.html        |  117 +
 .../docs/0.61.0/dev-guide-architecture/index.html  |  117 +
 .../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/0.61.0/dev-guide-event-model.html         |  171 ++
 .../docs/0.61.0/dev-guide-event-model/index.html   |  171 ++
 .../docs/0.61.0/dev-guide-introduction.html        |  111 +
 .../docs/0.61.0/dev-guide-introduction/index.html  |  111 +
 .../docs/0.61.0/dev-guide-migration.html           |  239 ++
 .../docs/0.61.0/dev-guide-migration/index.html     |  239 ++
 .../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/0.61.0/dev-guide-sdk-guide-sinks.html     |   82 +
 .../0.61.0/dev-guide-sdk-guide-sinks/index.html    |   82 +
 .../docs/0.61.0/dev-guide-sdk-guide-sources.html   |  138 +
 .../0.61.0/dev-guide-sdk-guide-sources/index.html  |  138 +
 .../docs/0.61.0/dev-guide-ssl.html                 |  102 +
 .../docs/0.61.0/dev-guide-ssl/index.html           |  102 +
 .../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/0.61.0/dev-guide-tutorial-sources.html    |  298 +++
 .../0.61.0/dev-guide-tutorial-sources/index.html   |  298 +++
 .../docs/0.61.0/faq-common-problems.html           |  131 +
 .../docs/0.61.0/faq-common-problems/index.html     |  131 +
 .../docs/0.61.0/pipeline-elements.html             |   80 +
 .../docs/0.61.0/pipeline-elements/index.html       |   80 +
 docs/streampipes-docs/docs/0.61.0/privacy.html     |   56 +
 .../docs/0.61.0/privacy/index.html                 |   56 +
 .../docs/0.61.0/user-guide-getting-started.html    |  292 +++
 .../0.61.0/user-guide-getting-started/index.html   |  292 +++
 .../docs/0.61.0/user-guide-installation.html       |  131 +
 .../docs/0.61.0/user-guide-installation/index.html |  131 +
 .../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/0.61.0/user-guide-tour.html               |  312 +++
 .../docs/0.61.0/user-guide-tour/index.html         |  312 +++
 .../docs/0.62.0/dev-guide-archetype.html           |  182 ++
 .../docs/0.62.0/dev-guide-archetype/index.html     |  182 ++
 .../docs/0.62.0/dev-guide-architecture.html        |  117 +
 .../docs/0.62.0/dev-guide-architecture/index.html  |  117 +
 .../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/0.62.0/dev-guide-event-model.html         |  171 ++
 .../docs/0.62.0/dev-guide-event-model/index.html   |  171 ++
 .../docs/0.62.0/dev-guide-introduction.html        |  111 +
 .../docs/0.62.0/dev-guide-introduction/index.html  |  111 +
 .../docs/0.62.0/dev-guide-migration.html           |  239 ++
 .../docs/0.62.0/dev-guide-migration/index.html     |  239 ++
 .../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/0.62.0/dev-guide-sdk-guide-sinks.html     |   82 +
 .../0.62.0/dev-guide-sdk-guide-sinks/index.html    |   82 +
 .../docs/0.62.0/dev-guide-sdk-guide-sources.html   |  138 +
 .../0.62.0/dev-guide-sdk-guide-sources/index.html  |  138 +
 .../docs/0.62.0/dev-guide-ssl.html                 |  102 +
 .../docs/0.62.0/dev-guide-ssl/index.html           |  102 +
 .../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/0.62.0/dev-guide-tutorial-sources.html    |  298 +++
 .../0.62.0/dev-guide-tutorial-sources/index.html   |  298 +++
 .../docs/0.62.0/faq-common-problems.html           |  131 +
 .../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/0.62.0/pipeline-elements.html             |   76 +
 .../docs/0.62.0/pipeline-elements/index.html       |   76 +
 docs/streampipes-docs/docs/0.62.0/privacy.html     |   56 +
 .../docs/0.62.0/privacy/index.html                 |   56 +
 .../docs/0.62.0/user-guide-getting-started.html    |  292 +++
 .../0.62.0/user-guide-getting-started/index.html   |  292 +++
 .../docs/0.62.0/user-guide-installation.html       |  131 +
 .../docs/0.62.0/user-guide-installation/index.html |  131 +
 .../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/0.62.0/user-guide-tour.html               |  305 +++
 .../docs/0.62.0/user-guide-tour/index.html         |  305 +++
 .../docs/0.63.0/dev-guide-archetype.html           |  182 ++
 .../docs/0.63.0/dev-guide-archetype/index.html     |  182 ++
 .../docs/0.63.0/dev-guide-architecture.html        |  117 +
 .../docs/0.63.0/dev-guide-architecture/index.html  |  117 +
 .../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/0.63.0/dev-guide-event-model.html         |  171 ++
 .../docs/0.63.0/dev-guide-event-model/index.html   |  171 ++
 .../docs/0.63.0/dev-guide-introduction.html        |  111 +
 .../docs/0.63.0/dev-guide-introduction/index.html  |  111 +
 .../docs/0.63.0/dev-guide-migration.html           |  239 ++
 .../docs/0.63.0/dev-guide-migration/index.html     |  239 ++
 .../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/0.63.0/dev-guide-sdk-guide-sinks.html     |   82 +
 .../0.63.0/dev-guide-sdk-guide-sinks/index.html    |   82 +
 .../docs/0.63.0/dev-guide-sdk-guide-sources.html   |  138 +
 .../0.63.0/dev-guide-sdk-guide-sources/index.html  |  138 +
 .../docs/0.63.0/dev-guide-ssl.html                 |  102 +
 .../docs/0.63.0/dev-guide-ssl/index.html           |  102 +
 .../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/0.63.0/dev-guide-tutorial-sinks.html      |  273 ++
 .../0.63.0/dev-guide-tutorial-sinks/index.html     |  273 ++
 .../docs/0.63.0/dev-guide-tutorial-sources.html    |  298 +++
 .../0.63.0/dev-guide-tutorial-sources/index.html   |  298 +++
 .../docs/0.63.0/faq-common-problems.html           |  131 +
 .../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/0.63.0/pipeline-elements.html             |   76 +
 .../docs/0.63.0/pipeline-elements/index.html       |   76 +
 docs/streampipes-docs/docs/0.63.0/privacy.html     |   56 +
 .../docs/0.63.0/privacy/index.html                 |   56 +
 .../docs/0.63.0/user-guide-first-steps.html        |  288 +++
 .../docs/0.63.0/user-guide-first-steps/index.html  |  288 +++
 .../docs/0.63.0/user-guide-getting-started.html    |  242 ++
 .../0.63.0/user-guide-getting-started/index.html   |  242 ++
 .../docs/0.63.0/user-guide-installation.html       |  198 ++
 .../docs/0.63.0/user-guide-installation/index.html |  198 ++
 .../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/0.63.0/user-guide-tour.html               |  305 +++
 .../docs/0.63.0/user-guide-tour/index.html         |  305 +++
 .../docs/0.64.0/dev-guide-archetype.html           |  190 ++
 .../docs/0.64.0/dev-guide-archetype/index.html     |  190 ++
 .../docs/0.64.0/dev-guide-architecture.html        |  117 +
 .../docs/0.64.0/dev-guide-architecture/index.html  |  117 +
 .../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/0.64.0/dev-guide-event-model.html         |  171 ++
 .../docs/0.64.0/dev-guide-event-model/index.html   |  171 ++
 .../docs/0.64.0/dev-guide-introduction.html        |  111 +
 .../docs/0.64.0/dev-guide-introduction/index.html  |  111 +
 .../docs/0.64.0/dev-guide-migration.html           |  239 ++
 .../docs/0.64.0/dev-guide-migration/index.html     |  239 ++
 .../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/0.64.0/dev-guide-sdk-guide-sinks.html     |   82 +
 .../0.64.0/dev-guide-sdk-guide-sinks/index.html    |   82 +
 .../docs/0.64.0/dev-guide-sdk-guide-sources.html   |  138 +
 .../0.64.0/dev-guide-sdk-guide-sources/index.html  |  138 +
 .../docs/0.64.0/dev-guide-ssl.html                 |  102 +
 .../docs/0.64.0/dev-guide-ssl/index.html           |  102 +
 .../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/0.64.0/dev-guide-tutorial-sinks.html      |  281 ++
 .../0.64.0/dev-guide-tutorial-sinks/index.html     |  281 ++
 .../docs/0.64.0/dev-guide-tutorial-sources.html    |  298 +++
 .../0.64.0/dev-guide-tutorial-sources/index.html   |  298 +++
 .../docs/0.64.0/faq-common-problems.html           |  131 +
 .../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/0.64.0/pipeline-elements.html             |   76 +
 .../docs/0.64.0/pipeline-elements/index.html       |   76 +
 docs/streampipes-docs/docs/0.64.0/privacy.html     |   56 +
 .../docs/0.64.0/privacy/index.html                 |   56 +
 .../docs/0.64.0/user-guide-first-steps.html        |  288 +++
 .../docs/0.64.0/user-guide-first-steps/index.html  |  288 +++
 .../docs/0.64.0/user-guide-getting-started.html    |  242 ++
 .../0.64.0/user-guide-getting-started/index.html   |  242 ++
 .../docs/0.64.0/user-guide-installation.html       |  198 ++
 .../docs/0.64.0/user-guide-installation/index.html |  198 ++
 .../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/0.64.0/user-guide-tour.html               |  305 +++
 .../docs/0.64.0/user-guide-tour/index.html         |  305 +++
 .../streampipes-docs/docs/dev-guide-archetype.html |  182 ++
 .../docs/dev-guide-archetype/index.html            |  182 ++
 .../docs/dev-guide-architecture.html               |  117 +
 .../docs/dev-guide-architecture/index.html         |  117 +
 .../docs/dev-guide-configuration.html              |  121 +
 .../docs/dev-guide-configuration/index.html        |  121 +
 .../docs/dev-guide-development-environment.html    |  171 ++
 .../dev-guide-development-environment/index.html   |  171 ++
 .../docs/dev-guide-event-model.html                |  171 ++
 .../docs/dev-guide-event-model/index.html          |  171 ++
 .../docs/dev-guide-introduction.html               |  111 +
 .../docs/dev-guide-introduction/index.html         |  111 +
 .../streampipes-docs/docs/dev-guide-migration.html |  239 ++
 .../docs/dev-guide-migration/index.html            |  239 ++
 .../docs/dev-guide-output-strategies.html          |  336 +++
 .../docs/dev-guide-output-strategies/index.html    |  336 +++
 .../docs/dev-guide-sdk-guide-processors.html       |   82 +
 .../docs/dev-guide-sdk-guide-processors/index.html |   82 +
 .../docs/dev-guide-sdk-guide-sinks.html            |   82 +
 .../docs/dev-guide-sdk-guide-sinks/index.html      |   82 +
 .../docs/dev-guide-sdk-guide-sources.html          |  138 +
 .../docs/dev-guide-sdk-guide-sources/index.html    |  138 +
 docs/streampipes-docs/docs/dev-guide-ssl.html      |  102 +
 .../streampipes-docs/docs/dev-guide-ssl/index.html |  102 +
 .../docs/dev-guide-static-properties.html          |  233 ++
 .../docs/dev-guide-static-properties/index.html    |  233 ++
 .../docs/dev-guide-stream-requirements.html        |  210 ++
 .../docs/dev-guide-stream-requirements/index.html  |  210 ++
 .../docs/dev-guide-tutorial-processors.html        |  469 ++++
 .../docs/dev-guide-tutorial-processors/index.html  |  469 ++++
 .../docs/dev-guide-tutorial-sinks.html             |  273 ++
 .../docs/dev-guide-tutorial-sinks/index.html       |  273 ++
 .../docs/dev-guide-tutorial-sources.html           |  298 +++
 .../docs/dev-guide-tutorial-sources/index.html     |  298 +++
 .../streampipes-docs/docs/faq-common-problems.html |  131 +
 .../docs/faq-common-problems/index.html            |  131 +
 .../docs/next/dev-guide-archetype.html             |  182 ++
 .../docs/next/dev-guide-archetype/index.html       |  182 ++
 .../docs/next/dev-guide-architecture.html          |  117 +
 .../docs/next/dev-guide-architecture/index.html    |  117 +
 .../docs/next/dev-guide-configuration.html         |  121 +
 .../docs/next/dev-guide-configuration/index.html   |  121 +
 .../next/dev-guide-development-environment.html    |  171 ++
 .../dev-guide-development-environment/index.html   |  171 ++
 .../docs/next/dev-guide-event-model.html           |  171 ++
 .../docs/next/dev-guide-event-model/index.html     |  171 ++
 .../docs/next/dev-guide-introduction.html          |  111 +
 .../docs/next/dev-guide-introduction/index.html    |  111 +
 .../docs/next/dev-guide-migration.html             |  239 ++
 .../docs/next/dev-guide-migration/index.html       |  239 ++
 .../docs/next/dev-guide-output-strategies.html     |  336 +++
 .../next/dev-guide-output-strategies/index.html    |  336 +++
 .../docs/next/dev-guide-sdk-guide-processors.html  |   82 +
 .../next/dev-guide-sdk-guide-processors/index.html |   82 +
 .../docs/next/dev-guide-sdk-guide-sinks.html       |   82 +
 .../docs/next/dev-guide-sdk-guide-sinks/index.html |   82 +
 .../docs/next/dev-guide-sdk-guide-sources.html     |  138 +
 .../next/dev-guide-sdk-guide-sources/index.html    |  138 +
 docs/streampipes-docs/docs/next/dev-guide-ssl.html |  102 +
 .../docs/next/dev-guide-ssl/index.html             |  102 +
 .../docs/next/dev-guide-static-properties.html     |  233 ++
 .../next/dev-guide-static-properties/index.html    |  233 ++
 .../docs/next/dev-guide-stream-requirements.html   |  210 ++
 .../next/dev-guide-stream-requirements/index.html  |  210 ++
 .../docs/next/dev-guide-tutorial-processors.html   |  469 ++++
 .../next/dev-guide-tutorial-processors/index.html  |  469 ++++
 .../docs/next/dev-guide-tutorial-sinks.html        |  273 ++
 .../docs/next/dev-guide-tutorial-sinks/index.html  |  273 ++
 .../docs/next/dev-guide-tutorial-sources.html      |  298 +++
 .../next/dev-guide-tutorial-sources/index.html     |  298 +++
 .../docs/next/faq-common-problems.html             |  131 +
 .../docs/next/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/next/pipeline-elements.html               |   76 +
 .../docs/next/pipeline-elements/index.html         |   76 +
 docs/streampipes-docs/docs/next/privacy.html       |   56 +
 docs/streampipes-docs/docs/next/privacy/index.html |   56 +
 .../docs/next/user-guide-first-steps.html          |  288 +++
 .../docs/next/user-guide-first-steps/index.html    |  288 +++
 .../docs/next/user-guide-installation.html         |  198 ++
 .../docs/next/user-guide-installation/index.html   |  198 ++
 .../docs/next/user-guide-introduction.html         |  120 +
 .../docs/next/user-guide-introduction/index.html   |  120 +
 .../docs/next/user-guide-software-components.html  |  302 +++
 .../next/user-guide-software-components/index.html |  302 +++
 .../docs/next/user-guide-tour.html                 |  305 +++
 .../docs/next/user-guide-tour/index.html           |  305 +++
 .../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/streampipes-docs/docs/pipeline-elements.html  |   76 +
 .../docs/pipeline-elements/index.html              |   76 +
 docs/streampipes-docs/docs/privacy.html            |   56 +
 docs/streampipes-docs/docs/privacy/index.html      |   56 +
 .../docs/user-guide-first-steps.html               |  288 +++
 .../docs/user-guide-first-steps/index.html         |  288 +++
 .../docs/user-guide-getting-started.html           |  242 ++
 .../docs/user-guide-getting-started/index.html     |  242 ++
 .../docs/user-guide-installation.html              |  198 ++
 .../docs/user-guide-installation/index.html        |  198 ++
 .../docs/user-guide-introduction.html              |  120 +
 .../docs/user-guide-introduction/index.html        |  120 +
 .../docs/user-guide-processing-elements.html       |  135 +
 .../docs/user-guide-processing-elements/index.html |  135 +
 .../docs/user-guide-software-components.html       |  302 +++
 .../docs/user-guide-software-components/index.html |  302 +++
 docs/streampipes-docs/docs/user-guide-tour.html    |  305 +++
 .../docs/user-guide-tour/index.html                |  305 +++
 docs/streampipes-docs/en/index.html                |   26 +
 docs/streampipes-docs/en/versions.html             |   26 +
 docs/streampipes-docs/en/versions/index.html       |   26 +
 docs/streampipes-docs/img/archetype/endpoint.png   |  Bin 0 -> 41897 bytes
 .../img/archetype/example_pipeline.png             |  Bin 0 -> 109216 bytes
 .../img/archetype/project_structure.png            |  Bin 0 -> 46850 bytes
 .../img/archetype/run_configuration.png            |  Bin 0 -> 124352 bytes
 .../img/archetype/run_env_configuration.png        |  Bin 0 -> 78172 bytes
 .../img/architecture/high-level-architecture.png   |  Bin 0 -> 151348 bytes
 .../semantic-description-processor.png             |  Bin 0 -> 76344 bytes
 .../architecture/semantic-description-stream.png   |  Bin 0 -> 77556 bytes
 .../img/configuration/config_key.png               |  Bin 0 -> 24587 bytes
 .../img/configuration/configuration_1.png          |  Bin 0 -> 64909 bytes
 docs/streampipes-docs/img/configuration/consul.png |  Bin 0 -> 91440 bytes
 .../img/dev-guide-output-strategies/os-custom.png  |  Bin 0 -> 42438 bytes
 .../dev-guide-static-properties/sp-collection.png  |  Bin 0 -> 33169 bytes
 .../sp-mapping-nary.png                            |  Bin 0 -> 44031 bytes
 .../sp-mapping-unary.png                           |  Bin 0 -> 39361 bytes
 .../sp-multi-selection.png                         |  Bin 0 -> 42371 bytes
 .../sp-number-parameter-with-range.png             |  Bin 0 -> 36341 bytes
 .../sp-number-parameter.png                        |  Bin 0 -> 32717 bytes
 .../sp-single-selection-remote.png                 |  Bin 0 -> 35311 bytes
 .../sp-single-selection.png                        |  Bin 0 -> 47668 bytes
 .../sp-text-parameter.png                          |  Bin 0 -> 30076 bytes
 docs/streampipes-docs/img/favicon.png              |  Bin 0 -> 23261 bytes
 .../configuration/01_configuration_overview.png    |  Bin 0 -> 67005 bytes
 .../img/features/configuration/02_status.png       |  Bin 0 -> 86483 bytes
 .../features/configuration/03_change_config.png    |  Bin 0 -> 87610 bytes
 .../img/features/dashboard/01_dashboard.png        |  Bin 0 -> 720954 bytes
 .../features/dashboard/02_new_visualisation.png    |  Bin 0 -> 418116 bytes
 .../img/features/dashboard/03_select_gauge.png     |  Bin 0 -> 401744 bytes
 .../img/features/dashboard/04_configure_gauge.png  |  Bin 0 -> 401729 bytes
 .../img/features/dashboard/05_new_gauge_done.png   |  Bin 0 -> 481962 bytes
 .../img/features/dashboard/06_add_new.png          |  Bin 0 -> 691304 bytes
 .../img/features/editor/10_shortcut_buttons.png    |  Bin 0 -> 209888 bytes
 .../img/features/editor/11_compatible_elements.png |  Bin 0 -> 326021 bytes
 .../img/features/editor/12_recommend_elements.png  |  Bin 0 -> 210831 bytes
 .../img/features/editor/13_save_adjust.png         |  Bin 0 -> 387051 bytes
 .../img/features/editor/14_save_dialogue.png       |  Bin 0 -> 292072 bytes
 .../editor/15_pipeline_sucessfully_started.png     |  Bin 0 -> 205983 bytes
 .../img/features/editor/1_data_streams.png         |  Bin 0 -> 178798 bytes
 .../img/features/editor/2_processing_elements.png  |  Bin 0 -> 183783 bytes
 .../img/features/editor/3_data_sinks.png           |  Bin 0 -> 141234 bytes
 .../img/features/editor/4_text_filter.png          |  Bin 0 -> 115511 bytes
 .../img/features/editor/5_category_drop_down.png   |  Bin 0 -> 213112 bytes
 .../img/features/editor/6_category_filter.png      |  Bin 0 -> 126105 bytes
 .../img/features/editor/7_connect_elements.png     |  Bin 0 -> 316117 bytes
 .../img/features/editor/8_configure_element.png    |  Bin 0 -> 210707 bytes
 .../img/features/editor/9_connection_error.png     |  Bin 0 -> 238177 bytes
 .../features/file_download/01_file_download.png    |  Bin 0 -> 95377 bytes
 .../features/file_download/02_file_download.png    |  Bin 0 -> 131368 bytes
 .../features/file_download/03_file_downloaded.png  |  Bin 0 -> 119172 bytes
 docs/streampipes-docs/img/features/home/home.png   |  Bin 0 -> 395537 bytes
 docs/streampipes-docs/img/features/home/logout.png |  Bin 0 -> 433976 bytes
 docs/streampipes-docs/img/features/home/menu.png   |  Bin 0 -> 413825 bytes
 .../img/features/home/open_menu.png                |  Bin 0 -> 270622 bytes
 .../install_elements/01_install_elements.png       |  Bin 0 -> 201797 bytes
 .../install_elements/02_install_absence.png        |  Bin 0 -> 209449 bytes
 .../install_elements/03_installed_absence.png      |  Bin 0 -> 194325 bytes
 .../install_elements/04_abcense_in_editor.png      |  Bin 0 -> 191049 bytes
 docs/streampipes-docs/img/features/login.png       |  Bin 0 -> 2845110 bytes
 .../manage_pipelines/1_pipeline_overview.png       |  Bin 0 -> 85826 bytes
 .../manage_pipelines/2_start_stop_pipeline.png     |  Bin 0 -> 95175 bytes
 .../manage_pipelines/3_delete_pipeline.png         |  Bin 0 -> 113274 bytes
 .../manage_pipelines/4_pipeline_deleted.png        |  Bin 0 -> 92687 bytes
 .../manage_pipelines/5_pipeline_category.png       |  Bin 0 -> 112883 bytes
 .../features/manage_pipelines/6_add_category.png   |  Bin 0 -> 130162 bytes
 .../features/manage_pipelines/7_new_category.png   |  Bin 0 -> 143302 bytes
 .../manage_pipelines/8_show_new_category.png       |  Bin 0 -> 113998 bytes
 .../img/features/my_elements/01_my_elements.png    |  Bin 0 -> 252346 bytes
 .../features/my_elements/02_my_elements_jsonls.png |  Bin 0 -> 277795 bytes
 .../img/features/my_elements/03_jsonld.png         |  Bin 0 -> 701193 bytes
 .../notification/01_select_notification_sink.png   |  Bin 0 -> 198761 bytes
 .../notification/02_configure_notification.png     |  Bin 0 -> 217977 bytes
 .../notification/03_use_event_properties.png       |  Bin 0 -> 228607 bytes
 .../features/notification/04_new_notification.png  |  Bin 0 -> 85112 bytes
 .../img/features/notification/05_mark_read.png     |  Bin 0 -> 89779 bytes
 .../features/notification/06_marked_as_read.png    |  Bin 0 -> 69007 bytes
 .../img/features/pipeline_editor.png               |  Bin 0 -> 371701 bytes
 .../configuration/01_configuration_overview.png    |  Bin 0 -> 51719 bytes
 .../configuration/02_change_config.png             |  Bin 0 -> 74686 bytes
 .../img/features_0_62_0/dashboard/01_dashboard.png |  Bin 0 -> 72145 bytes
 .../dashboard/02_new_visualisation.png             |  Bin 0 -> 64762 bytes
 .../features_0_62_0/dashboard/03_select_gauge.png  |  Bin 0 -> 72770 bytes
 .../dashboard/04_configure_gauge.png               |  Bin 0 -> 63279 bytes
 .../dashboard/05_new_gauge_done.png                |  Bin 0 -> 87995 bytes
 .../features_0_62_0/editor/10_connection_error.png |  Bin 0 -> 90439 bytes
 .../features_0_62_0/editor/11_shortcut_buttons.png |  Bin 0 -> 103408 bytes
 .../editor/12_compatible_elements.png              |  Bin 0 -> 124323 bytes
 .../editor/13_recommend_elements.png               |  Bin 0 -> 120402 bytes
 .../img/features_0_62_0/editor/14_save_adjust.png  |  Bin 0 -> 109378 bytes
 .../features_0_62_0/editor/15_save_dialogue.png    |  Bin 0 -> 97012 bytes
 .../editor/16_pipeline_sucessfully_started.png     |  Bin 0 -> 59907 bytes
 .../editor/17_pipeline_information.png             |  Bin 0 -> 76588 bytes
 .../editor/1_PipelineEditor_DataSets.png           |  Bin 0 -> 44145 bytes
 .../editor/2_PipelineEditor_DataStreams.png        |  Bin 0 -> 82116 bytes
 .../editor/3_PipelineEditor_DataProcessors.png     |  Bin 0 -> 66124 bytes
 .../editor/4_PipelineEditor_DataSinks.png          |  Bin 0 -> 57705 bytes
 .../img/features_0_62_0/editor/5_text_filter.png   |  Bin 0 -> 29579 bytes
 .../editor/6_category_drop_down.png                |  Bin 0 -> 81933 bytes
 .../features_0_62_0/editor/7_category_filter.png   |  Bin 0 -> 62793 bytes
 .../features_0_62_0/editor/8_connect_elements.png  |  Bin 0 -> 87515 bytes
 .../features_0_62_0/editor/9_configure_element.png |  Bin 0 -> 83529 bytes
 .../file_download/01_file_download.png             |  Bin 0 -> 35231 bytes
 .../file_download/02_file_download.png             |  Bin 0 -> 50442 bytes
 .../file_download/03_file_download.png             |  Bin 0 -> 41860 bytes
 .../img/features_0_62_0/home/home.png              |  Bin 0 -> 236671 bytes
 .../img/features_0_62_0/home/open_menu.png         |  Bin 0 -> 180297 bytes
 .../install_elements/01_install_elements.png       |  Bin 0 -> 88663 bytes
 .../02_install_countAggregation.png                |  Bin 0 -> 91452 bytes
 .../03_installed_countAggregation.png              |  Bin 0 -> 90681 bytes
 .../04_countAggregation_in_editor.png              |  Bin 0 -> 70498 bytes
 .../streampipes-docs/img/features_0_62_0/login.png |  Bin 0 -> 329627 bytes
 .../manage_pipelines/1_pipeline_overview.png       |  Bin 0 -> 60689 bytes
 .../manage_pipelines/2_pipeline_information.png    |  Bin 0 -> 76588 bytes
 .../manage_pipelines/3_delete_pipeline.png         |  Bin 0 -> 60942 bytes
 .../manage_pipelines/4_pipeline_deleted.png        |  Bin 0 -> 54857 bytes
 .../manage_pipelines/5_pipeline_category.png       |  Bin 0 -> 58121 bytes
 .../manage_pipelines/6_add_category.png            |  Bin 0 -> 56481 bytes
 .../manage_pipelines/7_new_category.png            |  Bin 0 -> 60867 bytes
 .../manage_pipelines/8_show_new_category.png       |  Bin 0 -> 50146 bytes
 .../features_0_62_0/my_elements/01_my_elements.png |  Bin 0 -> 122366 bytes
 .../my_elements/02_my_elements_jsonid.png          |  Bin 0 -> 120101 bytes
 .../notification/01_select_notification_sink.png   |  Bin 0 -> 81837 bytes
 .../notification/02_configure_notification.png     |  Bin 0 -> 95710 bytes
 .../notification/03_new_notification.png           |  Bin 0 -> 40401 bytes
 .../img/features_0_62_0/pipeline_editor.png        |  Bin 0 -> 371701 bytes
 docs/streampipes-docs/img/language.svg             |    3 +
 docs/streampipes-docs/img/logo.png                 |  Bin 0 -> 7369 bytes
 docs/streampipes-docs/img/one.png                  |  Bin 0 -> 6776 bytes
 docs/streampipes-docs/img/oss_logo.png             |  Bin 0 -> 4370 bytes
 .../org.streampipes.processor.geo.flink/icon.png   |  Bin 0 -> 1591 bytes
 .../icon.png                                       |  Bin 0 -> 853 bytes
 .../icon.png                                       |  Bin 0 -> 853 bytes
 .../icon.png                                       |  Bin 0 -> 803 bytes
 .../icon.png                                       |  Bin 0 -> 714 bytes
 .../icon.png                                       |  Bin 0 -> 511 bytes
 .../icon.png                                       |  Bin 0 -> 1082 bytes
 .../icon.png                                       |  Bin 0 -> 2589 bytes
 .../icon.png                                       |  Bin 0 -> 1981 bytes
 .../icon.png                                       |  Bin 0 -> 1814 bytes
 .../icon.png                                       |  Bin 0 -> 2921 bytes
 .../icon.png                                       |  Bin 0 -> 19468 bytes
 .../icon.png                                       |  Bin 0 -> 3884 bytes
 .../icon.png                                       |  Bin 0 -> 705 bytes
 .../icon.png                                       |  Bin 0 -> 1082 bytes
 .../icon.png                                       |  Bin 0 -> 1946 bytes
 .../icon.png                                       |  Bin 0 -> 1591 bytes
 .../icon.png                                       |  Bin 0 -> 1591 bytes
 .../icon.png                                       |  Bin 0 -> 1710 bytes
 .../icon.png                                       |  Bin 0 -> 2155 bytes
 .../icon.png                                       |  Bin 0 -> 1487 bytes
 .../icon.png                                       |  Bin 0 -> 3960 bytes
 .../icon.png                                       |  Bin 0 -> 1591 bytes
 .../icon.png                                       |  Bin 0 -> 1665 bytes
 .../icon.png                                       |  Bin 0 -> 460 bytes
 .../icon.png                                       |  Bin 0 -> 1533 bytes
 .../icon.png                                       |  Bin 0 -> 156 bytes
 .../icon.png                                       |  Bin 0 -> 1591 bytes
 .../icon.png                                       |  Bin 0 -> 1591 bytes
 .../icon.png                                       |  Bin 0 -> 1836 bytes
 .../icon.png                                       |  Bin 0 -> 1946 bytes
 .../icon.png                                       |  Bin 0 -> 1591 bytes
 .../icon.png                                       |  Bin 0 -> 1591 bytes
 .../icon.png                                       |  Bin 0 -> 1246 bytes
 .../icon.png                                       |  Bin 0 -> 1591 bytes
 .../icon.png                                       |  Bin 0 -> 1591 bytes
 .../icon.png                                       |  Bin 0 -> 7030 bytes
 .../icon.png                                       |  Bin 0 -> 1591 bytes
 .../icon.png                                       |  Bin 0 -> 9342 bytes
 .../icon.png                                       |  Bin 0 -> 1138 bytes
 .../icon.png                                       |  Bin 0 -> 3673 bytes
 .../icon.png                                       |  Bin 0 -> 6706 bytes
 .../icon.png                                       |  Bin 0 -> 1591 bytes
 .../icon.png                                       |  Bin 0 -> 385 bytes
 .../icon.png                                       |  Bin 0 -> 1591 bytes
 .../icon.png                                       |  Bin 0 -> 1591 bytes
 .../icon.png                                       |  Bin 0 -> 1253 bytes
 .../org.streampipes.sinks.brokers.jvm.jms/icon.png |  Bin 0 -> 10469 bytes
 .../icon.png                                       |  Bin 0 -> 4431 bytes
 .../icon.png                                       |  Bin 0 -> 1611 bytes
 .../icon.png                                       |  Bin 0 -> 1591 bytes
 .../icon.png                                       |  Bin 0 -> 5117 bytes
 .../icon.png                                       |  Bin 0 -> 32143 bytes
 .../icon.png                                       |  Bin 0 -> 4817 bytes
 .../icon.png                                       |  Bin 0 -> 4630 bytes
 .../icon.png                                       |  Bin 0 -> 3109 bytes
 .../icon.png                                       |  Bin 0 -> 7902 bytes
 .../icon.png                                       |  Bin 0 -> 3059 bytes
 .../icon.png                                       |  Bin 0 -> 6002 bytes
 .../icon.png                                       |  Bin 0 -> 5908 bytes
 docs/streampipes-docs/img/production-line-gray.png |  Bin 0 -> 957920 bytes
 .../img/quickstart/elements/01_goto_elements.png   |  Bin 0 -> 222668 bytes
 .../img/quickstart/elements/02_install_sources.png |  Bin 0 -> 234753 bytes
 .../quickstart/elements/03_installed_sources.png   |  Bin 0 -> 205639 bytes
 .../quickstart/elements/04_install_elements.png    |  Bin 0 -> 188249 bytes
 .../quickstart/elements/05_installed_elements.png  |  Bin 0 -> 207041 bytes
 .../img/quickstart/elements/06_install_sinks.png   |  Bin 0 -> 166104 bytes
 .../img/quickstart/elements/07_installed_sinks.png |  Bin 0 -> 183532 bytes
 .../elements/08_pipeline_editor_sources.png        |  Bin 0 -> 140036 bytes
 .../elements/09_pipeline_editor_elements.png       |  Bin 0 -> 109957 bytes
 .../elements/10_pipeline_editor_sinks.png          |  Bin 0 -> 109309 bytes
 .../examples/01_PipelineEditor_DataStreams.png     |  Bin 0 -> 82116 bytes
 .../img/quickstart/examples/01_example1_empty.png  |  Bin 0 -> 119206 bytes
 .../img/quickstart/examples/02_example1_source.png |  Bin 0 -> 149297 bytes
 .../examples/03_example1_pipeline_finished.png     |  Bin 0 -> 153257 bytes
 .../img/quickstart/examples/04_example1_save.png   |  Bin 0 -> 177500 bytes
 .../examples/05_example1_pipeline_started.png      |  Bin 0 -> 125734 bytes
 .../examples/06_example01_live_visualisation.png   |  Bin 0 -> 98806 bytes
 .../examples/07_example01_first_step.png           |  Bin 0 -> 117541 bytes
 .../examples/08_example01_second_step.png          |  Bin 0 -> 126004 bytes
 .../examples/09_example01_third_step.png           |  Bin 0 -> 130285 bytes
 .../quickstart/examples/10_example1_finished.png   |  Bin 0 -> 134074 bytes
 .../img/quickstart/examples/11_example2_start.png  |  Bin 0 -> 127230 bytes
 .../quickstart/examples/12_example2_numerical.png  |  Bin 0 -> 156992 bytes
 .../examples/13_example2_configure_numerical.png   |  Bin 0 -> 193659 bytes
 .../quickstart/examples/14_example2_aggregate.png  |  Bin 0 -> 176825 bytes
 .../examples/15_example2_configure_aggregate.png   |  Bin 0 -> 227335 bytes
 .../quickstart/examples/16_example2_increase.png   |  Bin 0 -> 167134 bytes
 .../examples/17_example2_configure1_increase.png   |  Bin 0 -> 204228 bytes
 .../examples/18_example2_configure2_increase.png   |  Bin 0 -> 208620 bytes
 .../quickstart/examples/19_example2_sequence.png   |  Bin 0 -> 177961 bytes
 .../examples/20_example2_configure_sequence.png    |  Bin 0 -> 187357 bytes
 .../examples/21_example2_notification.png          |  Bin 0 -> 205628 bytes
 .../22_example2_configure_notification.png         |  Bin 0 -> 226694 bytes
 .../examples/23_example2_dashboard_sink.png        |  Bin 0 -> 227836 bytes
 .../img/quickstart/examples/24_example2_save.png   |  Bin 0 -> 195308 bytes
 .../quickstart/examples/25_example2_started.png    |  Bin 0 -> 196718 bytes
 .../examples/26_example2_visualisation.png         |  Bin 0 -> 238257 bytes
 .../examples/27_example2_notification.png          |  Bin 0 -> 78263 bytes
 .../01_PipelineEditor_DataStreams.png              |  Bin 0 -> 77077 bytes
 .../examples_master/02_example1_source.png         |  Bin 0 -> 83383 bytes
 .../03_example1_pipeline_finished.png              |  Bin 0 -> 89741 bytes
 .../examples_master/04_example1_save.png           |  Bin 0 -> 87035 bytes
 .../05_example1_pipeline_started.png               |  Bin 0 -> 54910 bytes
 .../06_example01_live_visualisation.png            |  Bin 0 -> 25615 bytes
 .../examples_master/07_example01_first_step.png    |  Bin 0 -> 50158 bytes
 .../examples_master/08_example01_second_step.png   |  Bin 0 -> 59054 bytes
 .../examples_master/09_example01_third_step.png    |  Bin 0 -> 54248 bytes
 .../examples_master/10_example1_finished.png       |  Bin 0 -> 27583 bytes
 .../examples_master/11_example2_start.png          |  Bin 0 -> 81274 bytes
 .../examples_master/12_example2_numerical.png      |  Bin 0 -> 85241 bytes
 .../13_example2_configure_numerical.png            |  Bin 0 -> 80435 bytes
 .../examples_master/14_example2_aggregate.png      |  Bin 0 -> 91048 bytes
 .../15_example2_configure_aggregate.png            |  Bin 0 -> 103008 bytes
 .../15_example2_configure_aggregate_2.png          |  Bin 0 -> 86924 bytes
 .../examples_master/16_example2_increase.png       |  Bin 0 -> 90305 bytes
 .../17_example2_configure1_increase.png            |  Bin 0 -> 106653 bytes
 .../examples_master/19_example2_sequence.png       |  Bin 0 -> 105025 bytes
 .../20_example2_configure_sequence.png             |  Bin 0 -> 116409 bytes
 .../examples_master/21_example2_notification.png   |  Bin 0 -> 110880 bytes
 .../22_example2_configure_notification.png         |  Bin 0 -> 92453 bytes
 .../examples_master/23_example2_dashboard_sink.png |  Bin 0 -> 112146 bytes
 .../examples_master/25_example2_started.png        |  Bin 0 -> 110385 bytes
 .../img/quickstart/interactive-tutorial.png        |  Bin 0 -> 148665 bytes
 .../img/quickstart/setup/01_register_user.png      |  Bin 0 -> 512826 bytes
 .../img/quickstart/setup/02_user_set_up.png        |  Bin 0 -> 530401 bytes
 .../img/quickstart/setup/03_login.png              |  Bin 0 -> 732686 bytes
 .../img/quickstart/setup/04_home.png               |  Bin 0 -> 246495 bytes
 .../img/quickstart/setup/login.png                 |  Bin 0 -> 2845110 bytes
 docs/streampipes-docs/img/riemer.png               |  Bin 0 -> 371913 bytes
 .../img/slideshow/slideshow-config.png             |  Bin 0 -> 90781 bytes
 .../img/slideshow/slideshow-connect.png            |  Bin 0 -> 116789 bytes
 .../img/slideshow/slideshow-dashboard.png          |  Bin 0 -> 98592 bytes
 .../img/slideshow/slideshow-home.png               |  Bin 0 -> 131865 bytes
 .../img/slideshow/slideshow-installation.png       |  Bin 0 -> 67902 bytes
 .../img/slideshow/slideshow-pipeline-view.png      |  Bin 0 -> 49665 bytes
 .../img/slideshow/slideshow-pipeline.png           |  Bin 0 -> 127622 bytes
 .../img/slideshow/slideshow-recommendation.png     |  Bin 0 -> 121345 bytes
 docs/streampipes-docs/img/sp-logo-color-docs.png   |  Bin 0 -> 17501 bytes
 docs/streampipes-docs/img/sp-logo-color.png        |  Bin 0 -> 12992 bytes
 docs/streampipes-docs/img/sp-logo-right-white.png  |  Bin 0 -> 12020 bytes
 .../img/streampipes-screenshot.png                 |  Bin 0 -> 245127 bytes
 docs/streampipes-docs/img/three.png                |  Bin 0 -> 14639 bytes
 .../img/tutorial-processors/pe-overview-flink.PNG  |  Bin 0 -> 30113 bytes
 .../img/tutorial-processors/pe-rdf-geofencing.PNG  |  Bin 0 -> 70129 bytes
 .../project-structure-processor.PNG                |  Bin 0 -> 13457 bytes
 .../img/tutorial-sinks/project-structure-sinks.png |  Bin 0 -> 20171 bytes
 .../img/tutorial-sources/pe-overview.PNG           |  Bin 0 -> 29556 bytes
 .../img/tutorial-sources/pe-rdf.PNG                |  Bin 0 -> 81915 bytes
 .../img/tutorial-sources/project-structure.PNG     |  Bin 0 -> 27916 bytes
 docs/streampipes-docs/img/two.png                  |  Bin 0 -> 13583 bytes
 docs/streampipes-docs/img/zehnder.png              |  Bin 0 -> 367089 bytes
 docs/streampipes-docs/index.html                   |   26 +
 docs/streampipes-docs/js/code-block-buttons.js     |   65 +
 docs/streampipes-docs/js/codetabs.js               |   31 +
 docs/streampipes-docs/js/custom.js                 |   35 +
 docs/streampipes-docs/sitemap.xml                  |  428 ++++
 docs/streampipes-docs/versions.html                |   26 +
 docs/streampipes-docs/versions/index.html          |   26 +
 download.html                                      |  431 ++++
 features.html                                      |  411 +++
 fonts/FontAwesome.otf                              |  Bin 0 -> 134808 bytes
 fonts/fontawesome-webfont.eot                      |  Bin 0 -> 165742 bytes
 fonts/fontawesome-webfont.svg                      | 2689 ++++++++++++++++++++
 fonts/fontawesome-webfont.ttf                      |  Bin 0 -> 165548 bytes
 fonts/fontawesome-webfont.woff                     |  Bin 0 -> 98024 bytes
 fonts/fontawesome-webfont.woff2                    |  Bin 0 -> 77160 bytes
 getinvolved.html                                   |  242 ++
 images/screenshot.png                              |  Bin 0 -> 359634 bytes
 img/about/dutz.jpg                                 |  Bin 0 -> 140407 bytes
 img/about/riemer.png                               |  Bin 0 -> 428115 bytes
 img/about/tex.png                                  |  Bin 0 -> 401565 bytes
 img/about/wiener.png                               |  Bin 0 -> 249219 bytes
 img/about/zehnder.png                              |  Bin 0 -> 420534 bytes
 img/bg-img/bg-index.jpg                            |  Bin 0 -> 541592 bytes
 img/favicon/apple-touch-icon-114x114.png           |  Bin 0 -> 12731 bytes
 img/favicon/apple-touch-icon-120x120.png           |  Bin 0 -> 12215 bytes
 img/favicon/apple-touch-icon-144x144.png           |  Bin 0 -> 9514 bytes
 img/favicon/apple-touch-icon-152x152.png           |  Bin 0 -> 21383 bytes
 img/favicon/apple-touch-icon-57x57.png             |  Bin 0 -> 3780 bytes
 img/favicon/apple-touch-icon-60x60.png             |  Bin 0 -> 4004 bytes
 img/favicon/apple-touch-icon-72x72.png             |  Bin 0 -> 3230 bytes
 img/favicon/apple-touch-icon-76x76.png             |  Bin 0 -> 5680 bytes
 img/favicon/favicon-128.png                        |  Bin 0 -> 3329 bytes
 img/favicon/favicon-16x16.png                      |  Bin 0 -> 471 bytes
 img/favicon/favicon-196x196.png                    |  Bin 0 -> 34049 bytes
 img/favicon/favicon-32x32.png                      |  Bin 0 -> 864 bytes
 img/favicon/favicon-96x96.png                      |  Bin 0 -> 4246 bytes
 img/favicon/favicon.ico                            |  Bin 0 -> 34494 bytes
 img/favicon/mstile-144x144.png                     |  Bin 0 -> 9514 bytes
 img/favicon/mstile-150x150.png                     |  Bin 0 -> 51834 bytes
 img/favicon/mstile-310x150.png                     |  Bin 0 -> 90271 bytes
 img/favicon/mstile-310x310.png                     |  Bin 0 -> 214934 bytes
 img/favicon/mstile-70x70.png                       |  Bin 0 -> 3329 bytes
 img/integrations/Aggregation_Icon_HQ.png           |  Bin 0 -> 1854 bytes
 img/integrations/And_Icon_HQ.png                   |  Bin 0 -> 2516 bytes
 img/integrations/Counter_Icon_HQ.png               |  Bin 0 -> 4738 bytes
 img/integrations/NeuralNetwork.png                 |  Bin 0 -> 4515 bytes
 img/integrations/Numerical_Filter_Icon_HQ.png      |  Bin 0 -> 3172 bytes
 img/integrations/alarm_light.png                   |  Bin 0 -> 6272 bytes
 img/integrations/couchdb_icon.png                  |  Bin 0 -> 48173 bytes
 img/integrations/elasticsearch_icon.png            |  Bin 0 -> 20411 bytes
 img/integrations/email.png                         |  Bin 0 -> 8525 bytes
 img/integrations/field-hasher-icon.png             |  Bin 0 -> 19799 bytes
 img/integrations/field_converter.png               |  Bin 0 -> 11482 bytes
 img/integrations/file_icon.png                     |  Bin 0 -> 2031 bytes
 img/integrations/gauge_icon.png                    |  Bin 0 -> 19795 bytes
 img/integrations/hadoop-icon.png                   |  Bin 0 -> 35282 bytes
 img/integrations/html_icon.png                     |  Bin 0 -> 7429 bytes
 img/integrations/increase-icon.png                 |  Bin 0 -> 18764 bytes
 img/integrations/influx.png                        |  Bin 0 -> 9982 bytes
 img/integrations/jms_logo.png                      |  Bin 0 -> 25474 bytes
 img/integrations/kafka_logo.png                    |  Bin 0 -> 18630 bytes
 img/integrations/math-icon.png                     |  Bin 0 -> 22150 bytes
 img/integrations/mysql.png                         |  Bin 0 -> 6477 bytes
 img/integrations/postgres.png                      |  Bin 0 -> 8890 bytes
 img/integrations/rabbitmq-icon.png                 |  Bin 0 -> 21556 bytes
 img/integrations/slack-icon.png                    |  Bin 0 -> 9767 bytes
 img/integrations/statistics-icon.png               |  Bin 0 -> 23118 bytes
 img/open_source/icon-docker.png                    |  Bin 0 -> 33551 bytes
 img/open_source/icon-docs.png                      |  Bin 0 -> 26773 bytes
 img/open_source/icon-github.png                    |  Bin 0 -> 41956 bytes
 img/open_source/icon-mail.png                      |  Bin 0 -> 29649 bytes
 img/open_source/icon-slack.png                     |  Bin 0 -> 5067 bytes
 img/open_source/icon-stackoverflow.png             |  Bin 0 -> 46849 bytes
 img/open_source/icon-twitter.png                   |  Bin 0 -> 4298 bytes
 img/screenshots/connect-customize.png              |  Bin 0 -> 79922 bytes
 img/screenshots/connect-marketplace.png            |  Bin 0 -> 146874 bytes
 img/screenshots/live-dashboard.png                 |  Bin 0 -> 87581 bytes
 img/screenshots/pipeline-customization.png         |  Bin 0 -> 112000 bytes
 img/screenshots/pipeline-details.png               |  Bin 0 -> 82822 bytes
 img/screenshots/pipeline-editor-2.png              |  Bin 0 -> 137687 bytes
 img/screenshots/pipeline-editor-sources.png        |  Bin 0 -> 95393 bytes
 img/screenshots/pipeline-editor.png                |  Bin 0 -> 135643 bytes
 img/screenshots/pipeline-element-marketplace.png   |  Bin 0 -> 76371 bytes
 img/screenshots/pipeline-overview.png              |  Bin 0 -> 84199 bytes
 img/screenshots/start-pipeline.png                 |  Bin 0 -> 84681 bytes
 img/slideshow/slideshow-config.png                 |  Bin 0 -> 160919 bytes
 img/slideshow/slideshow-connect.png                |  Bin 0 -> 198388 bytes
 img/slideshow/slideshow-dashboard.png              |  Bin 0 -> 179762 bytes
 img/slideshow/slideshow-home.png                   |  Bin 0 -> 217760 bytes
 img/slideshow/slideshow-installation.png           |  Bin 0 -> 131776 bytes
 img/slideshow/slideshow-pipeline-view.png          |  Bin 0 -> 102351 bytes
 img/slideshow/slideshow-pipeline.png               |  Bin 0 -> 211773 bytes
 img/slideshow/slideshow-recommendation.png         |  Bin 0 -> 199717 bytes
 img/sp-logo-color.png                              |  Bin 0 -> 16928 bytes
 img/sp-logo-white-right.png                        |  Bin 0 -> 21453 bytes
 img/streampipes-screenshot.png                     |  Bin 0 -> 124034 bytes
 .../streampipes-high-level-architecture-blue.png   |  Bin 0 -> 338665 bytes
 .../streampipes-high-level-architecture.png        |  Bin 0 -> 338816 bytes
 img/technology/streampipes-tech-stack.png          |  Bin 0 -> 149139 bytes
 img/usecases/production-line.png                   |  Bin 0 -> 479552 bytes
 index.html                                         |  375 +++
 js/bootstrap.min.js                                |    7 +
 js/jquery-2.2.4.min.js                             |    4 +
 js/scripts.js                                      |   38 +
 mailinglists.html                                  |  248 ++
 media.html                                         |  250 ++
 meetus.html                                        |  209 ++
 team.html                                          |  248 ++
 technology.html                                    |  219 ++
 usecases.html                                      |  249 ++
 1267 files changed, 120784 insertions(+)

diff --git a/css/bootstrap.min.css b/css/bootstrap.min.css
new file mode 100644
index 0000000..8826912
--- /dev/null
+++ b/css/bootstrap.min.css
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v4.1.3 (https://getbootstrap.com/)
+ * Copyright 2011-2018 The Bootstrap Authors
+ * Copyright 2011-2018 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-s [...]
+/*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/css/buttons.css b/css/buttons.css
new file mode 100644
index 0000000..c95ff9f
--- /dev/null
+++ b/css/buttons.css
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+.sp-button {
+    display: inline-block ;
+    vertical-align: middle;
+    border: 0;
+    border-radius: 3px;
+    cursor: pointer;
+    font-family: inherit;
+    font-weight: bold;
+    text-transform: uppercase;
+    font-size: 0.9em;
+    letter-spacing: 0.1em;
+    line-height: 1em;
+    padding: 0.75em 1.25em;
+    margin-right:0.125em;
+    margin-left: 0.125em;
+    margin-top:0px;
+}
+
+.sp-button-large {
+    font-size: 1.2em;
+    padding: 1em 1.5em;
+}
+
+.sp-button.sp-button-blue:hover {
+    background: rgb(59, 92, 149);
+    -webkit-transition: all 0.75s ease;
+    transition: all 0.75s ease;
+}
+
+.sp-button.sp-button-gray:hover {
+    background: #cbcbcb;
+    -webkit-transition: all 0.75s ease;
+    transition: all 0.75s ease;
+}
+
+.sp-button.sp-button-gray {
+    background: #e5e5e5;
+    color: rgba(0, 0, 0, 0.75);
+}
+
+.sp-button.sp-button-blue {
+    background: rgb(27, 20, 100);
+    color: rgba(255, 255, 255, 0.75);
+}
\ No newline at end of file
diff --git a/css/custom.css b/css/custom.css
new file mode 100644
index 0000000..c9b63ad
--- /dev/null
+++ b/css/custom.css
@@ -0,0 +1,349 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+@import url('https://fonts.googleapis.com/css?family=Roboto:400,500,700,900');
+@import 'font-awesome.min.css';
+
+* {
+	margin: 0;
+	padding: 0;
+}
+
+body,
+html {
+	font-family: 'Roboto', sans-serif;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+	font-family: 'Roboto', sans-serif;
+	font-weight: 700;
+	color: #404551;
+	line-height: 1.2;
+}
+
+a,
+a:hover,
+a:focus,
+a:active {
+	font-weight: 700;
+	text-decoration: none;
+	-webkit-transition-duration: 400ms;
+	transition-duration: 400ms;
+}
+
+li {
+	list-style: none;
+}
+
+p {
+	font-family: 'Roboto', sans-serif;
+	color: #44444e;
+	font-size: 15px;
+	font-weight: 500;
+	margin-top: 0;
+	line-height: 1.9;
+}
+
+ul,
+ol {
+	margin: 0;
+	padding: 0;
+}
+
+img {
+	max-width: 100%;
+	height: auto;
+}
+
+.section-padding-100 {
+	padding-top: 100px;
+	padding-bottom: 100px;
+}
+
+.section-padding-100-0 {
+	padding-top: 100px;
+	padding-bottom: 0;
+}
+
+.section-padding-50 {
+	padding-top: 50px;
+	padding-bottom: 50px;
+}
+
+.margin-top-50 {
+	margin-top: 50px;
+}
+
+.margin-right-50 {
+	margin-right: 15px;
+}
+
+.main-section-area {
+	background-color: #1b1464;
+	position: relative;
+	z-index: 1;
+}
+
+.main-section-area .section-heading {
+	margin-bottom: 60px;
+}
+
+.main-section-area .section-heading h2 {
+	color: #fff;
+}
+
+.support-links-area {
+	-webkit-box-flex: 0;
+	-ms-flex: 0 0 16.67%;
+	flex: 0 0 16.67%;
+	max-width: 16.67%;
+	padding: 100px 20px;
+	position: relative;
+	z-index: 1;
+	-webkit-transition-duration: 750ms;
+	transition-duration: 750ms;
+}
+
+.support-links-area:hover {
+	box-shadow: 0 10px 20px 10px rgba(0, 0, 0, 0.1);
+}
+
+.event-list ul {
+
+}
+
+.banner-link {
+	color:white;
+	text-decoration: underline;
+}
+
+.banner-link:hover {
+	color:#1b1464;
+	text-decoration: underline;
+}
+
+.header-banner {
+	background: white;
+	z-index: 999;
+	color:white;
+	text-align: center;
+	height:40px;
+	width:100%;
+	position:absolute;
+	top:0px;
+}
+
+.header-banner-news {
+	background:rgb(57,181,74);
+	border-radius:0% 100% 6% 94% / 100% 0% 100% 0%;
+	width:90%;
+	position:absolute;
+	top:0px;
+	left:0px;
+	height:40px;
+	justify-content: center;
+	display: flex;
+	align-items: center;
+}
+
+.header-banner.sticky {
+	position:fixed;
+}
+
+.event-list ul li {
+	font-size: 18px;
+	margin-left: 10px;
+	display:list-item;
+	list-style-type: square;
+}
+
+.feature-item-margin {
+	margin-bottom:25px;
+	line-height: 1.4;
+	font-size: 1.1rem;
+}
+
+.installation-manual-part {
+	margin-bottom:30px;
+}
+
+.installation-step {
+	margin-top:15px;
+	margin-bottom:15px;
+}
+
+.section-subtitle {
+	font-size: 22px;
+	color: #abadbe;
+	line-height: 1.8;
+	font-weight: 500;
+	text-align:center;
+	margin-bottom:30px;
+}
+
+.usecases-applications-item {
+	text-align:justify;
+	border-left:2px solid rgb(57,181,74);
+	padding:10px;
+}
+
+.sp-color-green {
+	color: rgb(57,181,74);
+}
+
+.sp-background-green {
+	background: rgb(57,181,74);
+}
+
+.margin-top {
+	margin-top:40px;
+}
+
+.pe-icon-container {
+	box-shadow: 0 0 2px #555;
+	width: 75px;
+	height: 75px;
+	display: inline;
+	float: left;
+	padding: 10px;
+	margin-right: 20px;
+	margin-top: 10px;
+}
+
+.pe-icon-processor {
+	border: 2px solid #009688;
+}
+
+.pe-icon-sink {
+	border: 2px solid #3f51b5;
+}
+
+.pe-icon {
+	display: inline-block;
+	margin-left: auto;
+	margin-right: auto;
+	max-height: 100%;
+	width: 100%;
+}
+
+.feature-section-gray {
+	background: #e6e6e6;
+}
+
+.page-section-title {
+	text-align:center;
+	margin: 10px 0 80px 0;
+}
+
+.page-section-title::after {
+	content: '';
+	width: 125px;
+	border-bottom: #1b1464 8px solid;
+	margin: 24px 0;
+	display: block;
+	transform: translateX(-50%);
+	left: 50%;
+	position: absolute
+}
+
+.header-area {
+	padding: 0px;
+}
+
+.sp-button-margin {
+	margin-bottom:20px;
+}
+
+.container-header {
+    padding-left:80px;
+    padding-right:80px;
+    width:100%;
+}
+
+.header-apache-text {
+	line-height:1.2;
+	font-family: 'Heebo', sans-serif;
+	font-size:32pt;
+	margin-bottom:20px;
+}
+
+.feature-highlights-section {
+    margin-top: 40px;
+    margin-bottom: 60px;
+}
+
+.feature-highlights {
+	margin-top: 16px;
+    margin-bottom: 16px;
+	font-size:18pt;
+	width:100%;
+}
+
+.feature-highlights-icon {
+    margin-right:10px;
+}
+
+.feature-highlights-text {
+    border-bottom: 1px solid rgb(204, 217, 223);
+    padding-bottom: 10px;
+}
+
+.feature-highlights-bg {
+	background: rgb(57,181,74);
+	color:white;
+	padding:3px;
+}
+
+.sp-blue {
+	color: #1b1464;
+}
+
+.sp-green {
+	color: rgb(57,181,74);
+}
+
+.apache-teaser {
+	position: relative;
+	padding-left: 1em;
+	border-left: 0.2em solid rgb(57,181,74);
+	font-family: 'Heebo', serif;
+	font-size: 16pt;
+	font-weight: 100;
+}
+
+.apache-teaser:before, .apache-teaser:after {
+	content: '\201C';
+	font-family: 'Sanchez';
+	color: rgb(27, 20, 100);
+}
+
+.apache-teaser:after {
+	content: '\201D';
+}
+
+
+
+
+
+
+
diff --git a/css/font-awesome.min.css b/css/font-awesome.min.css
new file mode 100644
index 0000000..248ea7a
--- /dev/null
+++ b/css/font-awesome.min.css
@@ -0,0 +1,4 @@
+/*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:norma [...]
diff --git a/css/footer.css b/css/footer.css
new file mode 100644
index 0000000..fca6689
--- /dev/null
+++ b/css/footer.css
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+.footer-area {
+    position: relative;
+    z-index: 1;
+    background-color: #1b1464;
+}
+
+.copyright-text > p {
+    margin-bottom: 0;
+    font-size: 13px;
+}
+
+.footer-section {
+    background-color: #1b1464;
+    height: 150px;
+    padding: 20px 40px;
+}
+
+.footer-content-part {
+    color:#c1c1c1;
+    font-size:14px;
+    margin-bottom:10px;
+}
\ No newline at end of file
diff --git a/css/nav.css b/css/nav.css
new file mode 100644
index 0000000..e99c13e
--- /dev/null
+++ b/css/nav.css
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+.header-area {
+    left: 0;
+    position: absolute;
+    width: 100%;
+    z-index: 999;
+    top: 40px;
+    padding: 0 15px;
+    height: 120px;
+    background-color: transparent;
+    -webkit-transition-duration: 700ms;
+    transition-duration: 700ms;
+}
+
+.menu-area {
+    position: relative;
+    z-index: 2;
+}
+
+.menu-area #nav .nav-link {
+    color: #1b1464;
+    display: block;
+    font-size: 15px;
+    -webkit-transition-duration: 500ms;
+    transition-duration: 500ms;
+    padding: 0 15px;
+}
+
+.menu-area .dropdown-menu.show {
+    border: none;
+    box-shadow: 3px 5px 12px rgba(0, 0, 0, 0.15);
+}
+
+.menu-area .dropdown-item {
+    font-size: 14px;
+    font-weight: 700;
+    color: #9597a6;
+}
+
+.menu-area #nav .nav-link:hover,
+.menu-area #nav .nav-item.active .nav-link,
+.menu-area .dropdown-item:hover {
+    color: rgb(57,181,74);
+}
+
+.nav-item {
+    margin: 2px;
+}
+
+.navbar-nav {
+    -webkit-transition-duration: 500ms;
+    transition-duration: 500ms;
+}
+
+.header-area.sticky {
+    background-color: white;
+    box-shadow: 0 10px 10px -10px rgba(0, 0, 0, 0.15);
+    height: 80px;
+    position: fixed;
+    top: 40px;
+    z-index: 999;
+}
+
+.dropdown-menu {
+    min-width:15rem;
+}
+
+.header-social-buttons a {
+    font-size:16pt;
+    color:#1b1464;
+    margin-left:8px;
+    margin-right:8px;
+}
\ No newline at end of file
diff --git a/css/page-banner.css b/css/page-banner.css
new file mode 100644
index 0000000..8fdab03
--- /dev/null
+++ b/css/page-banner.css
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+.page-banner-area {
+    height: 250px;
+    width: 100%;
+    position: relative;
+    z-index: 1;
+    margin-top: 160px;
+    background: linear-gradient(0deg,rgba(57, 181, 74, 0.8),rgba(57, 181, 74, 0.8)), url('/img/bg-img/bg-index.jpg');
+    background-size:cover;
+    color:white;
+}
+
+.page-banner-content h2 {
+    color: white;
+    font-family: 'Heebo', sans-serif;
+    font-size: 68px;
+}
+
diff --git a/css/responsive.css b/css/responsive.css
new file mode 100644
index 0000000..8a375d3
--- /dev/null
+++ b/css/responsive.css
@@ -0,0 +1,147 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+@media (min-width: 992px) and (max-width: 1199px) {
+    .menu-area #nav .nav-link {
+        padding: 0 10px;
+    }
+    .header-banner {
+        height:80px;
+    }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+    .navbar-toggler {
+        border: 2px solid #fff;
+        background-color: #f2f4f6;
+        margin: 32px 0;
+    }
+    .sticky .navbar-toggler {
+        margin: 11px 0;
+    }
+    .navbar-toggler-icon {
+        background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");
+    }
+    #sp-navbar {
+        padding: 30px;
+        border-radius: 5px;
+        background-color: #ffffff;
+        text-align: left;
+    }
+    .header-area.sticky .navbar {
+        height: 70px;
+    }
+    .menu-area #nav .nav-link {
+        font-size: 14px;
+        padding: 6px 0;
+    }
+
+    .support-links-area {
+        -webkit-box-flex: 0;
+            -ms-flex: 0 0 50%;
+                flex: 0 0 50%;
+        max-width: 50%;
+    }
+
+}
+
+@media (min-width: 320px) and (max-width: 767px) {
+    .header-area {
+        padding: 0;
+        height: 140px;
+    }
+
+    .header-area.sticky {
+        height:80px;
+        top:60px;
+    }
+
+    .header-banner.sticky {
+        height:140px;
+    }
+
+    .header-banner {
+        height:160px;
+    }
+
+    .footer-section {
+        height:100%;
+    }
+
+    .navbar-collapse {
+        background:white;
+    }
+
+    .header-banner-news {
+        width:100%;
+        height:60px;
+        border-radius:0;
+    }
+
+    .navbar-toggler {
+        border: 2px solid #fff;
+        background-color: #f2f4f6;
+        margin: 11px 0;
+    }
+    .sticky .navbar-toggler {
+        margin: 11px 0;
+    }
+    .navbar-toggler-icon {
+        background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");
+    }
+
+    .header-area.sticky .navbar {
+        height: 70px;
+    }
+    .menu-area #nav .nav-link {
+        font-size: 14px;
+        padding: 6px 0;
+    }
+
+    .section-heading > h2 {
+        font-size: 24px;
+    }
+
+    .support-links-area {
+        -webkit-box-flex: 0;
+            -ms-flex: 0 0 100%;
+                flex: 0 0 100%;
+        max-width: 100%;
+    }
+
+    .footer-bottom-area {
+        height: 100px;
+        text-align: center;
+        padding: 25px 0;
+    }
+}
+
+@media (min-width: 480px) and (max-width: 767px) {
+}
+
+@media (min-width: 576px) and (max-width: 767px) {
+    .support-links-area {
+        -webkit-box-flex: 0;
+            -ms-flex: 0 0 50%;
+                flex: 0 0 50%;
+        max-width: 50%;
+    }
+    .header-banner {
+        height:80px;
+    }
+}
\ No newline at end of file
diff --git a/css/team.css b/css/team.css
new file mode 100644
index 0000000..792c06d
--- /dev/null
+++ b/css/team.css
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+.team-thumbnail {
+    width: 189px;
+    height: 189px;
+    border-radius: 50%;
+    margin: 0 auto 50px;
+    position: relative;
+    z-index: 1;
+}
+
+.team-thumbnail > img {
+    width: 100%;
+    height: 100%;
+    border-radius: 50%;
+}
+
+.team-thumbnail-no-image {
+    color:darkgray;
+}
+
+.team-member-name {
+    margin-bottom: 50px;
+}
+
+
diff --git a/docs/streampipes-docs/blog/2018/06/14/welcome.html b/docs/streampipes-docs/blog/2018/06/14/welcome.html
new file mode 100644
index 0000000..8b86c63
--- /dev/null
+++ b/docs/streampipes-docs/blog/2018/06/14/welcome.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Welcome to StreamPipes! · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Welcome to our new blog. StreamPipes is the new, easy-to-use self-service data analytics toolbox for the Industrial IoT. In the coming weeks, we&#x27;ll publish a series of blog posts that explai [...]
+        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.65.0</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 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) {
+                  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/streampipes-docs/blog/2018/06/14/welcome/index.html b/docs/streampipes-docs/blog/2018/06/14/welcome/index.html
new file mode 100644
index 0000000..8b86c63
--- /dev/null
+++ b/docs/streampipes-docs/blog/2018/06/14/welcome/index.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Welcome to StreamPipes! · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Welcome to our new blog. StreamPipes is the new, easy-to-use self-service data analytics toolbox for the Industrial IoT. In the coming weeks, we&#x27;ll publish a series of blog posts that explai [...]
+        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.65.0</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 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) {
+                  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/streampipes-docs/blog/2018/06/18/how-to-understand-your-machine-data.html b/docs/streampipes-docs/blog/2018/06/18/how-to-understand-your-machine-data.html
new file mode 100644
index 0000000..5b3249c
--- /dev/null
+++ b/docs/streampipes-docs/blog/2018/06/18/how-to-understand-your-machine-data.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>How to understand your machine data? · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="**&lt;div style=&quot;float: left; padding-right: 40px;&quot;&gt;8 minutes to read&lt;/div&gt;**"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Ho [...]
+        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.65.0</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 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.
+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>
+<!--truncate-->
+<p>When it comes to data analytics people often talk about the big players like Google, Facebook, or Netflix which collect a lot of data about their users and their usage behavior.
+The core of their business model is to use data and turn it into profit. Nowadays all companies have the requirement to analyze their data.
+But since this was not originally part of their business model it is very challenging for them to catch up.
+To gain insights from data, it is often referred to advanced analytics and machine learning. Before such techniques can be used some work must be done.
+A first, basic part of that is to understand your data. We do that in four steps, as can be seen in figure below.
+First data sources must be accessed, then they can be integrated and for example be stored in a data lake.
+After that, we employ rule-based analytics to find patterns and situations.
+In the end, machine learning and advanced analytics algorithms can be used to get more out of the data.
+The idea behind those steps is to generate value as early as possible by collecting the low-hanging fruits first.
+We develop methodologies and tools for the individual steps to also allow domain experts to perform them to bridge the gap between the big tech companies and more traditional industries.</p>
+<p><img class="blog-image" style="max-width:50%;" src="/blog/assets/2018-06-18/01_motivation.png" alt="Motivation Graphic"></p>
+<p>The questions we try to answer in these blog posts are:</p>
+<ul>
+<li><strong>How does data produced by machines look like?</strong></li>
+<li><strong>How can machines and other data sources be accessed?</strong></li>
+<li><strong>How is it possible to process the continuously produced flow of data?</strong></li>
+</ul>
+<p>We illustrate our ideas with an example which we also use during the whole blog series.
+The example is a water circle of a cooling system. You can see such a system in the next image.
+It contains multiple water tanks and pipes that connect those tanks.
+Within the tanks and the pipes are multiple sensors, which measure for example the water level in the tank, the flow rate in the water pipe, or the temperature of the water.
+All those sensors are very simple, they make iterative observations and send the sensed measurements to a computer system.</p>
+<p><img class="blog-image" style="max-width:70%;" src="/blog/assets/2018-06-18/02_anlage.png" alt="Water Circle Image"></p>
+<p>Before we go into detail, we want to explain the term streaming data, because we focus on machine and sensor data which is continually produced in a streaming fashion.
+The opposite of streaming data are fixed sized data sets, called batch data.
+Since always new data is produced by sensors, it is not possible to wait till all data is completely produced and then process it.
+Different to that is batch data.
+The advantage of batch data is, when the processing starts no new data is added anymore.
+Streaming data can also be processed with batch processing systems.
+Therefore, a data stream must be separated into fixed chunks which are then processed in a batch fashion.
+This is possible but the more natural fit is to use streaming systems since they were designed to process streaming data.</p>
+<p>In an environment where we process machine data we have different components.
+The individual components exchange information in the form of <strong>events</strong>.
+All assets continually producing data are called <strong>data sources</strong> (i.e. a sensor, machine or a software system).
+To access these data sources, <strong>adapters</strong> are needed.
+Adapters are software components (which can run anywhere, for example directly on the machine or separately on a edge device near the machine) that are able to connect to the data source, extract the sensor information and emit events to the <strong>middleware</strong>.
+The middleware is a central component which is an intermediate between the individual components.
+Even if the middleware is a central component, it is not a bottleneck and also not a single point of failure since it is often realized in form of a distributed system.
+<strong>Processing systems</strong> can access data from the middleware, transform it and apply algorithms.
+This is the component where the data is analyzed and higher-level information is generated.
+In the end, results can be stored in <strong>data bases</strong>.
+From there, other applications like for example dashboards can access the calculated results.
+This is the high-level architecture of processing data streams.</p>
+<p><img class="blog-image" src="/blog/assets/2018-06-18/03_architecture.png" alt="Overall architecture"></p>
+<p>Once the events are integrated into a middleware, it must be processed to detect situations and generate higher-level events.
+This can be done in an <strong>Event Processing Network (EPN)</strong>.
+An EPN consists of one or multiple <strong>data sources, event processors</strong> transforming and detecting patterns in the data and finally <strong>data sinks</strong>, which can be data bases, alarms or other systems.
+Below such a pipeline is shown where we have two sensors as data sources: A flow rate sensor measuring the flow rate in a water pipe and a water level sensor in a water tank.
+It further contains three processing elements, each with a different functionality.
+The first one detects increases in the water tank, the second one filters out values under a defined threshold.
+The last of the processing elements detects when both situations occur within a defined time window.
+In the end, we employ a data sink, which triggers a notification for a service technician once the modeled situation occurs.
+We call such instances of EPNs processing <strong>pipelines</strong>.</p>
+<p><img class="blog-image" src="/blog/assets/2018-06-18/04_pipeline.png" alt="Example Pipeline"></p>
+<p>The pipeline in the image before contains three different processing elements.
+Those elements contain the actual algorithms.
+Such algorithms can be as easy as simple filters on a sensor value or can also be more complex, such as patterns that occur over a period of time.
+But they can also contain machine learning and advanced analytics algorithms (e.g. neural networks) that perform predictions on data streams.
+Event processors are just an abstraction that take a data stream as an input and expose a “new” data stream.
+Furthermore, they contain configuration parameters which can be defined by a user.
+With this concept, we can create reusable components that can be used in many different pipelines.</p>
+<p>The goal of StreamPipes is to enable domain experts to do their data analysis themselves by providing tooling, where such processing pipelines can be modeled in a graphical user interface and then executed automatically without the need of an IT expert.
+Processing engines which are used as the basis of the processing elements in our solution often require a higher technological understanding.
+If this understanding is available, they can also be used on their own.
+We use such systems, like Apache Flink, Apache Spark or the brand-new KSQL by Confluent, for the processing but provide an abstraction over them to enable domain experts to model pipelines themselves.
+This has also the advantages that individual runtime solutions can be exchanged over time.
+Furthermore, we provide a semantic layer for all elements, including data sources, processing elements, and data sinks.
+With that layer, our system is capable of understanding the meaning and further support the user to ensure that just semantically correct pipelines are created.</p>
+<p>In this first blog post of our series, we gave a first introduction how data produced by machines and systems can be analyzed and value can be generated out of it.
+In the following blog posts we explain the individual parts in more detail to provide you with enough knowledge to start analyzing your own data.</p>
+<ul>
+<li><strong><a href="/blog/2018/06/18/how-to-understand-your-machine-data">Part 1: Overview</a></strong></li>
+<li>Part 2: Data Sources</li>
+<li>Part 3: Data Processing Elements</li>
+<li>Part 4: Data Sinks</li>
+<li>Part 5: Putting it all together (Example Pipeline)</li>
+<li>Part 6: Practical Tips</li>
+</ul>
+</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) {
+                  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/streampipes-docs/blog/2018/06/18/how-to-understand-your-machine-data/index.html b/docs/streampipes-docs/blog/2018/06/18/how-to-understand-your-machine-data/index.html
new file mode 100644
index 0000000..5b3249c
--- /dev/null
+++ b/docs/streampipes-docs/blog/2018/06/18/how-to-understand-your-machine-data/index.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>How to understand your machine data? · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="**&lt;div style=&quot;float: left; padding-right: 40px;&quot;&gt;8 minutes to read&lt;/div&gt;**"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Ho [...]
+        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.65.0</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 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.
+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>
+<!--truncate-->
+<p>When it comes to data analytics people often talk about the big players like Google, Facebook, or Netflix which collect a lot of data about their users and their usage behavior.
+The core of their business model is to use data and turn it into profit. Nowadays all companies have the requirement to analyze their data.
+But since this was not originally part of their business model it is very challenging for them to catch up.
+To gain insights from data, it is often referred to advanced analytics and machine learning. Before such techniques can be used some work must be done.
+A first, basic part of that is to understand your data. We do that in four steps, as can be seen in figure below.
+First data sources must be accessed, then they can be integrated and for example be stored in a data lake.
+After that, we employ rule-based analytics to find patterns and situations.
+In the end, machine learning and advanced analytics algorithms can be used to get more out of the data.
+The idea behind those steps is to generate value as early as possible by collecting the low-hanging fruits first.
+We develop methodologies and tools for the individual steps to also allow domain experts to perform them to bridge the gap between the big tech companies and more traditional industries.</p>
+<p><img class="blog-image" style="max-width:50%;" src="/blog/assets/2018-06-18/01_motivation.png" alt="Motivation Graphic"></p>
+<p>The questions we try to answer in these blog posts are:</p>
+<ul>
+<li><strong>How does data produced by machines look like?</strong></li>
+<li><strong>How can machines and other data sources be accessed?</strong></li>
+<li><strong>How is it possible to process the continuously produced flow of data?</strong></li>
+</ul>
+<p>We illustrate our ideas with an example which we also use during the whole blog series.
+The example is a water circle of a cooling system. You can see such a system in the next image.
+It contains multiple water tanks and pipes that connect those tanks.
+Within the tanks and the pipes are multiple sensors, which measure for example the water level in the tank, the flow rate in the water pipe, or the temperature of the water.
+All those sensors are very simple, they make iterative observations and send the sensed measurements to a computer system.</p>
+<p><img class="blog-image" style="max-width:70%;" src="/blog/assets/2018-06-18/02_anlage.png" alt="Water Circle Image"></p>
+<p>Before we go into detail, we want to explain the term streaming data, because we focus on machine and sensor data which is continually produced in a streaming fashion.
+The opposite of streaming data are fixed sized data sets, called batch data.
+Since always new data is produced by sensors, it is not possible to wait till all data is completely produced and then process it.
+Different to that is batch data.
+The advantage of batch data is, when the processing starts no new data is added anymore.
+Streaming data can also be processed with batch processing systems.
+Therefore, a data stream must be separated into fixed chunks which are then processed in a batch fashion.
+This is possible but the more natural fit is to use streaming systems since they were designed to process streaming data.</p>
+<p>In an environment where we process machine data we have different components.
+The individual components exchange information in the form of <strong>events</strong>.
+All assets continually producing data are called <strong>data sources</strong> (i.e. a sensor, machine or a software system).
+To access these data sources, <strong>adapters</strong> are needed.
+Adapters are software components (which can run anywhere, for example directly on the machine or separately on a edge device near the machine) that are able to connect to the data source, extract the sensor information and emit events to the <strong>middleware</strong>.
+The middleware is a central component which is an intermediate between the individual components.
+Even if the middleware is a central component, it is not a bottleneck and also not a single point of failure since it is often realized in form of a distributed system.
+<strong>Processing systems</strong> can access data from the middleware, transform it and apply algorithms.
+This is the component where the data is analyzed and higher-level information is generated.
+In the end, results can be stored in <strong>data bases</strong>.
+From there, other applications like for example dashboards can access the calculated results.
+This is the high-level architecture of processing data streams.</p>
+<p><img class="blog-image" src="/blog/assets/2018-06-18/03_architecture.png" alt="Overall architecture"></p>
+<p>Once the events are integrated into a middleware, it must be processed to detect situations and generate higher-level events.
+This can be done in an <strong>Event Processing Network (EPN)</strong>.
+An EPN consists of one or multiple <strong>data sources, event processors</strong> transforming and detecting patterns in the data and finally <strong>data sinks</strong>, which can be data bases, alarms or other systems.
+Below such a pipeline is shown where we have two sensors as data sources: A flow rate sensor measuring the flow rate in a water pipe and a water level sensor in a water tank.
+It further contains three processing elements, each with a different functionality.
+The first one detects increases in the water tank, the second one filters out values under a defined threshold.
+The last of the processing elements detects when both situations occur within a defined time window.
+In the end, we employ a data sink, which triggers a notification for a service technician once the modeled situation occurs.
+We call such instances of EPNs processing <strong>pipelines</strong>.</p>
+<p><img class="blog-image" src="/blog/assets/2018-06-18/04_pipeline.png" alt="Example Pipeline"></p>
+<p>The pipeline in the image before contains three different processing elements.
+Those elements contain the actual algorithms.
+Such algorithms can be as easy as simple filters on a sensor value or can also be more complex, such as patterns that occur over a period of time.
+But they can also contain machine learning and advanced analytics algorithms (e.g. neural networks) that perform predictions on data streams.
+Event processors are just an abstraction that take a data stream as an input and expose a “new” data stream.
+Furthermore, they contain configuration parameters which can be defined by a user.
+With this concept, we can create reusable components that can be used in many different pipelines.</p>
+<p>The goal of StreamPipes is to enable domain experts to do their data analysis themselves by providing tooling, where such processing pipelines can be modeled in a graphical user interface and then executed automatically without the need of an IT expert.
+Processing engines which are used as the basis of the processing elements in our solution often require a higher technological understanding.
+If this understanding is available, they can also be used on their own.
+We use such systems, like Apache Flink, Apache Spark or the brand-new KSQL by Confluent, for the processing but provide an abstraction over them to enable domain experts to model pipelines themselves.
+This has also the advantages that individual runtime solutions can be exchanged over time.
+Furthermore, we provide a semantic layer for all elements, including data sources, processing elements, and data sinks.
+With that layer, our system is capable of understanding the meaning and further support the user to ensure that just semantically correct pipelines are created.</p>
+<p>In this first blog post of our series, we gave a first introduction how data produced by machines and systems can be analyzed and value can be generated out of it.
+In the following blog posts we explain the individual parts in more detail to provide you with enough knowledge to start analyzing your own data.</p>
+<ul>
+<li><strong><a href="/blog/2018/06/18/how-to-understand-your-machine-data">Part 1: Overview</a></strong></li>
+<li>Part 2: Data Sources</li>
+<li>Part 3: Data Processing Elements</li>
+<li>Part 4: Data Sinks</li>
+<li>Part 5: Putting it all together (Example Pipeline)</li>
+<li>Part 6: Practical Tips</li>
+</ul>
+</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) {
+                  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/streampipes-docs/blog/2018/09/17/preview-060.html b/docs/streampipes-docs/blog/2018/09/17/preview-060.html
new file mode 100644
index 0000000..219f9f7
--- /dev/null
+++ b/docs/streampipes-docs/blog/2018/09/17/preview-060.html
@@ -0,0 +1,114 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Preview: StreamPipes release 0.60.0 · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="**&lt;div style=&quot;float: left; padding-right: 40px;&quot;&gt;5 minutes to read&lt;/div&gt;**"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Pre [...]
+        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.65.0</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 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>
+<!--truncate-->
+<p>Our first public release is now about 6 months ago. In the meantime, we gathered lots of feedback we got from users concerned with the installation, available pipeline elements and usability.
+We learned what users expect from the tool and really tried to implement feature suggestions from the community.</p>
+<p>Here are the major things you'll find in the next version which will be released by the end of September:</p>
+<h2><a class="anchor" aria-hidden="true" id="installation-and-first-time-usage"></a><a href="#installation-and-first-time-usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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.5S1 [...]
+<p>We aim to make it as easy as possible for first-time users to try and test StreamPipes. Although we have provided Docker images and a docker-compose file from the beginning, we've learned that our target group looks for an easier way to install the tool, without the need to manually configuring things like ports or hostnames.
+For that reason, we have implemented an installer that is already on <a href="https://www.github.com/streampipes/streampipes-installer">Github</a>. With the next release, you'll find an even easier installer along with a dev-installer targeted at more advanced users that allows to configure the services and pipeline element containers you'd like to use in your StreamPipes instance.</p>
+<p>In addition, we wanted to provide better support for users that are trying to build a pipeline for the first time. Although we provide a tour and a user guide, we are aware that nobody likes reading documentations ;-)
+Therefore, the next release includes an interactive product tour that guides you through the first steps with StreamPipes and explains how to build pipelines - right in the pipeline editor!</p>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2018-09-17/streampipes-060-product-tour.png" alt="Product Tour"></p>
+<h2><a class="anchor" aria-hidden="true" id="streampipes-connect"></a><a href="#streampipes-connect" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>Although the SDK provides a developer-oriented way to connect new data sources, many users have asked us to provide an easier way to connect sources and data streams to StreamPipes.
+The next release includes a beta release of StreamPipes Connect. Connect is a major effort that integrates work we've done over the past year and provides an easy way to integrate your data streams right from the UI.
+A data marketplace contains a list of pre-defined adapters (which can be rather generic by selecting a protocol and a data format or quite specific as, e.g., an openSenseMap source).
+These adapters can be configured according to your needs and directly started on a set of worker nodes.</p>
+<p>StreamPipes Connect also lays the foundation for some cool new features that make it even easier to connect sources and will be added over the next months.
+In addition, pre-processing features will be integrated that will support edge computing use cases.</p>
+<p>Be aware that StreamPipes Connect will be released in a rather early version, so don't use it for production yet.</p>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2018-09-17/streampipes-060.png" alt="StreamPipes Connect"></p>
+<h2><a class="anchor" aria-hidden="true" id="pipeline-elements"></a><a href="#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-.98 0-2-1.22-2- [...]
+<p>Pipeline elements (data processors and sinks) are the part of StreamPipes that generate added-value.
+While the first release contained a set of around 10 pipeline elements, the next release will provide many new elements that are already integrated.
+New elements will include pattern detection algorithms, geospatial operators, image processing algorithms (e.g., a generic classifier) and even a Slack sink!</p>
+<p>In total, the next version includes more than 40 pipeline elements and we will add many more during the next months.
+The new pipeline elements are already available on <a href="https://www.github.com/streampipes/streampipes-pipeline-elements">Github</a> and will be released as Docker images by the end of September.</p>
+<h2><a class="anchor" aria-hidden="true" id="other-features-and-improvements"></a><a href="#other-features-and-improvements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 [...]
+<ul>
+<li>A new wrapper for the <a href="https://github.com/wso2/siddhi">Siddhi</a> CEP engine</li>
+<li>various bug fixes and stability improvements</li>
+<li>many UX improvements</li>
+<li>many more, stay tuned for the next blog post!</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="feedback"></a><a href="#feedback" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>We are absolutely open to your suggestions for further improvements! Let us know (by <a href="mailto:feedback@streampipes.org">mail</a>, <a href="https://slack.streampipes.org">slack</a> or <a href="https://www.twitter.com/streampipes">twitter</a>) and we'll consider your feature request in the next release!</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"><ul class="toc-headings"><li><a href="#installation-and-first-time-usage">Installation and first-time usage</a></li><li><a href="#streampipes-connect">StreamPipes Connect</a></li><li><a href="#pipeline-elements">Pipeline Elements</a></li><li><a href="#other-features-and-improvements">Other features and improvem [...]
+                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/streampipes-docs/blog/2018/09/17/preview-060/index.html b/docs/streampipes-docs/blog/2018/09/17/preview-060/index.html
new file mode 100644
index 0000000..219f9f7
--- /dev/null
+++ b/docs/streampipes-docs/blog/2018/09/17/preview-060/index.html
@@ -0,0 +1,114 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Preview: StreamPipes release 0.60.0 · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="**&lt;div style=&quot;float: left; padding-right: 40px;&quot;&gt;5 minutes to read&lt;/div&gt;**"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Pre [...]
+        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.65.0</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 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>
+<!--truncate-->
+<p>Our first public release is now about 6 months ago. In the meantime, we gathered lots of feedback we got from users concerned with the installation, available pipeline elements and usability.
+We learned what users expect from the tool and really tried to implement feature suggestions from the community.</p>
+<p>Here are the major things you'll find in the next version which will be released by the end of September:</p>
+<h2><a class="anchor" aria-hidden="true" id="installation-and-first-time-usage"></a><a href="#installation-and-first-time-usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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.5S1 [...]
+<p>We aim to make it as easy as possible for first-time users to try and test StreamPipes. Although we have provided Docker images and a docker-compose file from the beginning, we've learned that our target group looks for an easier way to install the tool, without the need to manually configuring things like ports or hostnames.
+For that reason, we have implemented an installer that is already on <a href="https://www.github.com/streampipes/streampipes-installer">Github</a>. With the next release, you'll find an even easier installer along with a dev-installer targeted at more advanced users that allows to configure the services and pipeline element containers you'd like to use in your StreamPipes instance.</p>
+<p>In addition, we wanted to provide better support for users that are trying to build a pipeline for the first time. Although we provide a tour and a user guide, we are aware that nobody likes reading documentations ;-)
+Therefore, the next release includes an interactive product tour that guides you through the first steps with StreamPipes and explains how to build pipelines - right in the pipeline editor!</p>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2018-09-17/streampipes-060-product-tour.png" alt="Product Tour"></p>
+<h2><a class="anchor" aria-hidden="true" id="streampipes-connect"></a><a href="#streampipes-connect" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>Although the SDK provides a developer-oriented way to connect new data sources, many users have asked us to provide an easier way to connect sources and data streams to StreamPipes.
+The next release includes a beta release of StreamPipes Connect. Connect is a major effort that integrates work we've done over the past year and provides an easy way to integrate your data streams right from the UI.
+A data marketplace contains a list of pre-defined adapters (which can be rather generic by selecting a protocol and a data format or quite specific as, e.g., an openSenseMap source).
+These adapters can be configured according to your needs and directly started on a set of worker nodes.</p>
+<p>StreamPipes Connect also lays the foundation for some cool new features that make it even easier to connect sources and will be added over the next months.
+In addition, pre-processing features will be integrated that will support edge computing use cases.</p>
+<p>Be aware that StreamPipes Connect will be released in a rather early version, so don't use it for production yet.</p>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2018-09-17/streampipes-060.png" alt="StreamPipes Connect"></p>
+<h2><a class="anchor" aria-hidden="true" id="pipeline-elements"></a><a href="#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-.98 0-2-1.22-2- [...]
+<p>Pipeline elements (data processors and sinks) are the part of StreamPipes that generate added-value.
+While the first release contained a set of around 10 pipeline elements, the next release will provide many new elements that are already integrated.
+New elements will include pattern detection algorithms, geospatial operators, image processing algorithms (e.g., a generic classifier) and even a Slack sink!</p>
+<p>In total, the next version includes more than 40 pipeline elements and we will add many more during the next months.
+The new pipeline elements are already available on <a href="https://www.github.com/streampipes/streampipes-pipeline-elements">Github</a> and will be released as Docker images by the end of September.</p>
+<h2><a class="anchor" aria-hidden="true" id="other-features-and-improvements"></a><a href="#other-features-and-improvements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 [...]
+<ul>
+<li>A new wrapper for the <a href="https://github.com/wso2/siddhi">Siddhi</a> CEP engine</li>
+<li>various bug fixes and stability improvements</li>
+<li>many UX improvements</li>
+<li>many more, stay tuned for the next blog post!</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="feedback"></a><a href="#feedback" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>We are absolutely open to your suggestions for further improvements! Let us know (by <a href="mailto:feedback@streampipes.org">mail</a>, <a href="https://slack.streampipes.org">slack</a> or <a href="https://www.twitter.com/streampipes">twitter</a>) and we'll consider your feature request in the next release!</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"><ul class="toc-headings"><li><a href="#installation-and-first-time-usage">Installation and first-time usage</a></li><li><a href="#streampipes-connect">StreamPipes Connect</a></li><li><a href="#pipeline-elements">Pipeline Elements</a></li><li><a href="#other-features-and-improvements">Other features and improvem [...]
+                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/streampipes-docs/blog/2018/11/24/container-cli.html b/docs/streampipes-docs/blog/2018/11/24/container-cli.html
new file mode 100644
index 0000000..23ede79
--- /dev/null
+++ b/docs/streampipes-docs/blog/2018/11/24/container-cli.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>ContainerCLI: A CLI tool for your Docker Application · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="**&lt;div style=&quot;float: left; padding-right: 40px;&quot;&gt;6 minutes to read&lt;/div&gt;**"/><meta name="docsearch:language" content="en"/><meta property="og:ti [...]
+        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.65.0</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 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.
+All you need is a working docker-compose.yml file.</p>
+<!--truncate-->
+<p>StreamPipes has a Microservice architecture and we use Docker and Docker Compose for all of our development, testing, and deployment processes.
+In the beginning, we developed the CLI only to ease the installation process (e.g. managing multiple versions), but over time we realized that the tool is much more powerful.
+For example, StreamPipes has multiple developer roles: Some developers are working on the frontend, others on the backend, and some are developing new algorithms and data sinks for StreamPipes.
+In the figure below, you can see different configurations that are used by different developers.
+All services are running in docker, except for the ones the developer is currently working on.
+As a result, we had many different docker-compose.yml files and when we made changes, we had to synchronize them all.</p>
+<p><img class="blog-image" style="max-width:60%;" src="/blog/assets/2018-11-24/roles.png" alt="Three different developer roles"></p>
+<p>Therefore, our goal was to speed up the setup of a development environment, so that developers can focus on their specific programming task.
+That’s why we developed a command line tool that automates the setup of different environments.
+All what is needed is a docker-compose.yml file that describes all services of the application and the template CLI project from <a href="https://github.com/streampipes/container-cli">GitHub</a>.
+Afterwards, you need to split up your compose file and create an individual file for each service. Put those files in individual folders in the services folder.
+Each folder should have the same name as the service name in the docker-compose file. That’s it!
+Now you can use the CLI.
+With the default commands you are able to start, stop, and configure the application. But how is this better than just using docker itself?
+The advantage is the flexibility and extensibility of the tool.
+You can extend the script with tasks you have to perform regularly, like cleaning up volumes, or setting up testing environments.</p>
+<p>In the following we will describe the tool in more detail.
+You can see all files and folders of the CLI Tool in the next listing.
+The first file “container-cli.m4” contains the script.
+We use <a href="https://argbash.io/">Argbash</a>, which eases the use of bash script parameters and flags.
+In this file you can easily add new custom commands, flags or other functionalities.
+The next file is the actual bash script. It is generated by argbash.
+Since this file is generated automatically, you should not change anything.
+The docker-compose.yml file is the main file.
+This should contain all services, networks, or volume information that is relevant for all the other services of your application.
+All your other services are located in the services folder.
+For each service, create a folder with the name of the service and place a docker-compose.yml in the folder configuring the service.
+Therefore, you can copy and paste the configuration from your current docker-compose.yml.
+The script checks the services folder dynamically, this means you can add services at a later point in time without changing anything else.
+In our example, we have four services: Backend, UI, database, and a test database containing data for the end2end tests.
+Which services should be started when running the command <strong>&quot;container-cli start&quot;</strong> is defined in the active-service file.
+This file contains the names of all services, each in one line, that should be started.
+Often it is required to have multiple configurations of your app. You can save them in the templates folder.
+By running <strong>“container-cli set-template ui_developer”</strong>, you can select the template ui_developer.
+With this command, all services defined in the template are written to the active-services file. (e.g. the ui_developer template contains just the database and backend and the e2e-test template contains the backend, ui, and test-database).</p>
+<p><img class="blog-image" style="max-width:30%;" src="/blog/assets/2018-11-24/files.png" alt="Structure of the containter cli project"></p>
+<p>The last file is the tmpl_env file.
+It contains configuration variables for the individual services.
+Those variables can also be changed by the bash script dynamically, because the tmpl_env file is moved to the .env file in the same folder.
+We use the configuration for example to dynamically set the IP Address of the host system or set the application version.
+To use a variable in a docker-compose file just write it in braces, as shown below.</p>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2018-11-24/variables.png" alt="How to use Environment Variables"></p>
+<p>We hope this tool is helpful for your use case.
+When you have any problems, feedback, or ideas for improvements, contact us or open an issue on <a href="https://github.com/streampipes/container-cli">GitHub</a>.</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) {
+                  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/streampipes-docs/blog/2018/11/24/container-cli/index.html b/docs/streampipes-docs/blog/2018/11/24/container-cli/index.html
new file mode 100644
index 0000000..23ede79
--- /dev/null
+++ b/docs/streampipes-docs/blog/2018/11/24/container-cli/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>ContainerCLI: A CLI tool for your Docker Application · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="**&lt;div style=&quot;float: left; padding-right: 40px;&quot;&gt;6 minutes to read&lt;/div&gt;**"/><meta name="docsearch:language" content="en"/><meta property="og:ti [...]
+        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.65.0</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 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.
+All you need is a working docker-compose.yml file.</p>
+<!--truncate-->
+<p>StreamPipes has a Microservice architecture and we use Docker and Docker Compose for all of our development, testing, and deployment processes.
+In the beginning, we developed the CLI only to ease the installation process (e.g. managing multiple versions), but over time we realized that the tool is much more powerful.
+For example, StreamPipes has multiple developer roles: Some developers are working on the frontend, others on the backend, and some are developing new algorithms and data sinks for StreamPipes.
+In the figure below, you can see different configurations that are used by different developers.
+All services are running in docker, except for the ones the developer is currently working on.
+As a result, we had many different docker-compose.yml files and when we made changes, we had to synchronize them all.</p>
+<p><img class="blog-image" style="max-width:60%;" src="/blog/assets/2018-11-24/roles.png" alt="Three different developer roles"></p>
+<p>Therefore, our goal was to speed up the setup of a development environment, so that developers can focus on their specific programming task.
+That’s why we developed a command line tool that automates the setup of different environments.
+All what is needed is a docker-compose.yml file that describes all services of the application and the template CLI project from <a href="https://github.com/streampipes/container-cli">GitHub</a>.
+Afterwards, you need to split up your compose file and create an individual file for each service. Put those files in individual folders in the services folder.
+Each folder should have the same name as the service name in the docker-compose file. That’s it!
+Now you can use the CLI.
+With the default commands you are able to start, stop, and configure the application. But how is this better than just using docker itself?
+The advantage is the flexibility and extensibility of the tool.
+You can extend the script with tasks you have to perform regularly, like cleaning up volumes, or setting up testing environments.</p>
+<p>In the following we will describe the tool in more detail.
+You can see all files and folders of the CLI Tool in the next listing.
+The first file “container-cli.m4” contains the script.
+We use <a href="https://argbash.io/">Argbash</a>, which eases the use of bash script parameters and flags.
+In this file you can easily add new custom commands, flags or other functionalities.
+The next file is the actual bash script. It is generated by argbash.
+Since this file is generated automatically, you should not change anything.
+The docker-compose.yml file is the main file.
+This should contain all services, networks, or volume information that is relevant for all the other services of your application.
+All your other services are located in the services folder.
+For each service, create a folder with the name of the service and place a docker-compose.yml in the folder configuring the service.
+Therefore, you can copy and paste the configuration from your current docker-compose.yml.
+The script checks the services folder dynamically, this means you can add services at a later point in time without changing anything else.
+In our example, we have four services: Backend, UI, database, and a test database containing data for the end2end tests.
+Which services should be started when running the command <strong>&quot;container-cli start&quot;</strong> is defined in the active-service file.
+This file contains the names of all services, each in one line, that should be started.
+Often it is required to have multiple configurations of your app. You can save them in the templates folder.
+By running <strong>“container-cli set-template ui_developer”</strong>, you can select the template ui_developer.
+With this command, all services defined in the template are written to the active-services file. (e.g. the ui_developer template contains just the database and backend and the e2e-test template contains the backend, ui, and test-database).</p>
+<p><img class="blog-image" style="max-width:30%;" src="/blog/assets/2018-11-24/files.png" alt="Structure of the containter cli project"></p>
+<p>The last file is the tmpl_env file.
+It contains configuration variables for the individual services.
+Those variables can also be changed by the bash script dynamically, because the tmpl_env file is moved to the .env file in the same folder.
+We use the configuration for example to dynamically set the IP Address of the host system or set the application version.
+To use a variable in a docker-compose file just write it in braces, as shown below.</p>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2018-11-24/variables.png" alt="How to use Environment Variables"></p>
+<p>We hope this tool is helpful for your use case.
+When you have any problems, feedback, or ideas for improvements, contact us or open an issue on <a href="https://github.com/streampipes/container-cli">GitHub</a>.</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) {
+                  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/streampipes-docs/blog/2019/04/04/release-0610.html b/docs/streampipes-docs/blog/2019/04/04/release-0610.html
new file mode 100644
index 0000000..a0086c5
--- /dev/null
+++ b/docs/streampipes-docs/blog/2019/04/04/release-0610.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>StreamPipes release 0.61.0 · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="**&lt;div style=&quot;float: left; padding-right: 40px;&quot;&gt;5 minutes to read&lt;/div&gt;**"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="StreamPipes  [...]
+        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.65.0</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 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>
+<!--truncate-->
+<p>Our main mission is to make IoT data management &amp; analytics accessible to everyone.
+This release focuses on better integrating StreamPipes with other systems and data sources and contains UX improvements to ease the development of pipelines.</p>
+<h2><a class="anchor" aria-hidden="true" id="streampipes-connect"></a><a href="#streampipes-connect" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>StreamPipes Connect, which aims to easily connect arbitrary data sources with StreamPipes, has been first introduced as a public beta in version 0.60.0.
+Version 0.61.0 brings many new features to Connect and also implements many bug fixes that now make Connect the recommended way to connect data sources.</p>
+<p>StreamPipes Connect relies on an extensible architecture to connect either generic protocols or specific adapters.</p>
+<p>In more detail, StreamPipes Connect supports the following protocols, with a completely code-free integration process:</p>
+<ul>
+<li><p>Data Streams</p>
+<ul>
+<li>HTTP/REST</li>
+<li>MQTT</li>
+<li>Apache Kafka</li>
+<li>File</li>
+<li>ROS (preview)</li>
+<li>GDELT</li>
+</ul></li>
+<li><p>Data Sets</p>
+<ul>
+<li>HTTP/REST</li>
+<li>HDFS</li>
+<li>File</li>
+</ul></li>
+</ul>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2019-04-04/connect.png" alt="StreamPipes Connect"></p>
+<p>The next version will also include an adapter for OPC UA, which is currently being tested in a real setting.</p>
+<p>For protocols that are not yet supported by StreamPipes Connect, a new Maven archetype for easily connecting data sources using the <a href="/docs/dev-guide-tutorial-sources">SDK</a> is provided.</p>
+<h2><a class="anchor" aria-hidden="true" id="improved-pipeline-modeling"></a><a href="#improved-pipeline-modeling" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 12H [...]
+<p>On the UI side, we try to make the graphical modeling of pipelines as simple as possible. Besides some minor improvements (e.g., case-insensitive search for pipeline elements), pipelines are now constantly validated and users get feedback on steps that are still missing (e.g., missing pipeline elements).
+As many other features we are currently implementing, this feature directly comes from a user request - so if you have any suggestions for improvement, let us know!</p>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2019-04-04/validation.png" alt="Pipeline Validation"></p>
+<h2><a class="anchor" aria-hidden="true" id="reworked-event-model"></a><a href="#reworked-event-model" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>One of the most important features of v0.61.0 is not directly visible to end users, but drastically eases the development of new pipeline elements with the SDK.
+From this release on, events at runtime are represented in form of a new <code>Event Object</code> instead of the former <code>Map</code> representation.
+This feature allows us for much better support of complex data processors which have more than one input data stream and comes with many convenience methods to better extrat fields from an event for processing.</p>
+<p>For instance, prior to v0.61.0 you had to extract fields from an incoming events as follows:</p>
+<pre><code class="hljs css language-java"><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">onEvent</span><span class="hljs-params">(Map&lt;String, Object&gt; in, String s, SpOutputCollector out)</span> </span>{
+       Integer numberValue = Integer.parseInt(String.valueOf(in.get(MAPPING_PROPERTY_ID));
+  }
+</code></pre>
+<p>The new event model is much simpler and less error-prone:</p>
+<pre><code class="hljs css language-java"> <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onEvent</span><span class="hljs-params">(Event in, SpOutputCollector out)</span> <span class="hljs-keyword">throws</span> SpRuntimeException </span>{
+    Integer numberValue = in
+        .getFieldBySelector(MAPPING_PROPERTY_SELECTOR)
+        .getAsPrimitive()
+        .getAsInteger();
+  }
+</code></pre>
+<p>The new event model is even more useful in cases where your data streams have a complex nested structure or contain list fields.
+If you connect two data streams containing the same fields to a processor, field names are automatically renamed in the background to avoid naming conflicts.
+A complete guide can be found in the <a href="/docs/dev-guide-event-model">developer guide</a>.</p>
+<h2><a class="anchor" aria-hidden="true" id="documentation"></a><a href="#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.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 developer guide has been extended:
+Besides reworked tutorials on developing new data processors and data sources, the new documentation includes instructions on adding <a href="/docs/dev-guide-stream-requirements">stream requirements</a>, the new <a href="/docs/dev-guide-event-model">event model</a>, and in-depth guides on defining <a href="/docs/dev-guide-static-properties">static properties</a> and <a href="/docs/dev-guide-output-strategies">output strategies</a>.</p>
+<h2><a class="anchor" aria-hidden="true" id="other-features-and-improvements"></a><a href="#other-features-and-improvements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 [...]
+<ul>
+<li>SSL support: The UI can now be configured to support SSL, see the <a href="/docs/dev-guide-ssl">documentation</a> on required configurations in your docker-compose file.</li>
+<li>A new map visualization to visualize spatial data streams</li>
+<li>The customize dialog is now hidden in case no static properties are present</li>
+<li>Adapter descriptions can be exported and imported</li>
+<li>The UI does no longer load any external sources</li>
+<li>Updated Maven archetypes</li>
+</ul>
+<p>See the <a href="https://github.com/streampipes/streampipes/releases/tag/0.61.0">release notes</a> for more details.</p>
+<h2><a class="anchor" aria-hidden="true" id="feedback"></a><a href="#feedback" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>We are absolutely open to your suggestions for further improvements! Let us know (by <a href="mailto:feedback@streampipes.org">mail</a>, <a href="https://slack.streampipes.org">slack</a> or <a href="https://www.twitter.com/streampipes">twitter</a>) and we'll consider your feature request in the next release!</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"><ul class="toc-headings"><li><a href="#streampipes-connect">StreamPipes Connect</a></li><li><a href="#improved-pipeline-modeling">Improved Pipeline Modeling</a></li><li><a href="#reworked-event-model">Reworked Event Model</a></li><li><a href="#documentation">Documentation</a></li><li><a href="#other-features-an [...]
+                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/streampipes-docs/blog/2019/04/04/release-0610/index.html b/docs/streampipes-docs/blog/2019/04/04/release-0610/index.html
new file mode 100644
index 0000000..a0086c5
--- /dev/null
+++ b/docs/streampipes-docs/blog/2019/04/04/release-0610/index.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>StreamPipes release 0.61.0 · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="**&lt;div style=&quot;float: left; padding-right: 40px;&quot;&gt;5 minutes to read&lt;/div&gt;**"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="StreamPipes  [...]
+        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.65.0</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 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>
+<!--truncate-->
+<p>Our main mission is to make IoT data management &amp; analytics accessible to everyone.
+This release focuses on better integrating StreamPipes with other systems and data sources and contains UX improvements to ease the development of pipelines.</p>
+<h2><a class="anchor" aria-hidden="true" id="streampipes-connect"></a><a href="#streampipes-connect" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>StreamPipes Connect, which aims to easily connect arbitrary data sources with StreamPipes, has been first introduced as a public beta in version 0.60.0.
+Version 0.61.0 brings many new features to Connect and also implements many bug fixes that now make Connect the recommended way to connect data sources.</p>
+<p>StreamPipes Connect relies on an extensible architecture to connect either generic protocols or specific adapters.</p>
+<p>In more detail, StreamPipes Connect supports the following protocols, with a completely code-free integration process:</p>
+<ul>
+<li><p>Data Streams</p>
+<ul>
+<li>HTTP/REST</li>
+<li>MQTT</li>
+<li>Apache Kafka</li>
+<li>File</li>
+<li>ROS (preview)</li>
+<li>GDELT</li>
+</ul></li>
+<li><p>Data Sets</p>
+<ul>
+<li>HTTP/REST</li>
+<li>HDFS</li>
+<li>File</li>
+</ul></li>
+</ul>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2019-04-04/connect.png" alt="StreamPipes Connect"></p>
+<p>The next version will also include an adapter for OPC UA, which is currently being tested in a real setting.</p>
+<p>For protocols that are not yet supported by StreamPipes Connect, a new Maven archetype for easily connecting data sources using the <a href="/docs/dev-guide-tutorial-sources">SDK</a> is provided.</p>
+<h2><a class="anchor" aria-hidden="true" id="improved-pipeline-modeling"></a><a href="#improved-pipeline-modeling" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 12H [...]
+<p>On the UI side, we try to make the graphical modeling of pipelines as simple as possible. Besides some minor improvements (e.g., case-insensitive search for pipeline elements), pipelines are now constantly validated and users get feedback on steps that are still missing (e.g., missing pipeline elements).
+As many other features we are currently implementing, this feature directly comes from a user request - so if you have any suggestions for improvement, let us know!</p>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2019-04-04/validation.png" alt="Pipeline Validation"></p>
+<h2><a class="anchor" aria-hidden="true" id="reworked-event-model"></a><a href="#reworked-event-model" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>One of the most important features of v0.61.0 is not directly visible to end users, but drastically eases the development of new pipeline elements with the SDK.
+From this release on, events at runtime are represented in form of a new <code>Event Object</code> instead of the former <code>Map</code> representation.
+This feature allows us for much better support of complex data processors which have more than one input data stream and comes with many convenience methods to better extrat fields from an event for processing.</p>
+<p>For instance, prior to v0.61.0 you had to extract fields from an incoming events as follows:</p>
+<pre><code class="hljs css language-java"><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">onEvent</span><span class="hljs-params">(Map&lt;String, Object&gt; in, String s, SpOutputCollector out)</span> </span>{
+       Integer numberValue = Integer.parseInt(String.valueOf(in.get(MAPPING_PROPERTY_ID));
+  }
+</code></pre>
+<p>The new event model is much simpler and less error-prone:</p>
+<pre><code class="hljs css language-java"> <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onEvent</span><span class="hljs-params">(Event in, SpOutputCollector out)</span> <span class="hljs-keyword">throws</span> SpRuntimeException </span>{
+    Integer numberValue = in
+        .getFieldBySelector(MAPPING_PROPERTY_SELECTOR)
+        .getAsPrimitive()
+        .getAsInteger();
+  }
+</code></pre>
+<p>The new event model is even more useful in cases where your data streams have a complex nested structure or contain list fields.
+If you connect two data streams containing the same fields to a processor, field names are automatically renamed in the background to avoid naming conflicts.
+A complete guide can be found in the <a href="/docs/dev-guide-event-model">developer guide</a>.</p>
+<h2><a class="anchor" aria-hidden="true" id="documentation"></a><a href="#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.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 developer guide has been extended:
+Besides reworked tutorials on developing new data processors and data sources, the new documentation includes instructions on adding <a href="/docs/dev-guide-stream-requirements">stream requirements</a>, the new <a href="/docs/dev-guide-event-model">event model</a>, and in-depth guides on defining <a href="/docs/dev-guide-static-properties">static properties</a> and <a href="/docs/dev-guide-output-strategies">output strategies</a>.</p>
+<h2><a class="anchor" aria-hidden="true" id="other-features-and-improvements"></a><a href="#other-features-and-improvements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 [...]
+<ul>
+<li>SSL support: The UI can now be configured to support SSL, see the <a href="/docs/dev-guide-ssl">documentation</a> on required configurations in your docker-compose file.</li>
+<li>A new map visualization to visualize spatial data streams</li>
+<li>The customize dialog is now hidden in case no static properties are present</li>
+<li>Adapter descriptions can be exported and imported</li>
+<li>The UI does no longer load any external sources</li>
+<li>Updated Maven archetypes</li>
+</ul>
+<p>See the <a href="https://github.com/streampipes/streampipes/releases/tag/0.61.0">release notes</a> for more details.</p>
+<h2><a class="anchor" aria-hidden="true" id="feedback"></a><a href="#feedback" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>We are absolutely open to your suggestions for further improvements! Let us know (by <a href="mailto:feedback@streampipes.org">mail</a>, <a href="https://slack.streampipes.org">slack</a> or <a href="https://www.twitter.com/streampipes">twitter</a>) and we'll consider your feature request in the next release!</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"><ul class="toc-headings"><li><a href="#streampipes-connect">StreamPipes Connect</a></li><li><a href="#improved-pipeline-modeling">Improved Pipeline Modeling</a></li><li><a href="#reworked-event-model">Reworked Event Model</a></li><li><a href="#documentation">Documentation</a></li><li><a href="#other-features-an [...]
+                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/streampipes-docs/blog/2019/05/23/release-0620.html b/docs/streampipes-docs/blog/2019/05/23/release-0620.html
new file mode 100644
index 0000000..5891727
--- /dev/null
+++ b/docs/streampipes-docs/blog/2019/05/23/release-0620.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>StreamPipes release 0.62.0 · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="**&lt;div style=&quot;float: left; padding-right: 40px;&quot;&gt;6 minutes to read&lt;/div&gt;**"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="StreamPipes  [...]
+        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.65.0</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 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>
+<!--truncate-->
+<p>For this release, we focused on improving error handling in the pipeline editor, added more pipeline elements, added more adapters to StreamPipes Connect and, added a documentation on available pipeline elements.</p>
+<h2><a class="anchor" aria-hidden="true" id="pipeline-elements"></a><a href="#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-.98 0-2-1.22-2- [...]
+<p>Pipeline elements are the most important part of the StreamPipes toolbox. Although pipeline elements can be easily developed using our SDK, we aim to provide as many ready-to-use elements as possible to provide you with meaningful data harmonization and analytics features right from the beginning.
+StreamPipes v0.62.0 brings many new data processors and data sinks, an overview can be found <a href="/docs/pipeline-elements">here</a>.</p>
+<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>To better support users while developing pipelines, we improved the verification of user input in the pipeline editor.
+Users now get hints (directly shown in the pipeline assembly) on missing pipeline elements and error messages are shown if invalid values are entered while configuring pipeline elements (see the screenshot below).
+In addition, the editor now disallows adding new pipeline elements until the active pipeline element is fully configured, otherwise, the element is marked with a red alert symbol, which makes it much easier to discover modeling errors.</p>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2019-05-23/pipeline-editor.png" alt="Pipeline Element Verification"></p>
+<p>One feature request which was coming from one of our users was to better understand what pipeline elements are doing. For that reason, we now added a feature that allows to see a full documentation of any pipeline element directly in the pipeline editor.
+Once users start to configure a new pipeline element, the documentation can be opened:</p>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2019-05-23/pipeline-element-documentation.png" alt="Pipeline Element Documentation"></p>
+<h2><a class="anchor" aria-hidden="true" id="streampipes-connect"></a><a href="#streampipes-connect" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 added more adapters to StreamPipes Connect.
+Besides generic adapters such as frequently used protocols like OPC UA, MQTT and Kafka, Connect now also includes some new open data adapters and adapters for web APIs to make starting with StreamPipes more funny and easier:</p>
+<ul>
+<li>A Slack source to connect Slack channels with StreamPipes</li>
+<li>A Coindesk sources that allows you to get the latest Bitcoin rates</li>
+<li>A Wikipedia sources to get latest edits and created articles from Wikipedia</li>
+<li>IEXCloud adapters to provide access to stock quotes and news from IEXCloud (an API token is required).</li>
+<li>A ROS source to access data from the Robot Operating System (ROS)</li>
+</ul>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2019-05-23/connect.png" alt="StreamPipes Connect"></p>
+<h2><a class="anchor" aria-hidden="true" id="documentation"></a><a href="#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.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 documentation for pipeline elements that is shown in the pipeline editor is now also available in the online documentation.
+Navigate to <a href="/docs/pipeline-elements">pipeline elements</a> to see an overview of all pipeline elements that are currently provided by StreamPipes.</p>
+<h2><a class="anchor" aria-hidden="true" id="other-features-and-improvements"></a><a href="#other-features-and-improvements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 [...]
+<ul>
+<li>Adapters can be sorted and filtered in StreamPipes Connect.</li>
+<li>Labels and descriptions of pipeline elements can be provided by external resources files as a first step towards internationalization.</li>
+<li>We upgraded the UI to the latest Angular version 7 and drastically reduced the size of the UI source bundle, which reduces loading time.</li>
+<li>Stream requirements are now correctly ordered</li>
+</ul>
+<p>See the <a href="https://github.com/streampipes/streampipes/releases/tag/0.62.0">release notes</a> for more details.</p>
+<h2><a class="anchor" aria-hidden="true" id="feedback"></a><a href="#feedback" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>We are absolutely open to your suggestions for further improvements! Let us know (by <a href="mailto:feedback@streampipes.org">mail</a>, <a href="https://slack.streampipes.org">slack</a> or <a href="https://www.twitter.com/streampipes">twitter</a>) and we'll consider your feature request in the next release!</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"><ul class="toc-headings"><li><a href="#pipeline-elements">Pipeline Elements</a></li><li><a href="#pipeline-editor">Pipeline Editor</a></li><li><a href="#streampipes-connect">StreamPipes Connect</a></li><li><a href="#documentation">Documentation</a></li><li><a href="#other-features-and-improvements">Other featur [...]
+                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/streampipes-docs/blog/2019/05/23/release-0620/index.html b/docs/streampipes-docs/blog/2019/05/23/release-0620/index.html
new file mode 100644
index 0000000..5891727
--- /dev/null
+++ b/docs/streampipes-docs/blog/2019/05/23/release-0620/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>StreamPipes release 0.62.0 · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="**&lt;div style=&quot;float: left; padding-right: 40px;&quot;&gt;6 minutes to read&lt;/div&gt;**"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="StreamPipes  [...]
+        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.65.0</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 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>
+<!--truncate-->
+<p>For this release, we focused on improving error handling in the pipeline editor, added more pipeline elements, added more adapters to StreamPipes Connect and, added a documentation on available pipeline elements.</p>
+<h2><a class="anchor" aria-hidden="true" id="pipeline-elements"></a><a href="#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-.98 0-2-1.22-2- [...]
+<p>Pipeline elements are the most important part of the StreamPipes toolbox. Although pipeline elements can be easily developed using our SDK, we aim to provide as many ready-to-use elements as possible to provide you with meaningful data harmonization and analytics features right from the beginning.
+StreamPipes v0.62.0 brings many new data processors and data sinks, an overview can be found <a href="/docs/pipeline-elements">here</a>.</p>
+<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>To better support users while developing pipelines, we improved the verification of user input in the pipeline editor.
+Users now get hints (directly shown in the pipeline assembly) on missing pipeline elements and error messages are shown if invalid values are entered while configuring pipeline elements (see the screenshot below).
+In addition, the editor now disallows adding new pipeline elements until the active pipeline element is fully configured, otherwise, the element is marked with a red alert symbol, which makes it much easier to discover modeling errors.</p>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2019-05-23/pipeline-editor.png" alt="Pipeline Element Verification"></p>
+<p>One feature request which was coming from one of our users was to better understand what pipeline elements are doing. For that reason, we now added a feature that allows to see a full documentation of any pipeline element directly in the pipeline editor.
+Once users start to configure a new pipeline element, the documentation can be opened:</p>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2019-05-23/pipeline-element-documentation.png" alt="Pipeline Element Documentation"></p>
+<h2><a class="anchor" aria-hidden="true" id="streampipes-connect"></a><a href="#streampipes-connect" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 added more adapters to StreamPipes Connect.
+Besides generic adapters such as frequently used protocols like OPC UA, MQTT and Kafka, Connect now also includes some new open data adapters and adapters for web APIs to make starting with StreamPipes more funny and easier:</p>
+<ul>
+<li>A Slack source to connect Slack channels with StreamPipes</li>
+<li>A Coindesk sources that allows you to get the latest Bitcoin rates</li>
+<li>A Wikipedia sources to get latest edits and created articles from Wikipedia</li>
+<li>IEXCloud adapters to provide access to stock quotes and news from IEXCloud (an API token is required).</li>
+<li>A ROS source to access data from the Robot Operating System (ROS)</li>
+</ul>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2019-05-23/connect.png" alt="StreamPipes Connect"></p>
+<h2><a class="anchor" aria-hidden="true" id="documentation"></a><a href="#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.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 documentation for pipeline elements that is shown in the pipeline editor is now also available in the online documentation.
+Navigate to <a href="/docs/pipeline-elements">pipeline elements</a> to see an overview of all pipeline elements that are currently provided by StreamPipes.</p>
+<h2><a class="anchor" aria-hidden="true" id="other-features-and-improvements"></a><a href="#other-features-and-improvements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 [...]
+<ul>
+<li>Adapters can be sorted and filtered in StreamPipes Connect.</li>
+<li>Labels and descriptions of pipeline elements can be provided by external resources files as a first step towards internationalization.</li>
+<li>We upgraded the UI to the latest Angular version 7 and drastically reduced the size of the UI source bundle, which reduces loading time.</li>
+<li>Stream requirements are now correctly ordered</li>
+</ul>
+<p>See the <a href="https://github.com/streampipes/streampipes/releases/tag/0.62.0">release notes</a> for more details.</p>
+<h2><a class="anchor" aria-hidden="true" id="feedback"></a><a href="#feedback" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>We are absolutely open to your suggestions for further improvements! Let us know (by <a href="mailto:feedback@streampipes.org">mail</a>, <a href="https://slack.streampipes.org">slack</a> or <a href="https://www.twitter.com/streampipes">twitter</a>) and we'll consider your feature request in the next release!</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"><ul class="toc-headings"><li><a href="#pipeline-elements">Pipeline Elements</a></li><li><a href="#pipeline-editor">Pipeline Editor</a></li><li><a href="#streampipes-connect">StreamPipes Connect</a></li><li><a href="#documentation">Documentation</a></li><li><a href="#other-features-and-improvements">Other featur [...]
+                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/streampipes-docs/blog/2019/09/05/release-0630.html b/docs/streampipes-docs/blog/2019/09/05/release-0630.html
new file mode 100644
index 0000000..d236f31
--- /dev/null
+++ b/docs/streampipes-docs/blog/2019/09/05/release-0630.html
@@ -0,0 +1,130 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>StreamPipes release 0.63.0 · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="**&lt;div style=&quot;float: left; padding-right: 40px;&quot;&gt;5 minutes to read&lt;/div&gt;**"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="StreamPipes  [...]
+        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.65.0</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 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>
+<!--truncate-->
+<p>For this release, we focused on improving the stability and resilience of StreamPipes, adding many new features &quot;under the hood&quot;.</p>
+<h2><a class="anchor" aria-hidden="true" id="backend-data-model"></a><a href="#backend-data-model" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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, v0.63.0 brings <strong>support for binary messaging formats</strong>. Prior to 0.63.0, the only messaging format used at runtime was JSON. Now, several other binary formats are supported: Smile and CBOR as binary JSON representations and FST, a fast Java-based serializer.</li>
+<li>Second, we improved <strong>resilience of pipelines</strong>. Now, when StreamPipes is stopped, all running pipelines are stopped beforehand and can be restarted later on, so that you don't end up with orphaned pipelines anymore.</li>
+</ul>
+<p>We also extended the data model and SDK with new features:</p>
+<ul>
+<li>Pipeline elements can now provide their own assets such as documentation. Simply add an icon and a markdown file containing the documentation of the pipeline element and both will be visible directly in the pipeline editor after the installation of the pipeline element.</li>
+<li>We added several new static properties to define required user input: <strong>SecretStaticProperties</strong> can be used to define secret values (e.g., passwords). In addition, <strong>StaticPropertyAlternatives</strong> were introduced to let users select between multiple combinations of static properties (e.g., a time window and a count window along with window settings).</li>
+</ul>
+<p>In addition, we migrated all pipeline element container and the backend to Spring Boot applications. The triple store used to store pipeline element descriptions has been extracted to an own microservice. Btw, have you seen the new <a href="https://www.github.com/streampipes/streampipes-helm-chart">helm chart</a> that simplifies running StreamPipes on Kubernetes?</p>
+<h2><a class="anchor" aria-hidden="true" id="ui-and-pipeline-editor"></a><a href="#ui-and-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 [...]
+<p>We improved the <strong>interactive user guide</strong>, so that it now depends on pipeline elements that are also available in the lite version.
+Three different interactive guides exist: One that teaches you how to create pipelines, another one that illustrates how to connect data with StreamPipes connect and a third one that shows how to create live visualizations using the built-in dashboard.</p>
+<p>As <strong>user feedback</strong> is absolutely important to help us improving StreamPipes, we added a feature that allows users to directly give feedback from the StreamPipes UI. Simply click the feedback icon in the top navigation bar and submit your anonymous feedback to us!</p>
+<p>Finally, there are also some functional improvements in the pipeline editor: <strong>Pipeline validation</strong> has improved and gives direct feedback. And, finally, you can now also add multiple dashboards sink to a single pipeline :-)</p>
+<p>And a nice feature you can't see but which you'll probably feel: All UI files are now <strong>Gzip compressed</strong> by default, so that StreamPipes will now load much faster.</p>
+<h2><a class="anchor" aria-hidden="true" id="pipeline-elements"></a><a href="#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-.98 0-2-1.22-2- [...]
+<p>StreamPipes 0.63.0 includes several new pipeline elements:</p>
+<ul>
+<li>A sink for Apache IoTDB</li>
+<li>A sink for PostgreSQL</li>
+<li>A processor to convert boolean values</li>
+<li>A processor to extract timestamps</li>
+<li>A processor to compute trigonometric functions</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="streampipes-connect"></a><a href="#streampipes-connect" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 added more adapters and improved some adapters to StreamPipes Connect:</p>
+<ul>
+<li>An improved MQTT adapter that can handle authentication</li>
+<li>A new MySQL adapter</li>
+<li>An improved OPC-UA adapter</li>
+<li>A new random data generator that eases testing of pipeline elements</li>
+</ul>
+<p>In addition, we completely reworked the Connect UI. The schema view now lets you edit events more conveniently and timestamp fields can be directly marked in the UI.</p>
+<h2><a class="anchor" aria-hidden="true" id="documentation"></a><a href="#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.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>We updated and restructured the user guide, which now consists of four parts: <a href="/docs/user-guide-introduction">Introduction</a>, <a href="/docs/user-guide-tour">Tour</a>, <a href="/docs/user-guide-installation">Installation</a> and <a href="/docs/user-guide-first-steps">First Steps</a>.
+We also updated all screenshots to reflect the current look and feel of StreamPipes.</p>
+<p>In addition, the developer guide was further extended (e.g., there is now a new tutorial on creating data sinks). Maven archetypes are now the recommended way to create new pipeline elements.</p>
+<h2><a class="anchor" aria-hidden="true" id="other-features-and-improvements"></a><a href="#other-features-and-improvements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 [...]
+<ul>
+<li>An improved installer that lets you choose between two StreamPipes versions for different hardware setups (full or lite, previously named big data and desktop)</li>
+<li>We updated some core libraries like Apache Flink and Apache Kafka to newer versions.</li>
+<li>Improved support for Firefox and Edge: Besides Chrome, StreamPipes should also behave and look similar in Firefox and Edge browsers.</li>
+</ul>
+<p>See the <a href="https://github.com/streampipes/streampipes/releases/tag/0.63.0">release notes</a> for a complete list of new features and improvements.</p>
+<h2><a class="anchor" aria-hidden="true" id="feedback"></a><a href="#feedback" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>We are absolutely open to your suggestions for further improvements! Let us know (by <a href="mailto:feedback@streampipes.org">mail</a>, <a href="https://slack.streampipes.org">slack</a> or <a href="https://www.twitter.com/streampipes">twitter</a>) and we'll consider your feature request in the next release!</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"><ul class="toc-headings"><li><a href="#backend-data-model">Backend &amp; Data Model</a></li><li><a href="#ui-and-pipeline-editor">UI and Pipeline Editor</a></li><li><a href="#pipeline-elements">Pipeline Elements</a></li><li><a href="#streampipes-connect">StreamPipes Connect</a></li><li><a href="#documentation"> [...]
+                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/streampipes-docs/blog/2019/09/05/release-0630/index.html b/docs/streampipes-docs/blog/2019/09/05/release-0630/index.html
new file mode 100644
index 0000000..d236f31
--- /dev/null
+++ b/docs/streampipes-docs/blog/2019/09/05/release-0630/index.html
@@ -0,0 +1,130 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>StreamPipes release 0.63.0 · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="**&lt;div style=&quot;float: left; padding-right: 40px;&quot;&gt;5 minutes to read&lt;/div&gt;**"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="StreamPipes  [...]
+        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.65.0</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 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>
+<!--truncate-->
+<p>For this release, we focused on improving the stability and resilience of StreamPipes, adding many new features &quot;under the hood&quot;.</p>
+<h2><a class="anchor" aria-hidden="true" id="backend-data-model"></a><a href="#backend-data-model" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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, v0.63.0 brings <strong>support for binary messaging formats</strong>. Prior to 0.63.0, the only messaging format used at runtime was JSON. Now, several other binary formats are supported: Smile and CBOR as binary JSON representations and FST, a fast Java-based serializer.</li>
+<li>Second, we improved <strong>resilience of pipelines</strong>. Now, when StreamPipes is stopped, all running pipelines are stopped beforehand and can be restarted later on, so that you don't end up with orphaned pipelines anymore.</li>
+</ul>
+<p>We also extended the data model and SDK with new features:</p>
+<ul>
+<li>Pipeline elements can now provide their own assets such as documentation. Simply add an icon and a markdown file containing the documentation of the pipeline element and both will be visible directly in the pipeline editor after the installation of the pipeline element.</li>
+<li>We added several new static properties to define required user input: <strong>SecretStaticProperties</strong> can be used to define secret values (e.g., passwords). In addition, <strong>StaticPropertyAlternatives</strong> were introduced to let users select between multiple combinations of static properties (e.g., a time window and a count window along with window settings).</li>
+</ul>
+<p>In addition, we migrated all pipeline element container and the backend to Spring Boot applications. The triple store used to store pipeline element descriptions has been extracted to an own microservice. Btw, have you seen the new <a href="https://www.github.com/streampipes/streampipes-helm-chart">helm chart</a> that simplifies running StreamPipes on Kubernetes?</p>
+<h2><a class="anchor" aria-hidden="true" id="ui-and-pipeline-editor"></a><a href="#ui-and-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 [...]
+<p>We improved the <strong>interactive user guide</strong>, so that it now depends on pipeline elements that are also available in the lite version.
+Three different interactive guides exist: One that teaches you how to create pipelines, another one that illustrates how to connect data with StreamPipes connect and a third one that shows how to create live visualizations using the built-in dashboard.</p>
+<p>As <strong>user feedback</strong> is absolutely important to help us improving StreamPipes, we added a feature that allows users to directly give feedback from the StreamPipes UI. Simply click the feedback icon in the top navigation bar and submit your anonymous feedback to us!</p>
+<p>Finally, there are also some functional improvements in the pipeline editor: <strong>Pipeline validation</strong> has improved and gives direct feedback. And, finally, you can now also add multiple dashboards sink to a single pipeline :-)</p>
+<p>And a nice feature you can't see but which you'll probably feel: All UI files are now <strong>Gzip compressed</strong> by default, so that StreamPipes will now load much faster.</p>
+<h2><a class="anchor" aria-hidden="true" id="pipeline-elements"></a><a href="#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-.98 0-2-1.22-2- [...]
+<p>StreamPipes 0.63.0 includes several new pipeline elements:</p>
+<ul>
+<li>A sink for Apache IoTDB</li>
+<li>A sink for PostgreSQL</li>
+<li>A processor to convert boolean values</li>
+<li>A processor to extract timestamps</li>
+<li>A processor to compute trigonometric functions</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="streampipes-connect"></a><a href="#streampipes-connect" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 added more adapters and improved some adapters to StreamPipes Connect:</p>
+<ul>
+<li>An improved MQTT adapter that can handle authentication</li>
+<li>A new MySQL adapter</li>
+<li>An improved OPC-UA adapter</li>
+<li>A new random data generator that eases testing of pipeline elements</li>
+</ul>
+<p>In addition, we completely reworked the Connect UI. The schema view now lets you edit events more conveniently and timestamp fields can be directly marked in the UI.</p>
+<h2><a class="anchor" aria-hidden="true" id="documentation"></a><a href="#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.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>We updated and restructured the user guide, which now consists of four parts: <a href="/docs/user-guide-introduction">Introduction</a>, <a href="/docs/user-guide-tour">Tour</a>, <a href="/docs/user-guide-installation">Installation</a> and <a href="/docs/user-guide-first-steps">First Steps</a>.
+We also updated all screenshots to reflect the current look and feel of StreamPipes.</p>
+<p>In addition, the developer guide was further extended (e.g., there is now a new tutorial on creating data sinks). Maven archetypes are now the recommended way to create new pipeline elements.</p>
+<h2><a class="anchor" aria-hidden="true" id="other-features-and-improvements"></a><a href="#other-features-and-improvements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 [...]
+<ul>
+<li>An improved installer that lets you choose between two StreamPipes versions for different hardware setups (full or lite, previously named big data and desktop)</li>
+<li>We updated some core libraries like Apache Flink and Apache Kafka to newer versions.</li>
+<li>Improved support for Firefox and Edge: Besides Chrome, StreamPipes should also behave and look similar in Firefox and Edge browsers.</li>
+</ul>
+<p>See the <a href="https://github.com/streampipes/streampipes/releases/tag/0.63.0">release notes</a> for a complete list of new features and improvements.</p>
+<h2><a class="anchor" aria-hidden="true" id="feedback"></a><a href="#feedback" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>We are absolutely open to your suggestions for further improvements! Let us know (by <a href="mailto:feedback@streampipes.org">mail</a>, <a href="https://slack.streampipes.org">slack</a> or <a href="https://www.twitter.com/streampipes">twitter</a>) and we'll consider your feature request in the next release!</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"><ul class="toc-headings"><li><a href="#backend-data-model">Backend &amp; Data Model</a></li><li><a href="#ui-and-pipeline-editor">UI and Pipeline Editor</a></li><li><a href="#pipeline-elements">Pipeline Elements</a></li><li><a href="#streampipes-connect">StreamPipes Connect</a></li><li><a href="#documentation"> [...]
+                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/streampipes-docs/blog/2019/09/19/release-0640.html b/docs/streampipes-docs/blog/2019/09/19/release-0640.html
new file mode 100644
index 0000000..3f61510
--- /dev/null
+++ b/docs/streampipes-docs/blog/2019/09/19/release-0640.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>StreamPipes release 0.64.0 · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="**&lt;div style=&quot;float: left; padding-right: 40px;&quot;&gt;5 minutes to read&lt;/div&gt;**"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="StreamPipes  [...]
+        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.65.0</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 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>
+<!--truncate-->
+<h2><a class="anchor" aria-hidden="true" id="streampipes-connect"></a><a href="#streampipes-connect" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 [...]
+<ul>
+<li>StreamPipes Connect now has a new (experimental) connector for <a href="https://plc4x.apache.org/">ApachePLC4X</a>. PLC4X is a (really cool) universal protocol adapter for the Industrial IoT with many adapters for systems like Modbus, Beckhoff, S7 and OPC-UA. The new StreamPipes Connect adapter allows you to easily connect to an S7 device, we will add more integrations in the upcoming releases.</li>
+<li>We added another adapter to retrieve data from the <a href="https://pulsar.apache.org">Apache Pulsar</a> messaging system.</li>
+</ul>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2019-09-19/spconnect.png" alt="PLC4X adapter for StreamPipes Connect"></p>
+<h2><a class="anchor" aria-hidden="true" id="pipeline-elements"></a><a href="#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-.98 0-2-1.22-2- [...]
+<ul>
+<li>0.64.0 also includes a new data sink to send data to Apache Pulsar.</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="deployment"></a><a href="#deployment" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>StreamPipes relies on a microservice-based architecture and therefore requires quite a few services (&gt; 15 for the full version) to be up and running.
+This has impact on the memory consumption of the server where StreamPipes is running. On the other hand, we want to make it as easy as possible to try StreamPipes even on laptops with less powerful hardware.</p>
+<p>However, the lite version still required &gt; 8G memory and the full version even more. Additionally, after the last release, we received feedback from the community indicating that the memory consumption has significantly increased.
+So we looked deeper into the issue and discovered that the Docker base images we were using to deliver the StreamPipes services caused high memory consumption.</p>
+<p>Before StreamPipes 0.63.0, we used the Alpine Oracle JDK image for most services. In 0.63.0, we switched to an OpenJDK/Alpine distribution. This had an enormous effect on memory, having individual services that reserved more than 1.5GB of memory.</p>
+<p>So in this version, we switched to AdoptOpenJDK along with <a href="https://www.eclipse.org/openj9/">OpenJ9</a>. The results are fantastic: The full version including all pipeline elements now needs only 6GB memory (compared to &gt; 16 in the last version).</p>
+<p>The screenshot below shows that StreamPipes now is much less resource hungry:</p>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2019-09-19/memory.png" alt="PLC4X adapter for StreamPipes Connect"></p>
+<p>In future versions, we will continue our efforts to decrease the memory consumption of StreamPipes.</p>
+<h2><a class="anchor" aria-hidden="true" id="feedback"></a><a href="#feedback" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>We are absolutely open to your suggestions for further improvements! Let us know (by <a href="mailto:feedback@streampipes.org">mail</a>, <a href="https://slack.streampipes.org">slack</a> or <a href="https://www.twitter.com/streampipes">twitter</a>) and we'll consider your feature request in the next release!</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"><ul class="toc-headings"><li><a href="#streampipes-connect">StreamPipes Connect</a></li><li><a href="#pipeline-elements">Pipeline Elements</a></li><li><a href="#deployment">Deployment</a></li><li><a href="#feedback">Feedback</a></li></ul></nav></div><div><footer class="nav-footer" id="footer"><section class="si [...]
+                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/streampipes-docs/blog/2019/09/19/release-0640/index.html b/docs/streampipes-docs/blog/2019/09/19/release-0640/index.html
new file mode 100644
index 0000000..3f61510
--- /dev/null
+++ b/docs/streampipes-docs/blog/2019/09/19/release-0640/index.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>StreamPipes release 0.64.0 · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="**&lt;div style=&quot;float: left; padding-right: 40px;&quot;&gt;5 minutes to read&lt;/div&gt;**"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="StreamPipes  [...]
+        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.65.0</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 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>
+<!--truncate-->
+<h2><a class="anchor" aria-hidden="true" id="streampipes-connect"></a><a href="#streampipes-connect" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 [...]
+<ul>
+<li>StreamPipes Connect now has a new (experimental) connector for <a href="https://plc4x.apache.org/">ApachePLC4X</a>. PLC4X is a (really cool) universal protocol adapter for the Industrial IoT with many adapters for systems like Modbus, Beckhoff, S7 and OPC-UA. The new StreamPipes Connect adapter allows you to easily connect to an S7 device, we will add more integrations in the upcoming releases.</li>
+<li>We added another adapter to retrieve data from the <a href="https://pulsar.apache.org">Apache Pulsar</a> messaging system.</li>
+</ul>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2019-09-19/spconnect.png" alt="PLC4X adapter for StreamPipes Connect"></p>
+<h2><a class="anchor" aria-hidden="true" id="pipeline-elements"></a><a href="#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-.98 0-2-1.22-2- [...]
+<ul>
+<li>0.64.0 also includes a new data sink to send data to Apache Pulsar.</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="deployment"></a><a href="#deployment" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>StreamPipes relies on a microservice-based architecture and therefore requires quite a few services (&gt; 15 for the full version) to be up and running.
+This has impact on the memory consumption of the server where StreamPipes is running. On the other hand, we want to make it as easy as possible to try StreamPipes even on laptops with less powerful hardware.</p>
+<p>However, the lite version still required &gt; 8G memory and the full version even more. Additionally, after the last release, we received feedback from the community indicating that the memory consumption has significantly increased.
+So we looked deeper into the issue and discovered that the Docker base images we were using to deliver the StreamPipes services caused high memory consumption.</p>
+<p>Before StreamPipes 0.63.0, we used the Alpine Oracle JDK image for most services. In 0.63.0, we switched to an OpenJDK/Alpine distribution. This had an enormous effect on memory, having individual services that reserved more than 1.5GB of memory.</p>
+<p>So in this version, we switched to AdoptOpenJDK along with <a href="https://www.eclipse.org/openj9/">OpenJ9</a>. The results are fantastic: The full version including all pipeline elements now needs only 6GB memory (compared to &gt; 16 in the last version).</p>
+<p>The screenshot below shows that StreamPipes now is much less resource hungry:</p>
+<p><img class="blog-image" style="max-width:90%;" src="/blog/assets/2019-09-19/memory.png" alt="PLC4X adapter for StreamPipes Connect"></p>
+<p>In future versions, we will continue our efforts to decrease the memory consumption of StreamPipes.</p>
+<h2><a class="anchor" aria-hidden="true" id="feedback"></a><a href="#feedback" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>We are absolutely open to your suggestions for further improvements! Let us know (by <a href="mailto:feedback@streampipes.org">mail</a>, <a href="https://slack.streampipes.org">slack</a> or <a href="https://www.twitter.com/streampipes">twitter</a>) and we'll consider your feature request in the next release!</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"><ul class="toc-headings"><li><a href="#streampipes-connect">StreamPipes Connect</a></li><li><a href="#pipeline-elements">Pipeline Elements</a></li><li><a href="#deployment">Deployment</a></li><li><a href="#feedback">Feedback</a></li></ul></nav></div><div><footer class="nav-footer" id="footer"><section class="si [...]
+                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/streampipes-docs/blog/2019/11/23/release-0650.html b/docs/streampipes-docs/blog/2019/11/23/release-0650.html
new file mode 100644
index 0000000..c5ae4e8
--- /dev/null
+++ b/docs/streampipes-docs/blog/2019/11/23/release-0650.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>StreamPipes release 0.65.0 · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="**&lt;div style=&quot;float: left; padding-right: 40px;&quot;&gt;5 minutes to read&lt;/div&gt;**"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="StreamPipes  [...]
+        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.65.0</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 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-->
+<h2><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>If you're installing StreamPipes using the provided installer, you might have noticed that the initial setup takes some time: Docker images are downloaded, all dependent microservices are started and the RDF-based database that we use internally to store pipeline elements is initialized.
+On less-performant hardware, this process could take a few minutes. For this release, we optimized the installation process:</p>
+<ul>
+<li>You don't need to provide your IP address during the installation process anymore - StreamPipes now runs without manually providing an IP address.</li>
+<li>A new initialization screen is shown in the StreamPipes user interface that automatically disappears and guides you to the setup process once all mandatory services are running.</li>
+<li>The setup process in the user interface should now be much faster due to some changes related to the caching of pipeline elements.</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="lite-version"></a><a href="#lite-version" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>To further reduce the minimum hardware requirements to run StreamPipes, we added a new Docker container to the backend that includes all data processors and sinks that depend on the lightweight JVM wrapper. Flink and other modules are excluded.
+This approach allows to test StreamPipes with less memory (e.g., on a laptop) while still having a larger set of pipeline elements installed.<br>
+We now recommend a minimum of 4GB RAM for the StreamPipes Lite version (make sure that the RAM is also assigned to Docker Desktop), but our tests have shown that the memory consumption of the StreamPipes lite version is around 2GB.</p>
+<h2><a class="anchor" aria-hidden="true" id="pipeline-elements"></a><a href="#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-.98 0-2-1.22-2- [...]
+<ul>
+<li>0.65.0 includes some new data processors: A CSV enrichment processors that allows to enrich events with metadata from CSV files, an event counter and some processors that perform operations on boolean values, e.g., coming from PLCs.</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="other-features-and-improvements"></a><a href="#other-features-and-improvements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 [...]
+<ul>
+<li>Use the latest Flink version 1.9.1</li>
+<li>We improved the OPC-UA adapter, e.g., you can now directly set the URL of the OPC-UA server.</li>
+<li>Proper error messages are now shown in the pipeline view in case something goes wrong during the start of a pipeline.</li>
+</ul>
+<p>See the <a href="https://github.com/streampipes/streampipes/releases/tag/0.65.0">release notes</a> for a complete list of new features and improvements.</p>
+<h2><a class="anchor" aria-hidden="true" id="feedback"></a><a href="#feedback" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>We are absolutely open to your suggestions for further improvements! Let us know (by <a href="mailto:feedback@streampipes.org">mail</a>, <a href="https://slack.streampipes.org">slack</a> or <a href="https://www.twitter.com/streampipes">twitter</a>) and we'll consider your feature request in the next release!</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"><ul class="toc-headings"><li><a href="#installation">Installation</a></li><li><a href="#lite-version">Lite version</a></li><li><a href="#pipeline-elements">Pipeline Elements</a></li><li><a href="#other-features-and-improvements">Other features and improvements</a></li><li><a href="#feedback">Feedback</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/streampipes-docs/blog/2019/11/23/release-0650/index.html b/docs/streampipes-docs/blog/2019/11/23/release-0650/index.html
new file mode 100644
index 0000000..c5ae4e8
--- /dev/null
+++ b/docs/streampipes-docs/blog/2019/11/23/release-0650/index.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>StreamPipes release 0.65.0 · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="**&lt;div style=&quot;float: left; padding-right: 40px;&quot;&gt;5 minutes to read&lt;/div&gt;**"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="StreamPipes  [...]
+        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.65.0</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 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-->
+<h2><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>If you're installing StreamPipes using the provided installer, you might have noticed that the initial setup takes some time: Docker images are downloaded, all dependent microservices are started and the RDF-based database that we use internally to store pipeline elements is initialized.
+On less-performant hardware, this process could take a few minutes. For this release, we optimized the installation process:</p>
+<ul>
+<li>You don't need to provide your IP address during the installation process anymore - StreamPipes now runs without manually providing an IP address.</li>
+<li>A new initialization screen is shown in the StreamPipes user interface that automatically disappears and guides you to the setup process once all mandatory services are running.</li>
+<li>The setup process in the user interface should now be much faster due to some changes related to the caching of pipeline elements.</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="lite-version"></a><a href="#lite-version" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>To further reduce the minimum hardware requirements to run StreamPipes, we added a new Docker container to the backend that includes all data processors and sinks that depend on the lightweight JVM wrapper. Flink and other modules are excluded.
+This approach allows to test StreamPipes with less memory (e.g., on a laptop) while still having a larger set of pipeline elements installed.<br>
+We now recommend a minimum of 4GB RAM for the StreamPipes Lite version (make sure that the RAM is also assigned to Docker Desktop), but our tests have shown that the memory consumption of the StreamPipes lite version is around 2GB.</p>
+<h2><a class="anchor" aria-hidden="true" id="pipeline-elements"></a><a href="#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-.98 0-2-1.22-2- [...]
+<ul>
+<li>0.65.0 includes some new data processors: A CSV enrichment processors that allows to enrich events with metadata from CSV files, an event counter and some processors that perform operations on boolean values, e.g., coming from PLCs.</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="other-features-and-improvements"></a><a href="#other-features-and-improvements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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 [...]
+<ul>
+<li>Use the latest Flink version 1.9.1</li>
+<li>We improved the OPC-UA adapter, e.g., you can now directly set the URL of the OPC-UA server.</li>
+<li>Proper error messages are now shown in the pipeline view in case something goes wrong during the start of a pipeline.</li>
+</ul>
+<p>See the <a href="https://github.com/streampipes/streampipes/releases/tag/0.65.0">release notes</a> for a complete list of new features and improvements.</p>
+<h2><a class="anchor" aria-hidden="true" id="feedback"></a><a href="#feedback" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="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>We are absolutely open to your suggestions for further improvements! Let us know (by <a href="mailto:feedback@streampipes.org">mail</a>, <a href="https://slack.streampipes.org">slack</a> or <a href="https://www.twitter.com/streampipes">twitter</a>) and we'll consider your feature request in the next release!</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"><ul class="toc-headings"><li><a href="#installation">Installation</a></li><li><a href="#lite-version">Lite version</a></li><li><a href="#pipeline-elements">Pipeline Elements</a></li><li><a href="#other-features-and-improvements">Other features and improvements</a></li><li><a href="#feedback">Feedback</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/streampipes-docs/blog/assets/2018-06-18/01_motivation.png b/docs/streampipes-docs/blog/assets/2018-06-18/01_motivation.png
new file mode 100644
index 0000000..59819fb
Binary files /dev/null and b/docs/streampipes-docs/blog/assets/2018-06-18/01_motivation.png differ
diff --git a/docs/streampipes-docs/blog/assets/2018-06-18/02_anlage.png b/docs/streampipes-docs/blog/assets/2018-06-18/02_anlage.png
new file mode 100644
index 0000000..5415fd6
Binary files /dev/null and b/docs/streampipes-docs/blog/assets/2018-06-18/02_anlage.png differ
diff --git a/docs/streampipes-docs/blog/assets/2018-06-18/03_architecture.png b/docs/streampipes-docs/blog/assets/2018-06-18/03_architecture.png
new file mode 100644
index 0000000..a7ce916
Binary files /dev/null and b/docs/streampipes-docs/blog/assets/2018-06-18/03_architecture.png differ
diff --git a/docs/streampipes-docs/blog/assets/2018-06-18/04_pipeline.png b/docs/streampipes-docs/blog/assets/2018-06-18/04_pipeline.png
new file mode 100644
index 0000000..f2cf2d9
Binary files /dev/null and b/docs/streampipes-docs/blog/assets/2018-06-18/04_pipeline.png differ
diff --git a/docs/streampipes-docs/blog/assets/2018-09-17/streampipes-060-product-tour.png b/docs/streampipes-docs/blog/assets/2018-09-17/streampipes-060-product-tour.png
new file mode 100644
index 0000000..6ab8d66
Binary files /dev/null and b/docs/streampipes-docs/blog/assets/2018-09-17/streampipes-060-product-tour.png differ
diff --git a/docs/streampipes-docs/blog/assets/2018-09-17/streampipes-060.png b/docs/streampipes-docs/blog/assets/2018-09-17/streampipes-060.png
new file mode 100644
index 0000000..f5e4ff9
Binary files /dev/null and b/docs/streampipes-docs/blog/assets/2018-09-17/streampipes-060.png differ
diff --git a/docs/streampipes-docs/blog/assets/2018-11-24/files.png b/docs/streampipes-docs/blog/assets/2018-11-24/files.png
new file mode 100644
index 0000000..7a2daf5
Binary files /dev/null and b/docs/streampipes-docs/blog/assets/2018-11-24/files.png differ
diff --git a/docs/streampipes-docs/blog/assets/2018-11-24/roles.png b/docs/streampipes-docs/blog/assets/2018-11-24/roles.png
new file mode 100644
index 0000000..b55924e
Binary files /dev/null and b/docs/streampipes-docs/blog/assets/2018-11-24/roles.png differ
diff --git a/docs/streampipes-docs/blog/assets/2018-11-24/variables.png b/docs/streampipes-docs/blog/assets/2018-11-24/variables.png
new file mode 100644
index 0000000..39c1cc3
Binary files /dev/null and b/docs/streampipes-docs/blog/assets/2018-11-24/variables.png differ
diff --git a/docs/streampipes-docs/blog/assets/2019-04-04/connect.png b/docs/streampipes-docs/blog/assets/2019-04-04/connect.png
new file mode 100644
index 0000000..106f3bd
Binary files /dev/null and b/docs/streampipes-docs/blog/assets/2019-04-04/connect.png differ
diff --git a/docs/streampipes-docs/blog/assets/2019-04-04/validation.png b/docs/streampipes-docs/blog/assets/2019-04-04/validation.png
new file mode 100644
index 0000000..0578991
Binary files /dev/null and b/docs/streampipes-docs/blog/assets/2019-04-04/validation.png differ
diff --git a/docs/streampipes-docs/blog/assets/2019-05-23/connect.png b/docs/streampipes-docs/blog/assets/2019-05-23/connect.png
new file mode 100644
index 0000000..38dfed8
Binary files /dev/null and b/docs/streampipes-docs/blog/assets/2019-05-23/connect.png differ
diff --git a/docs/streampipes-docs/blog/assets/2019-05-23/pipeline-editor.png b/docs/streampipes-docs/blog/assets/2019-05-23/pipeline-editor.png
new file mode 100644
index 0000000..a75e96e
Binary files /dev/null and b/docs/streampipes-docs/blog/assets/2019-05-23/pipeline-editor.png differ
diff --git a/docs/streampipes-docs/blog/assets/2019-05-23/pipeline-element-documentation.png b/docs/streampipes-docs/blog/assets/2019-05-23/pipeline-element-documentation.png
new file mode 100644
index 0000000..8ba445e
Binary files /dev/null and b/docs/streampipes-docs/blog/assets/2019-05-23/pipeline-element-documentation.png differ
diff --git a/docs/streampipes-docs/blog/assets/2019-09-19/memory.png b/docs/streampipes-docs/blog/assets/2019-09-19/memory.png
new file mode 100644
index 0000000..4eceb8e
Binary files /dev/null and b/docs/streampipes-docs/blog/assets/2019-09-19/memory.png differ
diff --git a/docs/streampipes-docs/blog/assets/2019-09-19/spconnect.png b/docs/streampipes-docs/blog/assets/2019-09-19/spconnect.png
new file mode 100644
index 0000000..30ed342
Binary files /dev/null and b/docs/streampipes-docs/blog/assets/2019-09-19/spconnect.png differ
diff --git a/docs/streampipes-docs/blog/atom.xml b/docs/streampipes-docs/blog/atom.xml
new file mode 100644
index 0000000..bea8110
--- /dev/null
+++ b/docs/streampipes-docs/blog/atom.xml
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+    <id>https://docs.streampipes.org/docs/blog</id>
+    <title>StreamPipes Blog</title>
+    <updated>2019-11-23T06:00:00Z</updated>
+    <generator>Feed for Node.js</generator>
+    <link rel="alternate" href="https://docs.streampipes.org/docs/blog"/>
+    <subtitle>The best place to stay up-to-date with the latest StreamPipes news and events.</subtitle>
+    <logo>https://docs.streampipes.org/docs/img/sp-logo-color-docs.png</logo>
+    <rights>Copyright © 2019 The Apache Software Foundation</rights>
+    <entry>
+        <title type="html"><![CDATA[StreamPipes release 0.65.0]]></title>
+        <id>https://docs.streampipes.org/docs/blog/2019/11/23/release-0650.html</id>
+        <link href="https://docs.streampipes.org/docs/blog/2019/11/23/release-0650.html">
+        </link>
+        <updated>2019-11-23T06:00:00Z</updated>
+        <summary type="html"><![CDATA[<p><strong><div style="float: left; padding-right: 40px;">5 minutes to read</div></strong>
+<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>
+]]></summary>
+        <author>
+            <name>Dominik Riemer</name>
+            <uri>https://twitter.com/dominikjriemer</uri>
+        </author>
+    </entry>
+    <entry>
+        <title type="html"><![CDATA[StreamPipes release 0.64.0]]></title>
+        <id>https://docs.streampipes.org/docs/blog/2019/09/19/release-0640.html</id>
+        <link href="https://docs.streampipes.org/docs/blog/2019/09/19/release-0640.html">
+        </link>
+        <updated>2019-09-19T06:00:00Z</updated>
+        <summary type="html"><![CDATA[<p><strong><div style="float: left; padding-right: 40px;">5 minutes to read</div></strong>
+<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>
+]]></summary>
+        <author>
+            <name>Dominik Riemer</name>
+            <uri>https://twitter.com/dominikjriemer</uri>
+        </author>
+    </entry>
+    <entry>
+        <title type="html"><![CDATA[StreamPipes release 0.63.0]]></title>
+        <id>https://docs.streampipes.org/docs/blog/2019/09/05/release-0630.html</id>
+        <link href="https://docs.streampipes.org/docs/blog/2019/09/05/release-0630.html">
+        </link>
+        <updated>2019-09-05T06:00:00Z</updated>
+        <summary type="html"><![CDATA[<p><strong><div style="float: left; padding-right: 40px;">5 minutes to read</div></strong>
+<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>
+]]></summary>
+        <author>
+            <name>Dominik Riemer</name>
+            <uri>https://twitter.com/dominikjriemer</uri>
+        </author>
+    </entry>
+    <entry>
+        <title type="html"><![CDATA[StreamPipes release 0.62.0]]></title>
+        <id>https://docs.streampipes.org/docs/blog/2019/05/23/release-0620.html</id>
+        <link href="https://docs.streampipes.org/docs/blog/2019/05/23/release-0620.html">
+        </link>
+        <updated>2019-05-23T06:00:00Z</updated>
+        <summary type="html"><![CDATA[<p><strong><div style="float: left; padding-right: 40px;">6 minutes to read</div></strong>
+<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>
+]]></summary>
+        <author>
+            <name>Dominik Riemer</name>
+            <uri>http://twitter.com/dominikjriemer</uri>
+        </author>
+    </entry>
+    <entry>
+        <title type="html"><![CDATA[StreamPipes release 0.61.0]]></title>
+        <id>https://docs.streampipes.org/docs/blog/2019/04/04/release-0610.html</id>
+        <link href="https://docs.streampipes.org/docs/blog/2019/04/04/release-0610.html">
+        </link>
+        <updated>2019-04-04T06:00:00Z</updated>
+        <summary type="html"><![CDATA[<p><strong><div style="float: left; padding-right: 40px;">5 minutes to read</div></strong>
+<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>
+]]></summary>
+        <author>
+            <name>Dominik Riemer</name>
+            <uri>http://twitter.com/dominikjriemer</uri>
+        </author>
+    </entry>
+    <entry>
+        <title type="html"><![CDATA[ContainerCLI: A CLI tool for your Docker Application]]></title>
+        <id>https://docs.streampipes.org/docs/blog/2018/11/24/container-cli.html</id>
+        <link href="https://docs.streampipes.org/docs/blog/2018/11/24/container-cli.html">
+        </link>
+        <updated>2018-11-24T06:00:00Z</updated>
+        <summary type="html"><![CDATA[<p><strong><div style="float: left; padding-right: 40px;">6 minutes to read</div></strong>
+<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>
+]]></summary>
+        <author>
+            <name>Philipp Zehnder</name>
+            <uri>http://twitter.com/philipp10der</uri>
+        </author>
+    </entry>
+    <entry>
+        <title type="html"><![CDATA[Preview: StreamPipes release 0.60.0]]></title>
+        <id>https://docs.streampipes.org/docs/blog/2018/09/17/preview-060.html</id>
+        <link href="https://docs.streampipes.org/docs/blog/2018/09/17/preview-060.html">
+        </link>
+        <updated>2018-09-17T06:00:00Z</updated>
+        <summary type="html"><![CDATA[<p><strong><div style="float: left; padding-right: 40px;">5 minutes to read</div></strong>
+<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>
+]]></summary>
+        <author>
+            <name>Dominik Riemer</name>
+            <uri>http://twitter.com/dominikjriemer</uri>
+        </author>
+    </entry>
+    <entry>
+        <title type="html"><![CDATA[How to understand your machine data?]]></title>
+        <id>https://docs.streampipes.org/docs/blog/2018/06/18/how-to-understand-your-machine-data.html</id>
+        <link href="https://docs.streampipes.org/docs/blog/2018/06/18/how-to-understand-your-machine-data.html">
+        </link>
+        <updated>2018-06-18T06:00:00Z</updated>
+        <summary type="html"><![CDATA[<p><strong><div style="float: left; padding-right: 40px;">8 minutes to read</div></strong>
+<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>
+]]></summary>
+        <author>
+            <name>Philipp Zehnder</name>
+            <uri>http://twitter.com/philipp10der</uri>
+        </author>
+    </entry>
+    <entry>
+        <title type="html"><![CDATA[Welcome to StreamPipes!]]></title>
+        <id>https://docs.streampipes.org/docs/blog/2018/06/14/welcome.html</id>
+        <link href="https://docs.streampipes.org/docs/blog/2018/06/14/welcome.html">
+        </link>
+        <updated>2018-06-14T06:00:00Z</updated>
+        <summary type="html"><![CDATA[<p>Welcome to our new blog. StreamPipes is the new, easy-to-use self-service data analytics toolbox for the Industrial IoT. In the coming weeks, we'll publish a series of blog posts that explain some ideas of StreamPipes. You'll read about use cases, be...</p>]]></summary>
+        <author>
+            <name>Dominik Riemer</name>
+            <uri>http://twitter.com/dominikjriemer</uri>
+        </author>
+    </entry>
+</feed>
\ No newline at end of file
diff --git a/docs/streampipes-docs/blog/feed.xml b/docs/streampipes-docs/blog/feed.xml
new file mode 100644
index 0000000..d74fd77
--- /dev/null
+++ b/docs/streampipes-docs/blog/feed.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rss version="2.0">
+    <channel>
+        <title>StreamPipes Blog</title>
+        <link>https://docs.streampipes.org/docs/blog</link>
+        <description>The best place to stay up-to-date with the latest StreamPipes news and events.</description>
+        <lastBuildDate>Sat, 23 Nov 2019 06:00:00 GMT</lastBuildDate>
+        <docs>http://blogs.law.harvard.edu/tech/rss</docs>
+        <generator>Feed for Node.js</generator>
+        <image>
+            <title>StreamPipes Blog</title>
+            <url>https://docs.streampipes.org/docs/img/sp-logo-color-docs.png</url>
+            <link>https://docs.streampipes.org/docs/blog</link>
+        </image>
+        <copyright>Copyright © 2019 The Apache Software Foundation</copyright>
+        <item>
+            <title><![CDATA[StreamPipes release 0.65.0]]></title>
+            <link>https://docs.streampipes.org/docs/blog/2019/11/23/release-0650.html</link>
+            <guid>https://docs.streampipes.org/docs/blog/2019/11/23/release-0650.html</guid>
+            <pubDate>Sat, 23 Nov 2019 06:00:00 GMT</pubDate>
+            <description><![CDATA[<p><strong><div style="float: left; padding-right: 40px;">5 minutes to read</div></strong>
+<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>
+]]></description>
+        </item>
+        <item>
+            <title><![CDATA[StreamPipes release 0.64.0]]></title>
+            <link>https://docs.streampipes.org/docs/blog/2019/09/19/release-0640.html</link>
+            <guid>https://docs.streampipes.org/docs/blog/2019/09/19/release-0640.html</guid>
+            <pubDate>Thu, 19 Sep 2019 06:00:00 GMT</pubDate>
+            <description><![CDATA[<p><strong><div style="float: left; padding-right: 40px;">5 minutes to read</div></strong>
+<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>
+]]></description>
+        </item>
+        <item>
+            <title><![CDATA[StreamPipes release 0.63.0]]></title>
+            <link>https://docs.streampipes.org/docs/blog/2019/09/05/release-0630.html</link>
+            <guid>https://docs.streampipes.org/docs/blog/2019/09/05/release-0630.html</guid>
+            <pubDate>Thu, 05 Sep 2019 06:00:00 GMT</pubDate>
+            <description><![CDATA[<p><strong><div style="float: left; padding-right: 40px;">5 minutes to read</div></strong>
+<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>
+]]></description>
+        </item>
+        <item>
+            <title><![CDATA[StreamPipes release 0.62.0]]></title>
+            <link>https://docs.streampipes.org/docs/blog/2019/05/23/release-0620.html</link>
+            <guid>https://docs.streampipes.org/docs/blog/2019/05/23/release-0620.html</guid>
+            <pubDate>Thu, 23 May 2019 06:00:00 GMT</pubDate>
+            <description><![CDATA[<p><strong><div style="float: left; padding-right: 40px;">6 minutes to read</div></strong>
+<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>
+]]></description>
+        </item>
+        <item>
+            <title><![CDATA[StreamPipes release 0.61.0]]></title>
+            <link>https://docs.streampipes.org/docs/blog/2019/04/04/release-0610.html</link>
+            <guid>https://docs.streampipes.org/docs/blog/2019/04/04/release-0610.html</guid>
+            <pubDate>Thu, 04 Apr 2019 06:00:00 GMT</pubDate>
+            <description><![CDATA[<p><strong><div style="float: left; padding-right: 40px;">5 minutes to read</div></strong>
+<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>
+]]></description>
+        </item>
+        <item>
+            <title><![CDATA[ContainerCLI: A CLI tool for your Docker Application]]></title>
+            <link>https://docs.streampipes.org/docs/blog/2018/11/24/container-cli.html</link>
+            <guid>https://docs.streampipes.org/docs/blog/2018/11/24/container-cli.html</guid>
+            <pubDate>Sat, 24 Nov 2018 06:00:00 GMT</pubDate>
+            <description><![CDATA[<p><strong><div style="float: left; padding-right: 40px;">6 minutes to read</div></strong>
+<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>
+]]></description>
+        </item>
+        <item>
+            <title><![CDATA[Preview: StreamPipes release 0.60.0]]></title>
+            <link>https://docs.streampipes.org/docs/blog/2018/09/17/preview-060.html</link>
+            <guid>https://docs.streampipes.org/docs/blog/2018/09/17/preview-060.html</guid>
+            <pubDate>Mon, 17 Sep 2018 06:00:00 GMT</pubDate>
+            <description><![CDATA[<p><strong><div style="float: left; padding-right: 40px;">5 minutes to read</div></strong>
+<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>
+]]></description>
+        </item>
+        <item>
+            <title><![CDATA[How to understand your machine data?]]></title>
+            <link>https://docs.streampipes.org/docs/blog/2018/06/18/how-to-understand-your-machine-data.html</link>
+            <guid>https://docs.streampipes.org/docs/blog/2018/06/18/how-to-understand-your-machine-data.html</guid>
+            <pubDate>Mon, 18 Jun 2018 06:00:00 GMT</pubDate>
+            <description><![CDATA[<p><strong><div style="float: left; padding-right: 40px;">8 minutes to read</div></strong>
+<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>
+]]></description>
+        </item>
+        <item>
+            <title><![CDATA[Welcome to StreamPipes!]]></title>
+            <link>https://docs.streampipes.org/docs/blog/2018/06/14/welcome.html</link>
+            <guid>https://docs.streampipes.org/docs/blog/2018/06/14/welcome.html</guid>
+            <pubDate>Thu, 14 Jun 2018 06:00:00 GMT</pubDate>
+            <description><![CDATA[<p>Welcome to our new blog. StreamPipes is the new, easy-to-use self-service data analytics toolbox for the Industrial IoT. In the coming weeks, we'll publish a series of blog posts that explain some ideas of StreamPipes. You'll read about use cases, be...</p>]]></description>
+        </item>
+    </channel>
+</rss>
\ No newline at end of file
diff --git a/docs/streampipes-docs/blog/index.html b/docs/streampipes-docs/blog/index.html
new file mode 100644
index 0000000..d3cfb21
--- /dev/null
+++ b/docs/streampipes-docs/blog/index.html
@@ -0,0 +1,112 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Blog · StreamPipes</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Self-Service Data Analytics"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Blog · StreamPipes"/><meta property="og:type" content="website"/><meta property="og:url" content="https [...]
+        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="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 [...]
+            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 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 [...]
+<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  [...]
+<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= [...]
+<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 [...]
+<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 [...]
+<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> [...]
+<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 [...]
+<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 [...]
+<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) {
+                  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/streampipes-docs/css/main.css b/docs/streampipes-docs/css/main.css
new file mode 100644
index 0000000..fc94ffe
--- /dev/null
+++ b/docs/streampipes-docs/css/main.css
@@ -0,0 +1 @@
+a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font:inherit;font-size:100%;margin:0;padding:0;vertical-align:baseline}b [...]
\ No newline at end of file
diff --git a/docs/streampipes-docs/css/prism.css b/docs/streampipes-docs/css/prism.css
new file mode 100644
index 0000000..d783edb
--- /dev/null
+++ b/docs/streampipes-docs/css/prism.css
@@ -0,0 +1,115 @@
+/**
+ * Copyright (c) 2017-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * Modified prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+
+code[class*='language-'],
+pre[class*='language-'] {
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+  text-align: left;
+  white-space: pre;
+  word-spacing: normal;
+  word-break: normal;
+  word-wrap: normal;
+  line-height: 1.5;
+
+  -moz-tab-size: 4;
+  -o-tab-size: 4;
+  tab-size: 4;
+
+  -webkit-hyphens: none;
+  -moz-hyphens: none;
+  -ms-hyphens: none;
+  hyphens: none;
+}
+
+/* Code blocks */
+pre[class*='language-'] {
+  padding: 1em;
+  margin: 0.5em 0;
+  overflow: auto;
+}
+
+/* Inline code */
+:not(pre) > code[class*='language-'] {
+  padding: 0.1em;
+  border-radius: 0.3em;
+  white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+  color: slategray;
+}
+
+.token.punctuation {
+  color: #999;
+}
+
+.namespace {
+  opacity: 0.7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.constant,
+.token.symbol,
+.token.deleted {
+  color: #905;
+}
+
+.token.selector,
+.token.number,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+  color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+  color: #9a6e3a;
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+  color: #07a;
+}
+
+.token.function,
+.token.class-name {
+  color: #dd4a68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+  color: #e90;
+}
+
+.token.important,
+.token.bold {
+  font-weight: bold;
+}
+.token.italic {
+  font-style: italic;
+}
+
+.token.entity {
+  cursor: help;
+}
diff --git a/docs/streampipes-docs/docs/0.55.2/dev-guide-architecture.html b/docs/streampipes-docs/docs/0.55.2/dev-guide-architecture.html
new file mode 100644
index 0000000..a39f317
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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/streampipes-docs/docs/0.55.2/dev-guide-architecture/index.html b/docs/streampipes-docs/docs/0.55.2/dev-guide-architecture/index.html
new file mode 100644
index 0000000..a39f317
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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/streampipes-docs/docs/0.55.2/dev-guide-development-environment.html b/docs/streampipes-docs/docs/0.55.2/dev-guide-development-environment.html
new file mode 100644
index 0000000..5f9e3ab
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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/streampipes-docs/docs/0.55.2/dev-guide-development-environment/index.html b/docs/streampipes-docs/docs/0.55.2/dev-guide-development-environment/index.html
new file mode 100644
index 0000000..5f9e3ab
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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/streampipes-docs/docs/0.55.2/dev-guide-introduction.html b/docs/streampipes-docs/docs/0.55.2/dev-guide-introduction.html
new file mode 100644
index 0000000..69c9bda
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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/streampipes-docs/docs/0.55.2/dev-guide-introduction/index.html b/docs/streampipes-docs/docs/0.55.2/dev-guide-introduction/index.html
new file mode 100644
index 0000000..69c9bda
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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/streampipes-docs/docs/0.55.2/dev-guide-sdk-guide-processors.html b/docs/streampipes-docs/docs/0.55.2/dev-guide-sdk-guide-processors.html
new file mode 100644
index 0000000..3fc1693
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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/streampipes-docs/docs/0.55.2/dev-guide-sdk-guide-processors/index.html b/docs/streampipes-docs/docs/0.55.2/dev-guide-sdk-guide-processors/index.html
new file mode 100644
index 0000000..3fc1693
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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/streampipes-docs/docs/0.55.2/dev-guide-sdk-guide-sinks.html b/docs/streampipes-docs/docs/0.55.2/dev-guide-sdk-guide-sinks.html
new file mode 100644
index 0000000..7a865ad
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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/streampipes-docs/docs/0.55.2/dev-guide-sdk-guide-sinks/index.html b/docs/streampipes-docs/docs/0.55.2/dev-guide-sdk-guide-sinks/index.html
new file mode 100644
index 0000000..7a865ad
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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/streampipes-docs/docs/0.55.2/dev-guide-sdk-guide-sources.html b/docs/streampipes-docs/docs/0.55.2/dev-guide-sdk-guide-sources.html
new file mode 100644
index 0000000..2b5d88c
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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/streampipes-docs/docs/0.55.2/dev-guide-sdk-guide-sources/index.html b/docs/streampipes-docs/docs/0.55.2/dev-guide-sdk-guide-sources/index.html
new file mode 100644
index 0000000..2b5d88c
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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/streampipes-docs/docs/0.55.2/dev-guide-tutorial-processors.html b/docs/streampipes-docs/docs/0.55.2/dev-guide-tutorial-processors.html
new file mode 100644
index 0000000..3cfa7a8
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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">
+<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/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/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/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><a href="#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/streampipes-docs/docs/0.55.2/dev-guide-tutorial-processors/index.html b/docs/streampipes-docs/docs/0.55.2/dev-guide-tutorial-processors/index.html
new file mode 100644
index 0000000..3cfa7a8
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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">
+<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/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/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/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><a href="#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/streampipes-docs/docs/0.55.2/dev-guide-tutorial-sources.html b/docs/streampipes-docs/docs/0.55.2/dev-guide-tutorial-sources.html
new file mode 100644
index 0000000..d32f213
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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 descrip [...]
+"/><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 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/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/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/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/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</a></li><li><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/streampipes-docs/docs/0.55.2/dev-guide-tutorial-sources/index.html b/docs/streampipes-docs/docs/0.55.2/dev-guide-tutorial-sources/index.html
new file mode 100644
index 0000000..d32f213
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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 descrip [...]
+"/><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 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/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/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/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/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</a></li><li><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/streampipes-docs/docs/0.55.2/faq-common-problems.html b/docs/streampipes-docs/docs/0.55.2/faq-common-problems.html
new file mode 100644
index 0000000..25ab7ca
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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</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">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/streampipes-docs/docs/0.55.2/faq-common-problems/index.html b/docs/streampipes-docs/docs/0.55.2/faq-common-problems/index.html
new file mode 100644
index 0000000..25ab7ca
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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</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">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/streampipes-docs/docs/0.55.2/pipeline-elements.html b/docs/streampipes-docs/docs/0.55.2/pipeline-elements.html
new file mode 100644
index 0000000..1e37b7f
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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</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">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/streampipes-docs/docs/0.55.2/pipeline-elements/index.html b/docs/streampipes-docs/docs/0.55.2/pipeline-elements/index.html
new file mode 100644
index 0000000..1e37b7f
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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</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">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/streampipes-docs/docs/0.55.2/privacy.html b/docs/streampipes-docs/docs/0.55.2/privacy.html
new file mode 100644
index 0000000..58ed4ec
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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-stelle&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 [...]
+<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/streampipes-docs/docs/0.55.2/privacy/index.html b/docs/streampipes-docs/docs/0.55.2/privacy/index.html
new file mode 100644
index 0000000..58ed4ec
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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-stelle&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 [...]
+<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/streampipes-docs/docs/0.55.2/user-guide-getting-started.html b/docs/streampipes-docs/docs/0.55.2/user-guide-getting-started.html
new file mode 100644
index 0000000..df98ff0
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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</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">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/user-guide-introduction">User Guide</a> or go to the <a href="/docs/docs/0.55.2/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/user-guide-introduction"><span class="arrow-prev">← </span><span>Introduction</span></a><a class="docs-next button" href="/docs/docs/0.55.2/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="#first-examples">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/streampipes-docs/docs/0.55.2/user-guide-getting-started/index.html b/docs/streampipes-docs/docs/0.55.2/user-guide-getting-started/index.html
new file mode 100644
index 0000000..df98ff0
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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</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">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/user-guide-introduction">User Guide</a> or go to the <a href="/docs/docs/0.55.2/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/user-guide-introduction"><span class="arrow-prev">← </span><span>Introduction</span></a><a class="docs-next button" href="/docs/docs/0.55.2/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="#first-examples">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/streampipes-docs/docs/0.55.2/user-guide-installation.html b/docs/streampipes-docs/docs/0.55.2/user-guide-installation.html
new file mode 100644
index 0000000..54eb30a
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Installation · StreamPipes" [...]
+        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">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/user-guide-getting-started"><span class="arrow-prev">← </span><span>Previous</span></a><a class="docs-next button" href="/docs/docs/0.55.2/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="#supported-operating-sy [...]
+                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/streampipes-docs/docs/0.55.2/user-guide-installation/index.html b/docs/streampipes-docs/docs/0.55.2/user-guide-installation/index.html
new file mode 100644
index 0000000..54eb30a
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Installation · StreamPipes" [...]
+        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">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/user-guide-getting-started"><span class="arrow-prev">← </span><span>Previous</span></a><a class="docs-next button" href="/docs/docs/0.55.2/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="#supported-operating-sy [...]
+                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/streampipes-docs/docs/0.55.2/user-guide-introduction.html b/docs/streampipes-docs/docs/0.55.2/user-guide-introduction.html
new file mode 100644
index 0000000..fd47ddb
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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</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 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/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/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/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-audience">Targ [...]
+                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/streampipes-docs/docs/0.55.2/user-guide-introduction/index.html b/docs/streampipes-docs/docs/0.55.2/user-guide-introduction/index.html
new file mode 100644
index 0000000..fd47ddb
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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</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 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/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/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/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-audience">Targ [...]
+                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/streampipes-docs/docs/0.55.2/user-guide-processing-elements.html b/docs/streampipes-docs/docs/0.55.2/user-guide-processing-elements.html
new file mode 100644
index 0000000..bf6f5ad
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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</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">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/user-guide-tour"><span class="arrow-prev">← </span><span>Tour</span></a><a class="docs-next button" href="/docs/docs/0.55.2/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-elements">Processi [...]
+                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/streampipes-docs/docs/0.55.2/user-guide-processing-elements/index.html b/docs/streampipes-docs/docs/0.55.2/user-guide-processing-elements/index.html
new file mode 100644
index 0000000..bf6f5ad
--- /dev/null
+++ b/docs/streampipes-docs/docs/0.55.2/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"/><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</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">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>
... 119765 lines suppressed ...


Mime
View raw message