Getting Started
Basic Concepts
Advanced Concepts
How-to Guides
Building integration flows
Data transformation
Integration patterns
Developing Components
Tenant Management
CRM components
ERP components
E-Commerce components
Marketing-related components
Finance-related components
Office components
Protocol components
Service components
Database components
Utility components
Component Descriptor
Version 3.21.0 is full of new stuff!


You can now manage Recipe visibility with the new API endpoint PATCH v2/:recipe_id/visibility. This action is only available to users with proper permissions, and can be applied to components visible to them. See details here.

Also, you can now use Recipe details page (replace variables with corresponding data):

Recipe descriptions support markdown syntax, except for checkboxes. Images for the page are hosted by Recipe author.

Another page for Recipes UI is Recipe activation page (replace variables with corresponding data):

It contains Recipe variables fields and Component sections listed with Credentials. Here you can choose existing Credentials, create new or edit existing ones during Recipe activation. Some data will require manual configuration: Credentials, Fields, Flow Variables.


You can now see monthly quota history and quota usage of a Contract on the corresponding page:

Quota Overview Page

See details on quota history here.


You can now manage Snapshots via the API. The list of endpoints is here.

Also, we have added reference by ID in Component metadata JSON Schema.

Another IMPORTANT thing - Docker Registry service doesn’t run under the root user any more and requires migration. See instructions here. Please note that this is crucial, and without migration the Platform will fail.

List Of Fixed Bugs

  • GET Flows-Versions and CRUD with Flow draft are now available only to Workspace members.

  • Dropdown lists of numbers in Components are now displayed correctly.

  • Now errors are grouped by input message and error message.

Recipes Stuff

You can find the corresponding API doc here). POST v2/recipes and PATCH v2/recipes/:id do not have attributes.visibility anymore. Instead, new Recipes are created with the default visibility set for the Workspace. See more details here.

Changing Recipe visibility requires certain permissions, depending on visibility level: Workspace, Contract, Tenant, Global.

Other stuff

API endpoints for Snapshots:

  • GET /v2/flows/$flowId/snapshots

  • GET /v2/flows/$flowId/snapshots/$stepId

  • POST /v2/flows/$flowId/snapshots/

  • PATCH /v2/flows/$flowId/snapshosts/$stepId

  • DELETE /v2/flows/$flowId/snapshots/$stepId

You can find the corresponding API docs here.

As for JSON Schema reference by ID:

  “definitions”: {
    “address”: {
      “$id”: “#address”,
      “type”: “object”,
      “properties”: {
        “street_address”: { “type”: “string” },
        “city”:           { “type”: “string” },
        “state”:          { “type”: “string” }
      “required”: [“street_address”, “city”, “state”]
  “type”: “object”,
  “properties”: {
    “billing_address”: { “$ref”: “#address” },
    “shipping_address”: { “$ref”: “#address” }

Docker Migration

The migration has to be run AFTER deploying the release, where the docker-registry is being run as non-root. If the old version of the docker-registry (with root) was run, just to deploy the new version, remove the old migration job and run the migration again.

The official registry (registry:2.7.1 or mirror elasticio/registry:2.7.1) is being run as a root, elasticio/registry:2.7.1-non-root is being run as docker. Our migration contains an update of ownership of files according to changed user (root->docker), and is implemented as kubernetes job (i.e. it has to be run only once).

Specify the YOUR_CONTEXT below and execute:

cat << EOM | kubectl create --context YOUR_CONTEXT --namespace platform  -f -
    "apiVersion": "batch/v1",
    "kind": "Job",
    "metadata": {
        "labels": {
            "app": "docker-registry-migration-for-non-root"
        "name": "docker-registry-migration-for-non-root",
        "namespace": "platform"
    "spec": {
        "backoffLimit": 0,
        "completions": 1,
        "parallelism": 1,
        "template": {
            "metadata": {
                "labels": {
                    "app": "docker-registry-migration-for-non-root",
                    "job-name": "docker-registry-migration-for-non-root"
                "name": "docker-registry-migration-for-non-root"
            "spec": {
                "containers": [
                        "command": [
                            "chown -R docker:docker /var/lib/registry"
                        "image": "elasticio/registry:2.7.1-non-root",
                        "imagePullPolicy": "Always",
                        "name": "docker-registry-migration-for-non-root",
                        "securityContext": {
                            "runAsUser": 0
                        "terminationMessagePath": "/dev/termination-log",
                        "terminationMessagePolicy": "File",
                        "volumeMounts": [
                                "mountPath": "/var/lib/registry",
                                "name": "docker-storage",
                                "subPath": "docker"
                "dnsPolicy": "ClusterFirst",
                "imagePullSecrets": [
                        "name": "elasticiodevops"
                "nodeSelector": {
                    "elasticio-role": "platform"
                "restartPolicy": "Never",
                "schedulerName": "default-scheduler",
                "volumes": [
                        "name": "docker-storage",
                        "persistentVolumeClaim": {
                            "claimName": "platform-storage-slugs-volume-claim"

To check the success, create new build and publish it:

kubectl --context YOUR_CONTEXT --namespace platform exec  -it  docker-registry-INSERT_CERTAIN_POD_POSTFIX -- sh -c "ls -la /var/lib/registry"

It must contain docker docker:

drwxr-xr-x    3 docker   docker        4096 Aug  7 19:01 .
drwxr-xr-x    1 root     root          4096 Oct  4 15:18 ..
drwxr-xr-x    3 docker   docker        4096 Aug  7 19:01 docker