Skip to content
Weik.ioDocs
2026.2
Try Weik.io

Document kinds

Weik.io 2026.2

Every kind of document weikio apply accepts, with its fields and the JSON schema the CLI checks it against.

On this page

Everything Weik.io manages can be written as a YAML document and kept in Git: projects and roles, environments, integrations and their generated kinds, variables, deployments, APIs and entity types. Every document has the same envelope, and weikio apply -f <folder> creates or updates each one:

apiVersion: weik.io/v1
kind: variable
metadata: { name: erp-url, project: finance, environment: production }
spec: { value: https://erp.example.internal }

metadata.project and metadata.environment can be left out when the project comes from a project.yaml in a parent folder or from --project, and the environment from --env. weikio validate checks every document against its kind’s schema without sending anything, and weikio export writes what the hub has as documents that apply again unchanged.

The schema of each kind is below each section. The hub serves the same schemas at GET /api/v1/schemas/{kind}, and an editor with the YAML language server marks a misspelled field as you type when a file points at the schema:

# finance/production/variables/erp-url.yaml
# yaml-language-server: $schema=../../../schemas/variable.json

project#

A project groups integrations, APIs and the values they share, and people get access to it through a role. A platform administrator writes projects.

apiVersion: weik.io/v1
kind: project
metadata: { name: finance }
spec:
  displayName: Finance
  description: Integrations of the finance team
  labels: { team: finance }

Metadata: name.

Field Type What it is
displayName string The name the admin UI shows.
description string What the project is for.
labels map Labels as key and value, which weikio get projects -l filters by.
budgets object storeBytes, the size of the project’s store for built versions, in bytes.
JSON schema of project
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "project",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "project"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "displayName": {
          "type": [
            "string",
            "null"
          ]
        },
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "budgets": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "storeBytes": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$"
            }
          },
          "additionalProperties": false,
          "default": null
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

role#

A role is a set of verbs, and the same role serves every project. The seeded roles are viewer, editor, deployer and admin.

apiVersion: weik.io/v1
kind: role
metadata: { name: helpdesk }
spec: { verbs: [read] }

Metadata: name.

Field Type What it is
description string What the role is for.
verbs list of strings, required The verbs: read, author, operate, reveal, deploy, entity-store-policy and members.
JSON schema of role
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "role",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "role"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "verbs": {
          "type": "array",
          "items": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "required": [
        "verbs"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

member#

A member document gives a user one role in a project, optionally limited to environments, integrations and APIs. The document’s name is the person’s e-mail address.

apiVersion: weik.io/v1
kind: member
metadata: { name: anna@example.com, project: finance }
spec:
  role: helpdesk
  environments: [production]
  integrations: [erp-invoice-export, nightly-payroll]

Metadata: name, project.

Field Type What it is
role string, required The role the member has in the project.
environments list of strings The environments the grant covers, and every environment when the list is empty.
integrations list of strings The integrations the grant covers. With integrations and apis both empty, the grant covers the whole project.
apis list of strings The APIs the grant covers.
JSON schema of member
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "member",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "member"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "role": {
          "type": [
            "string",
            "null"
          ]
        },
        "environments": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "integrations": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "apis": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "required": [
        "role"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

environment#

An environment such as devtest or production belongs to the whole installation, with its own protection and storage budgets.

apiVersion: weik.io/v1
kind: environment
metadata: { name: production }
spec:
  displayName: Production
  order: 2
  isProduction: true
  protection: { allowSecretReveal: false }
  budgets: { entityStoreBytes: 2147483648 }

Metadata: name.

Field Type What it is
displayName string The name the admin UI shows.
order integer The place in the promotion order.
isProduction boolean Marks a production environment, which every change needs --env for. It can’t be changed after the environment is created.
protection object, required allowSecretReveal, allowLatestVersion, startOffline and offlineStartMaxAge, how old a site’s saved copy of a deployment may be for the site to start it while the hub is out of reach.
budgets object, required The sizes in bytes of the stored events (eventsBytes), the entity events (entityEventsBytes), the entity store (entityStoreBytes), the dead letters (deadLetterBytes) and the record of handled events (idempotencyBytes).
trustedCertificates list of strings PEM certificates that every Java process deployed in the environment trusts.
launchDefaults object The Camel properties and Java jvmOptions the environment’s deployments start with. Each property replaces the installation’s property of the same name, and a jvmOptions list replaces the installation’s whole list.
JSON schema of environment
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "environment",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "environment"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "displayName": {
          "type": [
            "string",
            "null"
          ]
        },
        "order": {
          "type": [
            "string",
            "integer"
          ],
          "pattern": "^-?(?:0|[1-9]\\d*)$"
        },
        "isProduction": {
          "type": "boolean"
        },
        "protection": {
          "type": "object",
          "properties": {
            "allowSecretReveal": {
              "type": "boolean"
            },
            "allowLatestVersion": {
              "type": "boolean"
            },
            "offlineStartMaxAge": {
              "type": [
                "string",
                "null"
              ],
              "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
              "minLength": 1,
              "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
            },
            "startOffline": {
              "type": "boolean",
              "default": true
            }
          },
          "additionalProperties": false
        },
        "budgets": {
          "type": "object",
          "properties": {
            "eventsBytes": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$"
            },
            "entityEventsBytes": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$"
            },
            "entityStoreBytes": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$"
            },
            "deadLetterBytes": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": 0
            },
            "idempotencyBytes": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": 0
            }
          },
          "required": [
            "entityStoreBytes"
          ],
          "additionalProperties": false
        },
        "trustedCertificates": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "launchDefaults": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "properties": {
              "type": [
                "object",
                "null"
              ],
              "additionalProperties": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "default": null
            },
            "jvmOptions": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "default": null
            }
          },
          "additionalProperties": false,
          "default": null
        }
      },
      "required": [
        "protection",
        "budgets"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

settings#

The installation’s settings are one document without a name, which weikio settings get prints and weikio settings set changes.

The document has no metadata, because the installation has only one.

Field Type What it is
publicBaseUrl string, required The address the hub is reached at.
localAccounts string, required Who can sign in with a local account: enabled or breakGlassOnly.
bundleRetention object, required How many built versions of each integration to keep and for how long.
defaultCamelVersion string, required The Camel line for integrations that don’t set one.
launchDefaults object The Camel properties and Java jvmOptions every deployment starts with.
backupEvery duration How often the backup service takes an archive, from 1h to 365d.
backupKeep integer How many archives the server keeps.
backupCopyTo string Where each archive is copied, such as an S3 bucket.
twoFactorRequired boolean Whether a platform administrator’s password sign-in needs a code from an authenticator app. On by default.
apimEntrances list of objects The hub’s gateway entrances, written when the hub is set up.
certificates object How the hub’s names and gateway hostnames get their certificates: the authority, the DNS connections, uploaded hub certificates and the platform’s own authority.
allowedNetworks list of strings The address ranges that can reach the hub, and every address when the list is empty.
JSON schema of settings
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "settings",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "settings"
    },
    "spec": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "publicBaseUrl": {
          "type": "string"
        },
        "localAccounts": {
          "type": "string"
        },
        "bundleRetention": {
          "type": "object",
          "properties": {
            "keepVersions": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$"
            },
            "maxAge": {
              "type": [
                "string",
                "null"
              ],
              "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
              "minLength": 1,
              "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
            }
          },
          "additionalProperties": false
        },
        "defaultCamelVersion": {
          "type": "string"
        },
        "launchDefaults": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "properties": {
              "type": [
                "object",
                "null"
              ],
              "additionalProperties": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "default": null
            },
            "jvmOptions": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "default": null
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "backupEvery": {
          "type": [
            "string",
            "null"
          ],
          "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
          "minLength": 1,
          "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d.",
          "default": null
        },
        "backupKeep": {
          "type": [
            "string",
            "integer",
            "null"
          ],
          "pattern": "^-?(?:0|[1-9]\\d*)$",
          "default": null
        },
        "backupCopyTo": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "twoFactorRequired": {
          "type": "boolean",
          "default": true
        },
        "apimEntrances": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "name": {
                "type": "string"
              },
              "addresses": {
                "type": "array",
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "callerAddressKnown": {
                "type": "boolean"
              }
            },
            "required": [
              "name"
            ],
            "additionalProperties": false
          },
          "default": null
        },
        "certificates": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "automatic": {
              "type": "boolean"
            },
            "authority": {
              "type": [
                "string",
                "null"
              ],
              "default": null
            },
            "contact": {
              "type": [
                "string",
                "null"
              ],
              "default": null
            },
            "publicAddresses": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "default": null
            },
            "hubCertificates": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "chain": {
                    "type": "string"
                  },
                  "key": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "default": null,
                    "writeOnly": true,
                    "description": "The certificate's private key in PEM, required when the certificate isn't stored yet. An entry sent without it keeps the stored key of the certificate of the same name and chain. The platform never returns a stored key."
                  }
                },
                "required": [
                  "name",
                  "chain"
                ],
                "additionalProperties": false
              },
              "default": null
            },
            "dns": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "provider": {
                    "type": "string"
                  },
                  "zones": {
                    "type": "array",
                    "items": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "credential": {
                    "type": "string"
                  },
                  "azure": {
                    "type": [
                      "object",
                      "null"
                    ],
                    "properties": {
                      "tenant": {
                        "type": "string"
                      },
                      "client": {
                        "type": "string"
                      },
                      "objectId": {
                        "type": "string"
                      },
                      "subscription": {
                        "type": "string"
                      },
                      "resourceGroup": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "tenant",
                      "client",
                      "objectId",
                      "subscription",
                      "resourceGroup"
                    ],
                    "additionalProperties": false,
                    "default": null
                  },
                  "rfc2136": {
                    "type": [
                      "object",
                      "null"
                    ],
                    "properties": {
                      "server": {
                        "type": "string"
                      },
                      "keyName": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "server",
                      "keyName"
                    ],
                    "additionalProperties": false,
                    "default": null
                  }
                },
                "required": [
                  "name",
                  "provider",
                  "zones",
                  "credential"
                ],
                "additionalProperties": false
              },
              "default": null
            },
            "authorities": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "acme": {
                    "type": "string"
                  },
                  "externalAccount": {
                    "type": [
                      "object",
                      "null"
                    ],
                    "properties": {
                      "keyId": {
                        "type": "string"
                      },
                      "key": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "keyId",
                      "key"
                    ],
                    "additionalProperties": false
                  },
                  "trust": {
                    "type": [
                      "array",
                      "null"
                    ],
                    "items": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "names": {
                    "type": "array",
                    "items": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "orders": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "clientCertificates": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "name",
                  "acme",
                  "names"
                ],
                "additionalProperties": false
              },
              "default": null
            },
            "platformAuthority": {
              "type": [
                "object",
                "null"
              ],
              "properties": {
                "names": {
                  "type": [
                    "array",
                    "null"
                  ],
                  "items": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "additionalProperties": false,
              "default": null
            },
            "hubNames": {
              "type": [
                "string",
                "null"
              ],
              "default": null
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "allowedNetworks": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        }
      },
      "required": [
        "publicBaseUrl",
        "localAccounts",
        "bundleRetention",
        "defaultCamelVersion"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "spec"
  ],
  "additionalProperties": false
}

telemetry-forwarding#

The telemetry forwarding document sends the installation’s logs, metrics, traces and audit records to your own systems, such as a SIEM, Splunk or Azure Monitor. A platform administrator applies it, and Telemetry forwarding has complete files.

The document has no metadata, because the installation has only one.

Field Type What it is
audit object, required The exporters and processors the audit records go through.
collector object, required The OpenTelemetry Collector configuration of the forwarder: its extensions, processors, exporters and pipelines. A value written ${secret:<name>} is read from a platform secret.
JSON schema of telemetry-forwarding
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "telemetry-forwarding",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "telemetry-forwarding"
    },
    "spec": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "audit": {
          "type": "object",
          "properties": {
            "exporters": {
              "type": "array",
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "processors": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "default": null
            }
          },
          "required": [
            "exporters"
          ],
          "additionalProperties": false
        },
        "collector": {
          "type": "object"
        }
      },
      "required": [
        "audit",
        "collector"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "spec"
  ],
  "additionalProperties": false
}

integration#

An integration is a folder of Camel files, and integration.yaml in the folder is optional. weikio init writes it with the fields at the top level, and the same fields can be written as a document under spec. The fields below are shared by every kind of integration, the generated kinds that follow included.

apiVersion: weik.io/v1
kind: integration
metadata: { name: erp-invoice-export }
spec:
  version: 1.0.0
  camelVersion: "4.22.1"
  requirements: { os: linux }
  dependencies:
    - camel:jdbc
    - mvn:com.microsoft.sqlserver:mssql-jdbc:12.8.1.jre11
  kamelets: [erp-paging-source]

Metadata: name, project.

Field Type What it is
version string The version this folder publishes, such as 1.2.0. Without it the first version is 0.1.0 and each apply with changed files publishes the next patch version.
description string What the integration does, shown in the admin UI.
labels map Labels as key and value.
requirements map The capabilities an agent needs to run the integration, such as os: linux or region: fi.
variableDefaults map Starting values for the integration’s own variables, used for a name that no value of the project and no properties file of the folder gives.
camelVersion string The Camel line to build on, such as 4.22.1. Without it the build uses the installation’s default line.
dependencies list of strings Extra dependencies in Camel JBang’s form, such as camel:jdbc or mvn:com.microsoft.sqlserver:mssql-jdbc:12.8.1.jre11.
kamelets list of strings The project’s shared kamelets the routes use. The folder’s own kamelets need no listing.
jvm object Java settings: options for the Java process, such as -Xmx512m, telemetry to turn telemetry on or off and traceSampling, the share of traces kept, from 0 to 1.
startOffline boolean Whether a site may start the integration from its saved state while the hub is out of reach. On by default.
bundleRetention object How many built versions to keep (keepVersions) and for how long (maxAge), in place of the installation’s setting.
runtime string The runtime, camel-main, which is the only one.
singleton boolean Whether one copy at a time runs the routes that start by themselves. On by default for schedules, file transfers, change tracking and event sources.
whenHubUnreachable one of keepLeading, standDown What the leading copy does while its agent can’t reach the hub: keepLeading, the default, or standDown, the default for change tracking.
delivery object How the events the integration reads are delivered to it: retries (1 to 100, 10 by default), retryDelays, maxRouteTime (10 minutes by default), inFlight (1 to 100, 1 by default) and ordered.
JSON schema of integration
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "integration",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "integration"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": "object",
      "properties": {
        "version": {
          "type": [
            "string",
            "null"
          ]
        },
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "requirements": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "variableDefaults": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "camelVersion": {
          "type": [
            "string",
            "null"
          ]
        },
        "dependencies": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "kamelets": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "jvm": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "options": {
              "type": "array",
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "telemetry": {
              "default": null
            },
            "traceSampling": {
              "type": [
                "string",
                "number",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
              "default": null,
              "minimum": 0,
              "maximum": 1
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "startOffline": {
          "type": "boolean",
          "default": true
        },
        "bundleRetention": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "keepVersions": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$"
            },
            "maxAge": {
              "type": [
                "string",
                "null"
              ],
              "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
              "minLength": 1,
              "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "runtime": {
          "type": "string",
          "default": "camel-main"
        },
        "singleton": {
          "type": [
            "boolean",
            "null"
          ],
          "default": null
        },
        "whenHubUnreachable": {
          "enum": [
            "keepLeading",
            "standDown",
            null
          ],
          "default": null
        },
        "delivery": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "retries": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 100
            },
            "retryDelays": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "default": null
            },
            "maxRouteTime": {
              "type": [
                "string",
                "null"
              ],
              "default": null
            },
            "inFlight": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 100
            },
            "ordered": {
              "type": [
                "boolean",
                "null"
              ],
              "default": null
            }
          },
          "additionalProperties": false,
          "default": null
        }
      },
      "required": [],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

mft#

A file transfer moves or copies files on a schedule between two places rclone can reach. Each remote is the name of a variable or secret that holds the remote’s rclone definition, or the definition written in place.

apiVersion: weik.io/v1
kind: mft
metadata: { name: supplier-invoices, project: finance }
spec:
  schedule: "0 0 5 * * ?"
  source:      { remote: supplier-ftp,    path: /outgoing }
  destination: { remote: invoice-archive, path: invoices/incoming }
  operation: move
  filters: ["*.pdf"]

Metadata: name, project.

The fields every integration has, from version to delivery, apply here too. The fields of this kind:

Field Type What it is
schedule string, required When the transfer runs, as a Quartz cron expression in UTC.
source object, required Where the files come from: remote and path.
destination object, required Where the files go: remote and path.
operation string, required The rclone operation, such as copy, move or sync.
filters any rclone filters that pick the files, such as "*.pdf".
flags list of any More rclone flags, one entry per argument.
emitPerFile boolean Whether to publish an event for every file beside the run summary, which is off by default.
retries integer How many times rclone tries within one run, from 0 to 10.
retriesSleep string How long rclone waits between tries, such as 30s.
JSON schema of mft
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "mft",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "mft"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": "object",
      "properties": {
        "version": {
          "type": [
            "string",
            "null"
          ]
        },
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "requirements": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "variableDefaults": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "camelVersion": {
          "type": [
            "string",
            "null"
          ]
        },
        "dependencies": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "kamelets": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "jvm": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "options": {
              "type": "array",
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "telemetry": {
              "default": null
            },
            "traceSampling": {
              "type": [
                "string",
                "number",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
              "default": null,
              "minimum": 0,
              "maximum": 1
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "startOffline": {
          "type": "boolean",
          "default": true
        },
        "bundleRetention": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "keepVersions": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$"
            },
            "maxAge": {
              "type": [
                "string",
                "null"
              ],
              "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
              "minLength": 1,
              "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "runtime": {
          "type": "string",
          "default": "camel-main"
        },
        "singleton": {
          "type": [
            "boolean",
            "null"
          ],
          "default": null
        },
        "whenHubUnreachable": {
          "enum": [
            "keepLeading",
            "standDown",
            null
          ],
          "default": null
        },
        "delivery": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "retries": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 100
            },
            "retryDelays": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "default": null
            },
            "maxRouteTime": {
              "type": [
                "string",
                "null"
              ],
              "default": null
            },
            "inFlight": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 100
            },
            "ordered": {
              "type": [
                "boolean",
                "null"
              ],
              "default": null
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "schedule": {
          "type": "string"
        },
        "source": {
          "type": "object"
        },
        "destination": {
          "type": "object"
        },
        "operation": {
          "type": "string"
        },
        "filters": {},
        "flags": {
          "type": "array"
        },
        "emitPerFile": {
          "type": "boolean"
        },
        "retries": {
          "type": "integer"
        },
        "retriesSleep": {
          "type": "string"
        }
      },
      "required": [
        "schedule",
        "source",
        "destination",
        "operation"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

schedule#

A schedule runs a command on an agent at set times, such as curl for a URL or a script the agent’s host has.

apiVersion: weik.io/v1
kind: schedule
metadata: { name: nightly-cleanup, project: finance }
spec:
  cron: "0 30 1 * * ?"
  command: curl
  args: ["-fsS", "{{cleanup-url}}"]

Metadata: name, project.

The fields every integration has, from version to delivery, apply here too. The fields of this kind:

Field Type What it is
cron string, required When the command runs, as a Quartz cron expression in UTC.
command string, required The command to run.
args list of any The command’s arguments.
JSON schema of schedule
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "schedule",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "schedule"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": "object",
      "properties": {
        "version": {
          "type": [
            "string",
            "null"
          ]
        },
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "requirements": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "variableDefaults": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "camelVersion": {
          "type": [
            "string",
            "null"
          ]
        },
        "dependencies": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "kamelets": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "jvm": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "options": {
              "type": "array",
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "telemetry": {
              "default": null
            },
            "traceSampling": {
              "type": [
                "string",
                "number",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
              "default": null,
              "minimum": 0,
              "maximum": 1
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "startOffline": {
          "type": "boolean",
          "default": true
        },
        "bundleRetention": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "keepVersions": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$"
            },
            "maxAge": {
              "type": [
                "string",
                "null"
              ],
              "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
              "minLength": 1,
              "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "runtime": {
          "type": "string",
          "default": "camel-main"
        },
        "singleton": {
          "type": [
            "boolean",
            "null"
          ],
          "default": null
        },
        "whenHubUnreachable": {
          "enum": [
            "keepLeading",
            "standDown",
            null
          ],
          "default": null
        },
        "delivery": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "retries": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 100
            },
            "retryDelays": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "default": null
            },
            "maxRouteTime": {
              "type": [
                "string",
                "null"
              ],
              "default": null
            },
            "inFlight": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 100
            },
            "ordered": {
              "type": [
                "boolean",
                "null"
              ],
              "default": null
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "cron": {
          "type": "string"
        },
        "command": {
          "type": "string"
        },
        "args": {
          "type": "array"
        }
      },
      "required": [
        "cron",
        "command"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

event-channel#

A channel holds events that integrations publish and read. A channel with a type also delivers each event to a sink kamelet, such as Slack or HTTP.

apiVersion: weik.io/v1
kind: event-channel
metadata: { name: invoice-alerts, project: finance }
spec:
  type: slack
  parameters:
    channel: "#invoices"
    webhookUrl: "{{slack-webhook-url}}"

Metadata: name, project.

The fields every integration has, from version to delivery, apply here too. The fields of this kind:

Field Type What it is
type string The sink kamelet each event is delivered to, without its -sink suffix. Without a type the channel only stores events.
parameters object The sink kamelet’s parameters.
retention string How long events are kept: 30d, the environment’s default, or 0 for a channel that delivers without storing.
JSON schema of event-channel
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "event-channel",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "event-channel"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": "object",
      "properties": {
        "version": {
          "type": [
            "string",
            "null"
          ]
        },
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "requirements": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "variableDefaults": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "camelVersion": {
          "type": [
            "string",
            "null"
          ]
        },
        "dependencies": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "kamelets": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "jvm": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "options": {
              "type": "array",
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "telemetry": {
              "default": null
            },
            "traceSampling": {
              "type": [
                "string",
                "number",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
              "default": null,
              "minimum": 0,
              "maximum": 1
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "startOffline": {
          "type": "boolean",
          "default": true
        },
        "bundleRetention": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "keepVersions": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$"
            },
            "maxAge": {
              "type": [
                "string",
                "null"
              ],
              "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
              "minLength": 1,
              "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "runtime": {
          "type": "string",
          "default": "camel-main"
        },
        "singleton": {
          "type": [
            "boolean",
            "null"
          ],
          "default": null
        },
        "whenHubUnreachable": {
          "enum": [
            "keepLeading",
            "standDown",
            null
          ],
          "default": null
        },
        "delivery": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "retries": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 100
            },
            "retryDelays": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "default": null
            },
            "maxRouteTime": {
              "type": [
                "string",
                "null"
              ],
              "default": null
            },
            "inFlight": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 100
            },
            "ordered": {
              "type": [
                "boolean",
                "null"
              ],
              "default": null
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "type": {
          "type": "string"
        },
        "parameters": {
          "type": "object"
        },
        "retention": {
          "type": "string"
        }
      },
      "required": [],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

event-source#

An event source brings events in from another system through a source kamelet, such as files arriving in an S3 bucket.

apiVersion: weik.io/v1
kind: event-source
metadata: { name: invoice-files, project: finance }
spec:
  type: aws-s3
  parameters:
    bucketNameOrArn: "{{invoice-bucket}}"
    accessKey: "{{aws-access-key}}"
    secretKey: "{{aws-secret-key}}"
    region: eu-north-1

Metadata: name, project.

The fields every integration has, from version to delivery, apply here too. The fields of this kind:

Field Type What it is
type string, required The source kamelet, without its -source suffix.
parameters object The source kamelet’s parameters.
steps list of any Steps each event goes through before it is published.
errorHandler any What happens to an event that fails.
JSON schema of event-source
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "event-source",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "event-source"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": "object",
      "properties": {
        "version": {
          "type": [
            "string",
            "null"
          ]
        },
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "requirements": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "variableDefaults": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "camelVersion": {
          "type": [
            "string",
            "null"
          ]
        },
        "dependencies": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "kamelets": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "jvm": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "options": {
              "type": "array",
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "telemetry": {
              "default": null
            },
            "traceSampling": {
              "type": [
                "string",
                "number",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
              "default": null,
              "minimum": 0,
              "maximum": 1
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "startOffline": {
          "type": "boolean",
          "default": true
        },
        "bundleRetention": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "keepVersions": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$"
            },
            "maxAge": {
              "type": [
                "string",
                "null"
              ],
              "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
              "minLength": 1,
              "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "runtime": {
          "type": "string",
          "default": "camel-main"
        },
        "singleton": {
          "type": [
            "boolean",
            "null"
          ],
          "default": null
        },
        "whenHubUnreachable": {
          "enum": [
            "keepLeading",
            "standDown",
            null
          ],
          "default": null
        },
        "delivery": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "retries": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 100
            },
            "retryDelays": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "default": null
            },
            "maxRouteTime": {
              "type": [
                "string",
                "null"
              ],
              "default": null
            },
            "inFlight": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 100
            },
            "ordered": {
              "type": [
                "boolean",
                "null"
              ],
              "default": null
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "type": {
          "type": "string"
        },
        "parameters": {
          "type": "object"
        },
        "steps": {
          "type": "array"
        },
        "errorHandler": {}
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

event-subscription#

An event subscription sends the events of an event source or a channel to another channel, optionally filtered and changed on the way.

apiVersion: weik.io/v1
kind: event-subscription
metadata: { name: alert-on-invoices, project: finance }
spec:
  source: invoice-created
  channel: invoice-alerts
  filter:
    headers: { Weikio-Source: finance/erp-invoice-export }

Metadata: name, project.

The fields every integration has, from version to delivery, apply here too. The fields of this kind:

Field Type What it is
source string, required The event source or channel the events come from.
channel string, required The channel the events go to.
steps list of any Steps each event goes through.
filter object Which events pass, such as by header.
errorHandler any What happens to an event that fails.
JSON schema of event-subscription
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "event-subscription",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "event-subscription"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": "object",
      "properties": {
        "version": {
          "type": [
            "string",
            "null"
          ]
        },
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "requirements": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "variableDefaults": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "camelVersion": {
          "type": [
            "string",
            "null"
          ]
        },
        "dependencies": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "kamelets": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "jvm": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "options": {
              "type": "array",
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "telemetry": {
              "default": null
            },
            "traceSampling": {
              "type": [
                "string",
                "number",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
              "default": null,
              "minimum": 0,
              "maximum": 1
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "startOffline": {
          "type": "boolean",
          "default": true
        },
        "bundleRetention": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "keepVersions": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$"
            },
            "maxAge": {
              "type": [
                "string",
                "null"
              ],
              "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
              "minLength": 1,
              "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "runtime": {
          "type": "string",
          "default": "camel-main"
        },
        "singleton": {
          "type": [
            "boolean",
            "null"
          ],
          "default": null
        },
        "whenHubUnreachable": {
          "enum": [
            "keepLeading",
            "standDown",
            null
          ],
          "default": null
        },
        "delivery": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "retries": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 100
            },
            "retryDelays": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "default": null
            },
            "maxRouteTime": {
              "type": [
                "string",
                "null"
              ],
              "default": null
            },
            "inFlight": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 100
            },
            "ordered": {
              "type": [
                "boolean",
                "null"
              ],
              "default": null
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "source": {
          "type": "string"
        },
        "channel": {
          "type": "string"
        },
        "steps": {
          "type": "array"
        },
        "filter": {
          "type": "object"
        },
        "errorHandler": {}
      },
      "required": [
        "source",
        "channel"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

change-tracking#

Change tracking publishes the changes of a database’s tables as events, with Debezium. type picks the connector, such as postgres, mysql, sqlserver, oracle, mongodb or db2.

apiVersion: weik.io/v1
kind: change-tracking
metadata: { name: order-changes, project: shop }
spec:
  type: postgres
  databaseHostname: "{{orders-db-host}}"
  databasePort: 5432
  databaseDbname: orders
  databaseUser: "{{orders-db-user}}"
  databasePassword: "{{orders-db-password}}"
  parameters:
    additionalProperties.offset.storage.jdbc.connection.url: "jdbc:postgresql://{{orders-db-host}}:5432/orders"
    additionalProperties.offset.storage.jdbc.connection.user: "{{orders-db-user}}"
    additionalProperties.offset.storage.jdbc.connection.password: "{{orders-db-password}}"
  offsetTable: weikio_offsets
  channel: order-changed

Metadata: name, project.

The fields every integration has, from version to delivery, apply here too. The fields of this kind:

Field Type What it is
type string, required The Debezium connector.
databaseHostname string The database server’s host name.
databasePort any The database server’s port.
databaseDbname string The database.
databaseUser string The user the connector signs in as.
databasePassword string The user’s password, usually a placeholder for a secret.
parameters object, required The connector’s other settings, among them the JDBC connection of the table where it keeps its place.
offsetTable string, required The table where the connector keeps its place in the change log.
channel string, required The channel the changes are published to.
JSON schema of change-tracking
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "change-tracking",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "change-tracking"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": "object",
      "properties": {
        "version": {
          "type": [
            "string",
            "null"
          ]
        },
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "requirements": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "variableDefaults": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "camelVersion": {
          "type": [
            "string",
            "null"
          ]
        },
        "dependencies": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "kamelets": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "jvm": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "options": {
              "type": "array",
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "telemetry": {
              "default": null
            },
            "traceSampling": {
              "type": [
                "string",
                "number",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
              "default": null,
              "minimum": 0,
              "maximum": 1
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "startOffline": {
          "type": "boolean",
          "default": true
        },
        "bundleRetention": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "keepVersions": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$"
            },
            "maxAge": {
              "type": [
                "string",
                "null"
              ],
              "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
              "minLength": 1,
              "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "runtime": {
          "type": "string",
          "default": "camel-main"
        },
        "singleton": {
          "type": [
            "boolean",
            "null"
          ],
          "default": null
        },
        "whenHubUnreachable": {
          "enum": [
            "keepLeading",
            "standDown",
            null
          ],
          "default": null
        },
        "delivery": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "retries": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 100
            },
            "retryDelays": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "default": null
            },
            "maxRouteTime": {
              "type": [
                "string",
                "null"
              ],
              "default": null
            },
            "inFlight": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 100
            },
            "ordered": {
              "type": [
                "boolean",
                "null"
              ],
              "default": null
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "type": {
          "type": "string"
        },
        "databaseHostname": {
          "type": "string"
        },
        "databasePort": {},
        "databaseDbname": {
          "type": "string"
        },
        "databaseUser": {
          "type": "string"
        },
        "databasePassword": {
          "type": "string"
        },
        "parameters": {
          "type": "object",
          "properties": {
            "additionalProperties.offset.storage.jdbc.connection.url": {
              "type": [
                "string",
                "number",
                "boolean"
              ]
            },
            "additionalProperties.offset.storage.jdbc.connection.user": {
              "type": [
                "string",
                "number",
                "boolean"
              ]
            },
            "additionalProperties.offset.storage.jdbc.connection.password": {
              "type": [
                "string",
                "number",
                "boolean"
              ]
            }
          },
          "required": [
            "additionalProperties.offset.storage.jdbc.connection.url",
            "additionalProperties.offset.storage.jdbc.connection.user",
            "additionalProperties.offset.storage.jdbc.connection.password"
          ]
        },
        "offsetTable": {
          "type": "string"
        },
        "channel": {
          "type": "string"
        }
      },
      "required": [
        "type",
        "parameters",
        "offsetTable",
        "channel"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

variable#

A variable is a configuration value that routes read as a Camel property. Without an environment it’s the default, and with one it overrides the default there. With integration in its metadata it belongs to one integration.

apiVersion: weik.io/v1
kind: variable
metadata: { name: erp-url, project: finance, environment: production }
spec: { value: https://erp.example.internal }

Metadata: name, project, environment, integration.

Field Type What it is
description string What the value is for.
value string, required The value.
JSON schema of variable
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "variable",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "variable"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        },
        "environment": {
          "type": "string"
        },
        "integration": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "value": {
          "type": "string"
        }
      },
      "required": [
        "value"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

secret#

A secret has the same shape as a variable, but its value is stored encrypted and never listed. Values are set with weikio secret set so they stay out of Git, and an exported secret has no value.

Metadata: name, project, environment, integration.

Field Type What it is
description string What the secret is for.
value string The value in plain text, which the hub stores encrypted.
format string file for a file of up to 128 KiB, such as a keystore, which routes read from a path.
JSON schema of secret
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "secret",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "secret"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        },
        "environment": {
          "type": "string"
        },
        "integration": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "value": {
          "type": "string",
          "writeOnly": true,
          "description": "The secret's value, unsealed: the text itself, or, when `format` is `file`, the file's bytes in base64. A write must send it, not empty. Every read returns it empty; only the reveal routes return it. An export leaves it out."
        },
        "format": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

kamelet#

A kamelet shared by the integrations of a project. A kamelet in an integration’s own folder needs no document.

Metadata: name, project.

Field Type What it is
yaml string, required The kamelet’s YAML.
JSON schema of kamelet
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "kamelet",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "kamelet"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "yaml": {
          "type": "string"
        }
      },
      "required": [
        "yaml"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

deployment#

A deployment says which version of an integration runs in an environment. In Git, each environment’s folder has one deployment document per integration.

apiVersion: weik.io/v1
kind: deployment
metadata: { name: erp-invoice-export, project: finance, environment: production }
spec: { version: 1.1.0, state: started }

Metadata: name, project, environment.

Field Type What it is
version string, required The version to run, or latest where the environment allows it.
state one of unknown, started, stopped started or stopped.
variableOverrides map Values for this deployment only, which beat every other value of the same name.
jvm object Java settings for this deployment, in place of the integration’s.
trustedCertificates list of strings PEM certificates this deployment trusts, added to the environment’s.
singleton boolean Overrides the integration’s singleton.
whenHubUnreachable one of keepLeading, standDown Overrides the integration’s whenHubUnreachable.
delivery object Overrides the integration’s delivery, and adds maxPending, how many events may wait for an answer at once.
JSON schema of deployment
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "deployment",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "deployment"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        },
        "environment": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project",
        "environment"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "version": {
          "type": "string"
        },
        "state": {
          "enum": [
            "unknown",
            "started",
            "stopped"
          ]
        },
        "variableOverrides": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "jvm": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "options": {
              "type": "array",
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "telemetry": {
              "default": null
            },
            "traceSampling": {
              "type": [
                "string",
                "number",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
              "default": null,
              "minimum": 0,
              "maximum": 1
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "trustedCertificates": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "singleton": {
          "type": [
            "boolean",
            "null"
          ],
          "default": null
        },
        "whenHubUnreachable": {
          "enum": [
            "keepLeading",
            "standDown",
            null
          ],
          "default": null
        },
        "delivery": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "retries": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 100
            },
            "retryDelays": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "default": null
            },
            "maxRouteTime": {
              "type": [
                "string",
                "null"
              ],
              "default": null
            },
            "inFlight": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 100
            },
            "ordered": {
              "type": [
                "boolean",
                "null"
              ],
              "default": null
            },
            "maxPending": {
              "type": [
                "string",
                "integer",
                "null"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "default": null,
              "minimum": 1,
              "maximum": 10000
            }
          },
          "additionalProperties": false,
          "default": null
        }
      },
      "required": [
        "version"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

gateway#

A gateway is an entrance of one environment: its hostnames, who may call it, its client certificate rules, its rate limits and where its certificates come from. A platform administrator writes gateways.

Metadata: name.

Field Type What it is
displayName string The name the admin UI shows.
environment string, required The environment the gateway serves.
hostnames list of strings The hostnames callers use.
servedBy string hub, or site for the APIM instances of sites labelled with the gateway.
default boolean Makes it a default gateway for the deployments and subscriptions of its projects that don’t choose one.
projects list of strings The projects that may use the gateway, and every project when the list is empty.
entrances list of strings, required The entrances the gateway is served on.
networks list of strings, required Who may call: internet, or address ranges such as 10.0.0.0/8.
clientCertificate object mode, which is none, optional or required, and the authorities whose client certificates the gateway accepts.
callerLimit object Calls allowed per caller address, as permitLimit per window.
subscriptionLimit object Calls allowed per subscription that has no limit of its own.
upstreams object networks, the address ranges its APIs may call.
maxRequestSize string The largest request body it accepts.
relayFrom list of strings The hub gateways of the same environment that may relay calls into this site gateway.
certificateSource string Who signs its hostnames: automatic, public, platform, uploaded or a certificate authority’s name.
serverCertificates list of objects Uploaded certificates, each with a name, a chain and a key.
JSON schema of gateway
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "gateway",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "gateway"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "displayName": {
          "type": [
            "string",
            "null"
          ]
        },
        "environment": {
          "type": [
            "string",
            "null"
          ]
        },
        "hostnames": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "servedBy": {
          "type": [
            "string",
            "null"
          ]
        },
        "default": {
          "type": "boolean"
        },
        "projects": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "entrances": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "networks": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "clientCertificate": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "mode": {
              "type": "string"
            },
            "authorities": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "certificates": {
                    "type": "array",
                    "items": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "revoked": {
                    "type": [
                      "array",
                      "null"
                    ],
                    "items": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                },
                "required": [
                  "name",
                  "certificates"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "mode"
          ],
          "additionalProperties": false,
          "default": null
        },
        "callerLimit": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "permitLimit": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$"
            },
            "window": {
              "type": "string",
              "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
              "minLength": 1,
              "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
            }
          },
          "required": [
            "permitLimit",
            "window"
          ],
          "additionalProperties": false,
          "default": null
        },
        "subscriptionLimit": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "permitLimit": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$"
            },
            "window": {
              "type": "string",
              "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
              "minLength": 1,
              "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
            }
          },
          "required": [
            "permitLimit",
            "window"
          ],
          "additionalProperties": false,
          "default": null
        },
        "upstreams": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "networks": {
              "type": "array",
              "items": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "maxRequestSize": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "relayFrom": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "certificateSource": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "serverCertificates": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "name": {
                "type": "string"
              },
              "chain": {
                "type": "string"
              },
              "key": {
                "type": [
                  "string",
                  "null"
                ],
                "default": null,
                "writeOnly": true,
                "description": "The certificate's private key in PEM, required when the certificate isn't stored yet. An entry sent without it keeps the stored key of the certificate of the same name and chain. The platform never returns a stored key."
              }
            },
            "required": [
              "name",
              "chain"
            ],
            "additionalProperties": false
          },
          "default": null
        }
      },
      "required": [
        "environment",
        "entrances",
        "networks"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

api#

An API is the name and path prefix callers know, and its versions hold the definitions.

apiVersion: weik.io/v1
kind: api
metadata: { name: invoices, project: finance }
spec: { displayName: Invoice API, prefix: /invoices }

Metadata: name, project.

Field Type What it is
displayName string The name the admin UI shows.
description string What the API is for.
prefix string, required The path prefix the API is served under.
JSON schema of api
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "api",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "api"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "displayName": {
          "type": [
            "string",
            "null"
          ]
        },
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "prefix": {
          "type": "string"
        }
      },
      "required": [
        "prefix"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

api-version#

An API version is one definition of an API. A proxy version forwards calls to upstreams with YARP’s own route and cluster configuration, and a webhook version publishes each call to a channel.

apiVersion: weik.io/v1
kind: api-version
metadata: { name: v1, project: finance, api: invoices }
spec:
  type: proxy
  rateLimit: { permitLimit: 600, window: 1m }
  routes:
    - RouteId: pending
      Match: { Path: "/{**rest}" }
      ClusterId: erp
  clusters:
    - ClusterId: erp
      LoadBalancingPolicy: RoundRobin
      Destinations:
        erp: { Address: "{{erp-url}}/api/invoices" }

Metadata: name, project, api.

Field Type What it is
type string, required proxy or webhook.
routes list of any YARP’s RouteConfig, as YARP writes it.
clusters list of any YARP’s ClusterConfig, as YARP writes it.
rateLimit object Calls allowed, as permitLimit per window.
channel string The channel a webhook version publishes to.
openApi any The version’s OpenAPI document.
openApiDigest string The digest of the stored OpenAPI document.
authentication object How the gateway signs in to the upstream, with a type and its parameters.
connection object Connection settings for the upstream: useProxy, allowAutoRedirect, automaticDecompression, useCookies, connectTimeout and a client certificate.
JSON schema of api-version
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "api-version",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "api-version"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        },
        "api": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project",
        "api"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "type": {
          "type": "string"
        },
        "routes": {
          "type": "array"
        },
        "clusters": {
          "type": "array"
        },
        "rateLimit": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "permitLimit": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$"
            },
            "window": {
              "type": "string",
              "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
              "minLength": 1,
              "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
            }
          },
          "required": [
            "permitLimit",
            "window"
          ],
          "additionalProperties": false
        },
        "channel": {
          "type": [
            "string",
            "null"
          ]
        },
        "openApi": true,
        "openApiDigest": {
          "type": [
            "string",
            "null"
          ]
        },
        "authentication": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "type": {
              "type": "string"
            },
            "parameters": {
              "type": "object",
              "additionalProperties": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "additionalParameters": {
              "type": [
                "object",
                "null"
              ],
              "additionalProperties": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "default": null
            }
          },
          "additionalProperties": false,
          "default": null
        },
        "connection": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "useProxy": {
              "type": [
                "boolean",
                "null"
              ]
            },
            "allowAutoRedirect": {
              "type": [
                "boolean",
                "null"
              ]
            },
            "automaticDecompression": {
              "type": [
                "string",
                "null"
              ]
            },
            "useCookies": {
              "type": [
                "boolean",
                "null"
              ]
            },
            "connectTimeout": {
              "type": [
                "string",
                "null"
              ],
              "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
              "minLength": 1,
              "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
            },
            "clientCertificate": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "object",
                  "properties": {
                    "issuedBy": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "issuedBy"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "clientCertificatePassword": {
              "type": [
                "string",
                "null"
              ]
            },
            "trustEnvironmentCertificates": {
              "type": [
                "boolean",
                "null"
              ]
            }
          },
          "additionalProperties": false,
          "default": null
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

api-deployment#

An API deployment serves one API version in one environment on one or more gateways. It keeps the definition it serves, so a later edit of the version reaches no gateway until it’s deployed again.

Metadata: name, project, environment, api.

Field Type What it is
gateways list of strings The gateways that serve the version.
variableOverrides map Values for this deployment only.
rules map Stricter rules per gateway: networks, client certificates and limits.
via map The hub gateway each site gateway is reached through.
definition object The definition this deployment serves.
previous object The definition it served before, which weikio api rollback returns to.
JSON schema of api-deployment
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "api-deployment",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "api-deployment"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        },
        "environment": {
          "type": "string"
        },
        "api": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project",
        "environment",
        "api"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "gateways": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "variableOverrides": {
          "type": [
            "object",
            "null"
          ],
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "rules": {
          "type": [
            "object",
            "null"
          ],
          "additionalProperties": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "networks": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "default": null
              },
              "clientCertificate": {
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "mode": {
                    "type": "string"
                  },
                  "authorities": {
                    "type": [
                      "array",
                      "null"
                    ],
                    "items": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                },
                "required": [
                  "mode"
                ],
                "additionalProperties": false,
                "default": null
              },
              "callerLimit": {
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "permitLimit": {
                    "type": [
                      "string",
                      "integer"
                    ],
                    "pattern": "^-?(?:0|[1-9]\\d*)$"
                  },
                  "window": {
                    "type": "string",
                    "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
                    "minLength": 1,
                    "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
                  }
                },
                "required": [
                  "permitLimit",
                  "window"
                ],
                "additionalProperties": false,
                "default": null
              },
              "subscriptionLimit": {
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "permitLimit": {
                    "type": [
                      "string",
                      "integer"
                    ],
                    "pattern": "^-?(?:0|[1-9]\\d*)$"
                  },
                  "window": {
                    "type": "string",
                    "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
                    "minLength": 1,
                    "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
                  }
                },
                "required": [
                  "permitLimit",
                  "window"
                ],
                "additionalProperties": false,
                "default": null
              }
            },
            "additionalProperties": false
          },
          "default": null
        },
        "via": {
          "type": [
            "object",
            "null"
          ],
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          },
          "default": null
        },
        "definition": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "type": {
              "type": "string"
            },
            "routes": {
              "type": "array"
            },
            "clusters": {
              "type": "array"
            },
            "rateLimit": {
              "type": [
                "object",
                "null"
              ],
              "properties": {
                "permitLimit": {
                  "type": [
                    "string",
                    "integer"
                  ],
                  "pattern": "^-?(?:0|[1-9]\\d*)$"
                },
                "window": {
                  "type": "string",
                  "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
                  "minLength": 1,
                  "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
                }
              },
              "required": [
                "permitLimit",
                "window"
              ],
              "additionalProperties": false
            },
            "channel": {
              "type": [
                "string",
                "null"
              ]
            },
            "authentication": {
              "type": [
                "object",
                "null"
              ],
              "properties": {
                "type": {
                  "type": "string"
                },
                "parameters": {
                  "type": "object",
                  "additionalProperties": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "additionalParameters": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "additionalProperties": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "default": null
                }
              },
              "additionalProperties": false,
              "default": null
            },
            "connection": {
              "type": [
                "object",
                "null"
              ],
              "properties": {
                "useProxy": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "allowAutoRedirect": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "automaticDecompression": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "useCookies": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "connectTimeout": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
                  "minLength": 1,
                  "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
                },
                "clientCertificate": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "issuedBy": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "issuedBy"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "clientCertificatePassword": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "trustEnvironmentCertificates": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                }
              },
              "additionalProperties": false,
              "default": null
            }
          },
          "required": [
            "type"
          ],
          "additionalProperties": false,
          "default": null
        },
        "previous": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "type": {
              "type": "string"
            },
            "routes": {
              "$ref": "#/properties/spec/properties/definition/properties/routes"
            },
            "clusters": {
              "$ref": "#/properties/spec/properties/definition/properties/clusters"
            },
            "rateLimit": {
              "$ref": "#/properties/spec/properties/definition/properties/rateLimit"
            },
            "channel": {
              "type": [
                "string",
                "null"
              ]
            },
            "authentication": {
              "$ref": "#/properties/spec/properties/definition/properties/authentication",
              "default": null
            },
            "connection": {
              "$ref": "#/properties/spec/properties/definition/properties/connection",
              "default": null
            }
          },
          "required": [
            "type"
          ],
          "additionalProperties": false,
          "default": null
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

api-subscription#

A subscription gives a caller access to APIs on one gateway of one environment.

apiVersion: weik.io/v1
kind: api-subscription
metadata: { name: partner-x, project: finance, environment: production }
spec:
  apis: [invoices]
  type: apikey
  rateLimit: { permitLimit: 60, window: 1m }

Metadata: name, project, environment.

Field Type What it is
owner string Who the subscription is for.
active boolean Whether the subscription is enabled.
apis list of strings The APIs it gives access to.
type string, required apikey, queryparameter, basic, oidc, anonymous or certificate.
credential object For oidc, the token issuer and audience, and for certificate, the authority and name of the client certificate.
additionalHeaders map Headers the gateway adds to the subscription’s calls.
rateLimit object Calls allowed, as permitLimit per window.
expiresAt string When the subscription stops working.
gateway string The gateway it belongs to.
JSON schema of api-subscription
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "api-subscription",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "api-subscription"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        },
        "environment": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project",
        "environment"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "owner": {
          "type": [
            "string",
            "null"
          ]
        },
        "active": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "apis": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "type": {
          "type": "string"
        },
        "credential": {
          "type": "object",
          "properties": {
            "oidc": {
              "type": [
                "object",
                "null"
              ],
              "properties": {
                "issuer": {
                  "type": "string"
                },
                "audience": {
                  "type": "string"
                }
              },
              "required": [
                "issuer",
                "audience"
              ],
              "additionalProperties": false
            },
            "certificate": {
              "type": [
                "object",
                "null"
              ],
              "properties": {
                "authority": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "required": [
                "authority",
                "name"
              ],
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "additionalHeaders": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "rateLimit": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "permitLimit": {
              "type": [
                "string",
                "integer"
              ],
              "pattern": "^-?(?:0|[1-9]\\d*)$"
            },
            "window": {
              "type": "string",
              "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
              "minLength": 1,
              "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
            }
          },
          "required": [
            "permitLimit",
            "window"
          ],
          "additionalProperties": false
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "gateway": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}

entity-store-policy#

An entity type’s policy in one environment: how much the type may store and how long and how many values of an entity it keeps.

apiVersion: weik.io/v1
kind: entity-store-policy
metadata: { name: invoice, project: finance, environment: production }
spec:
  maxBytes: 536870912
  history: 2

Metadata: name, project, environment.

Field Type What it is
maxBytes integer The most the type may store, in bytes.
maxAge duration How long an entity is kept, such as 30d.
history integer How many values of an entity are kept, the current one included.
maxValueBytes integer The largest single entity, in bytes.
JSON schema of entity-store-policy
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "entity-store-policy",
  "type": "object",
  "properties": {
    "apiVersion": {
      "const": "weik.io/v1"
    },
    "kind": {
      "const": "entity-store-policy"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "project": {
          "type": "string"
        },
        "environment": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "project",
        "environment"
      ],
      "additionalProperties": false
    },
    "spec": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "maxBytes": {
          "type": [
            "string",
            "integer"
          ],
          "pattern": "^-?(?:0|[1-9]\\d*)$"
        },
        "maxAge": {
          "type": [
            "string",
            "null"
          ],
          "pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
          "minLength": 1,
          "description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
        },
        "history": {
          "type": [
            "string",
            "integer"
          ],
          "pattern": "^-?(?:0|[1-9]\\d*)$"
        },
        "maxValueBytes": {
          "type": [
            "string",
            "integer"
          ],
          "pattern": "^-?(?:0|[1-9]\\d*)$"
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "additionalProperties": false
}