Skip to content
Weik.ioDocs
2026.2
Try Weik.io

Channels

Weik.io 2026.2

A 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.

On this page

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#

finance/events/invoice-created.yaml
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
Terminal
$ 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:

erp-invoice-export/routes/publish.camel.yaml
- 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:

invoice-archiver/routes/archive.camel.yaml
- 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.

Terminal
$ weikio get readers finance/invoice-created --env production

The 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: 0

A 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#

Terminal
$ weikio events list finance/invoice-created --env production --since 1h
You see
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    -

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.

/events
The Events page of production with invoice-created events from erp-invoice-export, each with its invoice number, supplier and amount, and the events budget of productionThe Events page of production with invoice-created events from erp-invoice-export, each with its invoice number, supplier and amount, and the events budget of productionThe Events page of production with invoice-created events from erp-invoice-export, each with its invoice number, supplier and amount, and the events budget of productionThe Events page of production with invoice-created events from erp-invoice-export, each with its invoice number, supplier and amount, and the events budget of production
Events lists the newest events of each channel with their attributes, beside the events budget of the environment.

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