Events
An integration publishes an event to a channel with one line of YAML, and another integration reacts to it with one line. Weik.io stores each event for 30 days, and a reader that was stopped receives what it missed when it starts again. Event sources bring events in from queues, buckets, webhooks and folders, and a channel with a type delivers them to Slack, S3, SFTP, Kafka, JMS or HTTP. Change tracking publishes database changes from PostgreSQL, MySQL, SQL Server, Oracle, MongoDB and DB2.
$ weikio events list finance/invoice-created --env production --since 1h
SEQ STREAM TIME FAMILY SOURCE AGENT BYTES RESEND OF
48211 events 2026-09-16 13:02:11 UTC ev finance/erp-invoice-export agent-fi-02 1204 -
48212 events 2026-09-16 13:03:11 UTC ev finance/erp-invoice-export agent-fi-02 1187 -
48213 events 2026-09-16 13:04:40 UTC ev finance/invoice-files agent-fi-02 2310 -Publish and react
finance/erp-invoice-export publishes each invoice the ERP has accepted to the channel invoice-created in its last step, and finance/invoice-notify starts from that channel. The two integrations refer only to the channel and never to each other, and more readers can join it later without a change to the publisher.
apiVersion: weik.io/v1
kind: event-channel
metadata: { name: invoice-created, project: finance }
spec:
description: One event per invoice created in the ERP, JSON body- route:
id: export-invoices
from:
uri: "file:{{invoice-folder}}"
parameters:
antInclude: "*.json"
move: .done
steps:
- to:
uri: "{{erp-url}}/api/invoices"
parameters:
httpMethod: POST
- to: micrometer:counter:invoices.processed
- to: "kamelet:weikio-event-sink?channel=invoice-created"- route:
id: invoice-notify
from:
uri: "kamelet:weikio-event-source?channel=invoice-created"
steps:
- log: "Invoice event received: ${body}"
- to: "{{notify-url}}/api/messages"$ weikio deadletters list --env production
SEQ TIME READER FROM DELIVERIES REASON
812 2026-09-16 13:05:02 UTC finance/invoice-notify channel finance/invoice-created 3 HttpHostConnectException: Connect to https://notify.example.internal failed: Connection refused



Sources, channels and subscriptions
An event source brings events in from a queue, a bucket, a webhook or a folder, and a subscription binds the source to a channel. A channel with a type delivers its events on to a system such as Slack, S3 or Kafka, and your own integrations read and publish in between.
An event source brings events in from an external system with a Camel source kamelet, such as a queue, a bucket, a webhook or a folder. A subscription binds the source to a channel and can filter or transform the events on the way. The channel invoice-created stores every event for 30 days for its readers, the integrations invoice-notify and invoice-archive. A channel with a type also delivers its events to Slack, S3, SFTP, Kafka, JMS or any HTTP endpoint.
How events are delivered
Delivery and retries
Publishing waits until the hub has stored the event. Each reader receives everything published from its first deploy on, also while it's stopped, and it acknowledges an event when its route has finished it. A failed event comes back after the delays the reader sets.
Docs: Delivery and CloudEventsIdempotent consumer
An event keeps its id when it's delivered again or resent. Camel's idempotent consumer with #weikioIdempotent handles each event once across every copy of the integration.
Dead letters and resend
An event that a reader still fails after its last attempt goes to the dead letters, where you resend or discard it. You can also skip a reader to now, rewind it, or resend any stored event to every reader or to one.
Docs: Dead lettersEvent headers
An event keeps the body your route published, unchanged. Beside it the platform stores the event's ID, the integration that published it, the agent that sent it and the trace context, so a reader's trace continues the publisher's trace.
Docs: Delivery and CloudEventsChange tracking
Changes in PostgreSQL, MySQL, SQL Server, Oracle, MongoDB, DB2 and every other database with a Debezium connector arrive in a channel as events. The offsets stay in a table in the source database.
Docs: Change trackingThe entity store
Integrations keep a record of what they have processed in the entity store. Every change to a record is published as an event, and earlier revisions of each record can be read back.
Docs: The entity store



Machines and devices. Machines publish their readings to an MQTT broker in Weik.io Cloud, and an event source brings the messages into your channels. MQTT brokers in Weik.io Cloud
Events track
Six videos cover channels, sources, subscriptions, delivery and dead letters, and three pattern videos show them in use.
Eventing 1 · 3:41 The channel: one integration publishes, another reacts Watched
Eventing 2 · 3:17 An event source brings events in Watched
Eventing 3 · 3:16 A subscription binds source to channel Watched
Eventing 4 · 2:59 Delivery: give a channel a type Watched
Eventing 5 · 3:09 On the way: filter and steps Watched
Eventing 6 · 3:20 Dead letters Watched
Patterns 1 · 3:37 Polling and change detection Watched
Patterns 2 · 3:04 Sending data to several destinations Watched
Patterns 4 · 3:49 React to database changes WatchedQuestions
Does a reader miss events while it's stopped?
A reader receives everything published from its first deploy on, including the events that arrived while it was stopped.
How long are events kept?
Events are kept for 30 days per environment within a size budget, and a channel can also pass its events through without storing them.
What happens to an event a reader keeps failing?
After the last attempt the event goes to the dead letters, where you resend it to that reader or discard it.
Which databases does change tracking support?
Change tracking works with every database that has a Debezium connector, PostgreSQL, MySQL, SQL Server, Oracle, MongoDB and DB2 among them.
Is Weik.io open source?
Weik.io is open source under the Apache License 2.0 and runs on your own servers, in your cloud or in Weik.io Cloud.
Read the event docs
The channel guide declares invoice-created, publishes into it from one integration and receives its events in another.