Channels
Weik.io 2026.2A channel is a named topic of a project, and integrations publish into it and read from it with two kamelets, each in one line of YAML. Product page · Video
Watch: The channel: one integration publishes, another reacts, 3:41
The video has one integration publish to a channel and another react to it, each with one line of YAML.
A channel is a named topic owned by a project, such as invoice-created. An integration publishes into it with the weikio-event-sink kamelet and reads from it with weikio-event-source, so the route says only the channel’s name and never deals with the message server underneath.
Declare the channel#
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$ weikio apply -f ./finance/events/A channel without a type is the topic alone. It builds nothing and runs nowhere: it is a topic in each environment’s event stream, and applying it is all it needs. The same channel exists in devtest and production, and a reader in devtest hears only devtest’s events, because every environment has its own stream.
weikio channel create finance/invoice-created --description "One event per invoice created in the ERP" creates the same channel without a file. A route that publishes into or reads a channel its project hasn’t declared doesn’t start, and its error gives the weikio channel create command.
Publish into it#
The last step of the export route publishes each invoice:
- route:
from:
uri: direct:publish
steps:
- to: "kamelet:weikio-event-sink?channel=invoice-created"The step waits until the hub confirms it stored the event. When the hub can’t store it, the route’s exchange fails, so the route’s own error handling decides what happens next.
Read from it#
Another integration starts its route from the channel:
- route:
from:
uri: "kamelet:weikio-event-source?channel=invoice-created"
steps:
- to: "{{archive-url}}/invoices"The platform creates a durable reader for the integration at the hub when you deploy it. The integration gets every event published from its first deploy on, also those published while it was stopped, and confirms each one when its route has finished it. Delivery and CloudEvents explains what happens when the route fails.
Several readers#
Any number of integrations read the same channel, each at its own pace and each with its own reader. An archiver, a notifier and a reporting integration can all start from invoice-created, and the integration that publishes knows nothing about them. Adding a fourth reader later changes nothing for the others. The copies of one integration share its reader, so two agents running the archiver handle each event once between them.
$ weikio get readers finance/invoice-created --env productionThe list has each integration that reads the channel, whether its read is durable, how many events wait and the oldest one’s age, the events in flight, the retries, its dead letters and whether it is asking for events.
Retention#
Each environment’s stream keeps events for 30 days within its size budget, so you can list them, read one and send it again. A channel that only forwards can be pass-through, with retention: 0:
spec:
description: Live price ticks, nobody needs them later
retention: 0A pass-through channel’s events are never stored at the hub. Its readers get what is published while they run, and the events can’t be listed or sent again. A reader of a stored channel gets what was published while it wasn’t running once it runs again, and a reader of a pass-through channel doesn’t.
Browse the events#
$ weikio events list finance/invoice-created --env production --since 1hSEQ 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 -weikio events show finance/invoice-created --env production --seq 48213 prints one event with its headers and its body. The Events page of the admin UI shows the same for the environment and the time you pick, and a channel picked there lists its readers.




An event can be at most 1 MiB, its body and headers together.