Integrations, versions and the developer loop
Weik.io 2026.2Scaffold, check, publish and compare integration versions, run them on your machine and send a message into a running route.
On this page
- Commands on this page
- weikio init
- weikio validate
- weikio apply
- weikio diff
- weikio run
- weikio dev run
- weikio get integrations
- weikio describe integration
- weikio get versions
- weikio describe version
- weikio version create
- weikio version compare
- weikio status
- weikio logs
- weikio invoke
- weikio delete integration
- weikio rename integration
- weikio export
- weikio get camel-lines
- weikio get kamelets
- weikio kamelets pull
- weikio describe kamelet
- weikio delete kamelet
- In a pipeline
- Exit codes
- See also
An integration is a folder of Apache Camel files written as you would write them for Camel JBang: routes in YAML, XML or Java, kamelets, application.properties, jars and any other file a route uses. weikio apply publishes the folder as a new version, weikio deploy runs a version in an environment and weikio run does both and then follows the logs.
A published version never changes. Without a version: line in integration.yaml, the first version is 0.1.0 and each apply with changed files publishes the next patch version. With a version: line, --bump raises it and rewrites the file. The CLI uploads only the files the hub doesn’t have yet and resumes an interrupted upload.
Commands on this page#
| Command | What it does |
|---|---|
weikio init |
Scaffold an integration directory or a generated document. |
weikio validate |
Run the checks an apply runs, without sending anything. |
weikio apply |
Publish documents and integration directories. |
weikio diff |
Show what an apply would do. Exits 2 when anything would change and 7 when anything would be refused. |
weikio run |
Publish a directory, deploy it and follow its logs. |
weikio dev run |
Run a directory here against an environment’s resolved configuration. |
weikio get integrations |
List the integrations of a project. |
weikio describe integration |
Read one integration with its versions and deployments. |
weikio get versions |
List an integration’s published versions, newest first. |
weikio describe version |
Read one published version with its digests and dependencies. |
weikio version create |
Build a new version of an integration on another Camel line. |
weikio version compare |
Show the file differences between two versions of an integration, as a unified diff. |
weikio status |
Show where an integration runs and in what state. |
weikio logs |
Print the logs of an integration in one environment. |
weikio invoke |
Send a message into a running route. |
weikio delete integration |
Delete an integration that isn’t deployed, with its versions and its own variables and secrets. |
weikio rename integration |
Rename an integration of any type. |
weikio export |
Export the documents you can read as YAML for weikio apply. |
weikio get camel- |
List the Camel lines an integration may be built on. |
weikio get kamelets |
List the kamelets a project may use. |
weikio kamelets pull |
Write the project’s and the platform’s kamelets to a directory, for running with plain Camel. |
weikio describe kamelet |
Print one kamelet. |
weikio delete kamelet |
Delete a kamelet no version references. |
The flags every command accepts, such as --env, --project, -o and --context, are on the CLI reference page and are left out of the tables below.
weikio init#
Scaffold an integration directory or a generated document. --kind writes one of the generated kinds instead of a Camel folder: a file transfer (mft), a schedule, an event source, channel or subscription, change tracking or an API. Names use lower-case letters, digits and hyphens.
weikio init <name> [--kind integration|mft|schedule|event-source|event-channel|event-subscription|change-tracking|api] [--camel-version V] [--no-manifest] [--project P]| Argument or flag | What it does |
|---|---|
<name> |
The integration name. |
-- |
The kind: integration, mft, schedule, event-source, event-channel, event-subscription, change-tracking or api. |
-- |
The Camel line to build on. |
-- |
Scaffold without an integration.yaml. |
Who can run it: nothing on the server, because the command runs on your machine.
API: GET /api/v1/camel-lines.
$ weikio init HelloWorlderror: 'HelloWorld' isn't a valid name. A name can use only lower-case letters, digits and hyphens, such as 'hello-world'.$ weikio init helloCreated hello/
hello.camel.yaml timer -> log, runs every 5 s
application.properties message=hello from weikio
integration.yaml name hello, other fields as commented examples
Next, to run it in project sandbox and environment devtest:
weikio run ./helloweikio validate#
Run the checks an apply runs, without sending anything. It runs offline, so a pipeline can fail early without a key. It checks each document against its kind’s schema and the naming rules, and with a context it also checks what only the server knows. Camel’s own check of a route’s steps runs when apply builds the version.
weikio validate -f <path>...| Argument or flag | What it does |
|---|---|
- |
A file, a directory or - for standard input, repeated as needed. |
-- |
Fetch the schemas from the server instead of the built-in ones. |
Who can run it: nothing for the offline checks, and an API key for the checks against the hub.
API: GET /api/v1/schemas, GET /api/v1/camel-lines, GET /api/v1/projects/{project}/kamelets.
weikio apply#
Publish documents and integration directories. apply publishes: integration folders become versions and every other document is created or updated. A deployment runs a new version only when it follows latest or when a deployment document of the set sets that version. Each document gets one row, created, updated, unchanged, deleted or refused, and a set with refused rows exits 7, or 1 when every row is refused. --prune <name> deletes what earlier applies of the same paths under that name created and the files no longer contain, which is how a deleted file removes a record in GitOps.
weikio apply -f <path>... [--project P] [--env E] [--bump patch|minor|major] [--version X] [--prune <name>] [--dry-run] [-y]| Argument or flag | What it does |
|---|---|
- |
A file, a directory or - for standard input, repeated as needed. |
-- |
Raise the version of every directory: patch, minor or major. |
-- |
The version to publish, by default the next patch. |
-- |
Delete what earlier applies with this name created and these paths no longer contain. Use one name per repository. |
-- |
Print what would happen and change nothing. |
- |
Don’t ask for confirmation. |
-- |
Reason for the change, stored with the audit record. |
-- |
The repository, branch and commit the write came from, as repo@ref#commit. |
-- |
Send no origin, even in a pipeline. |
Who can run it: the grant each document needs: author for the project’s documents, deploy for a deployment and operate for a secret.
API: POST /api/v1/projects/{project}/integrations/{name}/source/missing, PUT /api/v1/projects/{project}/integrations/{name}/source?dryRun=&version=, PUT /api/v1/configuration?environment=&dryRun=&builds=, POST /api/v1/configuration/prune?environment=&dryRun=.
$ weikio apply -f ./finance/erp-invoice-exportTarget: https://hub.example, project finance (from finance/project.yaml), environment devtest (context)
integration finance/erp-invoice-export refused: Version '1.0.0' is already published.
Set another with --version <version>, or bump it with --bump patch.$ weikio apply -f ./finance/erp-invoice-export --bump minorTarget: https://hub.example, project finance (from finance/project.yaml), environment devtest (context)
Uploading 2/9 files, building...
integration finance/erp-invoice-export updated (version 1.1.0, built in 17.3 s)
integration.yaml updated to 1.1.0
Nothing new is running yet. To run it:
weikio deploy -f ./finance/erp-invoice-export --env devtestweikio diff#
Show what an apply would do. Exits 2 when anything would change and 7 when anything would be refused. diff runs the same checks as apply on the server and prints what would change, field by field for small documents. It exits 0 when nothing would change, 2 when something would and 7 when a document would be refused, so a nightly pipeline that runs it against production finds changes made by hand.
weikio diff -f <path>... [--project P] [--env E] [--prune <name>]| Argument or flag | What it does |
|---|---|
- |
A file, a directory or - for standard input, repeated as needed. |
-- |
Show what an apply of these paths with -- and this name would delete. |
Who can run it: a grant on the project whose role has author.
API: PUT /api/v1/configuration?dryRun=true&builds=, GET /api/v1/configuration/export?project=&environment=, PUT /api/v1/projects/{project}/integrations/{name}/source?dryRun=true&version=, POST /api/v1/configuration/prune?environment=&dryRun=true.
weikio run#
Publish a directory, deploy it and follow its logs. run is the development shortcut: it applies the folder, deploys every integration it published as latest to the environment and follows their logs. Ctrl-C stops following and the integration keeps running. When the folder declares a version and its files changed, run bumps the patch version for you.
weikio run <dir> [--env E] [--project P] [--bump ...] [--no-logs]| Argument or flag | What it does |
|---|---|
<directory> |
The integration directory. |
-- |
Raise the version of every directory: patch, minor or major. |
-- |
Return once it is running instead of following the logs. |
-- |
Run it on this machine instead of on the platform. |
-- |
Restart it when a file changes. |
-- |
Resolve secret values into the run. |
-- |
Reason for the change, stored with the audit record. |
-- |
The repository, branch and commit the write came from, as repo@ref#commit. |
-- |
Send no origin, even in a pipeline. |
Who can run it: a grant on the project with author, and deploy and read in the environment.
API: PATCH /api/v1/environments/{environment}/projects/{project}/deployments/{name}, GET /api/v1/projects/{project}/integrations/{name}/status, GET /api/v1/logs/tail.
$ weikio run ./helloTarget: https://hub.example, project sandbox (context), environment devtest (context)
integration sandbox/hello created (version 0.1.0, built in 16.2 s)
deployment devtest/sandbox/hello created (follows latest)
Following the log lines of sandbox/hello. Ctrl-C stops following, and the integration keeps running.
09:14:07.113 UTC INFO hello agent-fi-01 Exchange[ExchangePattern: InOnly, BodyType: String, Body: hello from weikio]
09:14:12.114 UTC INFO hello agent-fi-01 Exchange[ExchangePattern: InOnly, BodyType: String, Body: hello from weikio]
^C$ weikio run ./hello # after editing the routeTarget: https://hub.example, project sandbox (context), environment devtest (context)
integration sandbox/hello updated (version 0.1.1, built in 15.9 s)
deployment devtest/sandbox/hello updated (follows latest)weikio dev run#
Run a directory here against an environment’s resolved configuration. The route runs on your machine with Camel JBang (camel run). The CLI hands it the environment’s resolved configuration, so {{erp-url}} resolves as it does on the platform. Secrets stay out of the run unless you add --with-secrets, which needs reveal in the environment.
weikio dev run <dir> [--env E] [--project P] [--reload] [--with-secrets]| Argument or flag | What it does |
|---|---|
<directory> |
The integration directory. |
-- |
Restart it when a file changes. |
-- |
Resolve secret values into the run. |
Who can run it: a grant with read in the environment, and reveal with --with-secrets.
API: GET /api/v1/camel-lines, GET /api/v1/environments/{environment}/projects/{project}/deployments/{name}/configuration?name=..., GET /api/v1/projects/{project}/kamelets/_local, GET /api/v1/camel-lines/{line}/cluster-jar, GET /api/v1/environments/{environment}/projects/{project}/secrets/{name}/reveal, GET /api/v1/projects/{project}/secrets/{name}/reveal, GET /api/v1/environments/{environment}/projects/{project}/integrations/{i}/secrets/{name}/reveal, GET /api/v1/projects/{project}/integrations/{i}/secrets/{name}/reveal.
weikio get integrations#
List the integrations of a project.
weikio get integrations [--project P] [--kind K] [-l k=v]| Argument or flag | What it does |
|---|---|
-- |
The kind: integration, mft, schedule, event-source, event-channel, event-subscription, change-tracking or api. |
- |
Show only rows with every k=v label given. |
Who can run it: a grant on the project whose role has read.
API: GET /api/v1/projects/{project}/integrations?type=.
weikio describe integration#
Read one integration with its versions and deployments.
weikio describe integration <p>/<n> [--readme | --source-file <path> [--version X]]| Argument or flag | What it does |
|---|---|
<integration> |
Integration as project/name. |
-- |
Print its README instead. |
-- |
Print one file of its source instead. |
-- |
Which version’s file to print. |
Who can run it: a grant on the project whose role has read.
API: GET /api/v1/projects/{project}/integrations/{name}.
weikio get versions#
List an integration’s published versions, newest first. latest marks the newest version, and the last column lists the environments each version runs in.
weikio get versions <p>/<n>| Argument or flag | What it does |
|---|---|
<integration> |
Integration as project/name. |
Who can run it: a grant on the project whose role has read.
API: GET /api/v1/projects/{project}/integrations/{name}/versions, GET /api/v1/users/_emails?ids=.
Also written as weikio versions.
$ weikio get versions finance/erp-invoice-exportVERSION CAMEL CREATED BY NOTE DEPLOYED IN
1.1.0 (latest) 4.22.1 2026-09-16 14:31 UTC anna@example.com invoice mapper v2 -
1.0.0 4.22.1 2026-09-15 09:12 UTC anna@example.com - devtest, productionweikio describe version#
Read one published version with its digests and dependencies.
weikio describe version <p>/<n> <version>| Argument or flag | What it does |
|---|---|
<integration> |
Integration as project/name. |
<version> |
The version. |
Who can run it: a grant on the project whose role has read.
API: GET /api/v1/projects/{project}/integrations/{name}/versions/{version}, GET /api/v1/users/_emails?ids=.
weikio version create#
Build a new version of an integration on another Camel line. A Camel upgrade is a new version: this builds the integration’s current files again on another Camel line, and both versions can run side by side in different environments.
weikio version create <p>/<n> --camel-version V [--version X] [--note S]| Argument or flag | What it does |
|---|---|
<integration> |
Integration as project/name. |
-- |
The Camel line to build on. |
-- |
The version to publish, by default the next patch. |
-- |
A note stored with the version. |
-- |
Reason for the change, stored with the audit record. |
-- |
The repository, branch and commit the write came from, as repo@ref#commit. |
-- |
Send no origin, even in a pipeline. |
Who can run it: a grant on the project whose role has author.
API: POST /api/v1/projects/{project}/integrations/{name}/versions.
Also written as weikio create version.
weikio version compare#
Show the file differences between two versions of an integration, as a unified diff. Each changed file prints as a unified diff, as diff -u writes it. The command exits 0 when the two versions have the same files and 2 when they differ.
weikio version compare <p>/<n> <from-version> <to-version>| Argument or flag | What it does |
|---|---|
<integration> |
Integration as project/name. |
<from> |
The version compared from. |
<to> |
The version compared to. |
Who can run it: a grant on the project whose role has read.
API: GET /api/v1/projects/{project}/integrations/{name}/versions/{version}, GET /api/v1/projects/{project}/integrations/{name}/source/files/{path}?version=.
weikio status#
Show where an integration runs and in what state. When a deployment is pending, the DETAIL column says why, such as no agent that may run the project or all matching agents draining.
weikio status <p>/<n> [--env E] [--watch]| Argument or flag | What it does |
|---|---|
<integration> |
Integration as project/name. |
-- |
Keep refreshing until interrupted. |
Who can run it: a grant whose role has read in the environment.
API: GET /api/v1/projects/{project}/integrations/{name}/status, GET /api/v1/metrics/summary, GET /api/v1/traces/_related.
$ weikio status finance/erp-invoice-exportENVIRONMENT VERSION STATE AGENT SINCE DETAIL
devtest 1.0.0 running agent-fi-01 2026-09-15 09:14 UTC -
production 1.0.0 running agent-fi-02 2026-09-15 16:02 UTC -weikio logs#
Print the logs of an integration in one environment. -f follows new lines until Ctrl-C. --top-errors groups the window’s errors by exception and route, --histogram counts lines per interval and level, and --build prints a version’s build output.
weikio logs <p>/<n> [--env E] [-f|--follow] [--since 10m] [--from T --to T] [--level L] [--agent ID] [--correlation-id ID] [--query Q] [--limit N] [--before ID | --after ID] [--histogram [--interval 1h]] [--top-errors] [--build --version X]| Argument or flag | What it does |
|---|---|
<integration> |
Integration as project/name. |
- |
Print new lines as they arrive, until Ctrl-C. |
-- |
How far back to read, such as 10m. |
-- |
Show only lines at this level or above: trace, debug, info, warn, error or fatal. |
-- |
Full-text query over the lines, in the log store’s query language. |
-- |
Number of lines to read, at most 5,000. |
-- |
Read lines older than the one with this _id. |
-- |
Read lines newer than the one with this _id. |
-- |
Start of the window, as a time or as how long ago. |
-- |
End of the window, as a time or as how long ago. |
-- |
Show only the lines written by the agent with this ID. |
-- |
Show only lines with this correlation id. |
-- |
Print line counts per interval and level instead of lines. |
-- |
Width of one histogram interval, such as 5m or 1h. |
-- |
Print the most common errors of the window, one row per exception and route, instead of lines. |
-- |
Print a version’s build output instead of the log lines. |
-- |
Which version’s build output to print. |
Who can run it: any API key. The lines are narrowed to what your read grants open.
API: GET /api/v1/logs?whole=true&order=oldest, GET /api/v1/logs/tail?whole=true, GET /api/v1/logs/histogram, GET /api/v1/projects/{project}/integrations/{name}, GET /api/v1/projects/{project}/integrations/{name}/versions/{version}/build.
weikio invoke#
Send a message into a running route. The message goes into the running route through the agent, the way camel cmd send does it, so no port is opened. Any endpoint whose component accepts a message works, such as direct:, seda: and kamelet:. A timer, a scheduler or an HTTP listener doesn’t accept one, and the command says which endpoint to call instead. The reply shows the trace id, and weikio trace opens the message’s trace.
weikio invoke <p>/<n> [--env E] [--endpoint <uri>] [--body @file|S] [--header k=v ...] [--timeout 30s] [--agent NAME|ID] [-y]| Argument or flag | What it does |
|---|---|
<integration> |
Integration as project/name. |
-- |
The endpoint URI to send to, by default the running version’s only endpoint that accepts a message. |
-- |
The body, or @file to read it from a file. |
- |
A header as “Name: value” or k=v (repeatable). |
-- |
How long to wait for the reply, such as 1m, by default 30s. |
-- |
The agent to send through when several run it, by name or ID. |
-- |
Reason for the change, stored with the audit record. |
- |
Don’t ask for confirmation. |
Who can run it: a grant whose role has operate in the environment.
API: POST /api/v1/environments/{environment}/projects/{project}/deployments/{name}/invoke?agent=.
$ weikio invoke finance/erp-invoice-export --env devtest --endpoint direct:run-exportTarget: https://hub.example, project finance (argument), environment devtest (--env)
200 replied in 1.9 s
traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-03
{"exported":14}
To see this message's trace, run:
weikio trace 4bf92f3577b34da6a3ce929d0e0e4736$ weikio invoke finance/nightly-payroll --env devtestTarget: https://hub.example, project finance (argument), environment devtest (--env)
error: No endpoint of version '1.0.0' of 'finance/nightly-payroll' accepts a message.
'quartz:payroll/nightly' doesn't accept a message.
Add a direct: route that this route calls:
- from: uri: quartz:payroll/nightly steps: [{ to: "direct:run-nightly-payroll" }]
- from: uri: direct:run-nightly-payroll steps: [ ... ]
Then invoke that route with:
weikio invoke finance/nightly-payroll --env devtest --endpoint direct:run-nightly-payroll$ weikio invoke finance/goods-in --env devtestTarget: https://hub.example, project finance (argument), environment devtest (--env)
error: No endpoint of version '1.0.0' of 'finance/goods-in' accepts a message.
'platform-http:/goods-in' is an HTTP endpoint, which invoke can't send to. Call it on its agent's host (port 8080 by default), or through an API routed to it.$ weikio invoke finance/orders --env devtestTarget: https://hub.example, project finance (argument), environment devtest (--env)
error: Version '1.2.0' of 'finance/orders' has 3 endpoints that accept a message. Choose one with --endpoint:
direct:new-order route new-order routes/orders.camel.yaml
seda:retry route retry routes/orders.camel.yaml
kamelet:timer-source?message=go route nightly routes/nightly.camel.yaml
Not listed: 'platform-http:/orders' is an HTTP endpoint, which invoke can't send to. Call it on its agent's host (port 8080 by default), or through an API routed to it.weikio delete integration#
Delete an integration that isn’t deployed, with its versions and its own variables and secrets.
weikio delete integration <p>/<n> [-y]| Argument or flag | What it does |
|---|---|
<integration> |
Integration as project/name. |
- |
Don’t ask for confirmation. |
-- |
Reason for the change, stored with the audit record. |
Who can run it: a grant on the project whose role has author.
API: DELETE /api/v1/projects/{project}/integrations/{name}?dryRun=true, DELETE /api/v1/projects/{project}/integrations/{name}.
weikio rename integration#
Rename an integration of any type.
weikio rename integration <p>/<n> <new-name>| Argument or flag | What it does |
|---|---|
<name> |
The integration, as project/name. |
<new- |
New name in the same project. |
-- |
Reason for the change, stored with the audit record. |
Who can run it: a grant on the project whose role has author.
API: PATCH /api/v1/projects/{project}/integrations/{name}.
weikio export#
Export the documents you can read as YAML for weikio apply. The output applies again unchanged with weikio apply, which makes it the way to put an installation’s configuration into Git. Secrets are exported without their values.
weikio export [--project P] [--env E] [--out-dir DIR]| Argument or flag | What it does |
|---|---|
- |
Directory to write the files into. |
Who can run it: a grant on the project whose role has read.
API: GET /api/v1/configuration/export?project=&environment=.
weikio get camel-lines#
List the Camel lines an integration may be built on.
weikio get camel-linesWho can run it: any valid API key.
API: GET /api/v1/camel-lines.
weikio get kamelets#
List the kamelets a project may use.
weikio get kamelets [--project P]Who can run it: a grant on the project whose role has read.
API: GET /api/v1/projects/{project}/kamelets/_usage.
weikio kamelets pull#
Write the project’s and the platform’s kamelets to a directory, for running with plain Camel. Use it to run an integration with plain camel run and the same kamelets the platform gives it.
weikio kamelets pull <dir> [--project P]| Argument or flag | What it does |
|---|---|
<directory> |
The directory to write them to, outside any integration directory. |
Who can run it: a grant on the project whose role has read.
API: GET /api/v1/projects/{project}/kamelets/_local.
weikio describe kamelet#
Print one kamelet.
weikio describe kamelet <p>/<n>| Argument or flag | What it does |
|---|---|
<kamelet> |
The kamelet, as project/name. |
Who can run it: a grant on the project whose role has read.
API: GET /api/v1/projects/{project}/kamelets/{name}, GET /api/v1/projects/{project}/kamelets/_usage.
weikio delete kamelet#
Delete a kamelet no version references.
weikio delete kamelet <p>/<n> [-y]| Argument or flag | What it does |
|---|---|
<kamelet> |
The kamelet, as project/name. |
- |
Don’t ask for confirmation. |
-- |
Reason for the change, stored with the audit record. |
Who can run it: a grant on the project whose role has author.
API: DELETE /api/v1/projects/{project}/kamelets/{name}.
In a pipeline#
Weik.io never reads your Git repository. A pipeline runs the weikio CLI with a key of its own and pushes each change to the hub, so the hub needs no Git credentials and no network path to your Git host. A repository with a shared folder and one folder per environment uses these jobs:
| Job | Runs on | Command |
|---|---|---|
| Plan | A pull request | weikio diff - with the devtest key, and the output is the pull request comment. |
| Devtest | A merge to main |
weikio apply - |
| Production | A merge to main, as a job in the GitHub environment production |
weikio diff -, then weikio apply - once the required reviewers approve. |
| Drift | Every night | weikio diff of each environment’s folders with that environment’s key, where exit code 2 lists what someone changed by hand. |
The job sets WEIKIO_SERVER, WEIKIO_API_KEY and WEIKIO_REASON, and the CLI records the repository, branch and commit on every document it writes. A secret’s value comes from the job and never from Git, so a step before the apply sets it with printf '%s' "$ERP_API_KEY" | weikio secret set finance/erp-api-key --env production -y.
Exit codes#
The commands on this page exit with the codes in the exit code table: 0 on success, 1 when the hub refuses a change, 2 for a usage error, 3 when the key is missing or not allowed, 4 when something isn’t found, 5 for a conflicting change, 6 when the hub can’t be reached and 8 when a document isn’t valid. weikio diff exits 0 when nothing would change, 2 when something would and 7 when a document or folder would be refused. weikio version compare exits 0 when two versions have the same files and 2 when they differ. weikio apply exits 7 when part of the set was applied and part refused, and weikio validate exits 8 when a check fails.