Writing an Event Source


This tutorial will walk you though writing a new event source for Knative Eventing using a sample repository and explaining the key concepts used throughout each component.

After completing the tutorial, you’ll have a basic event source controller as well as receive adapter, which events can be viewed through a basic event_display Knative Service.

Just want to see the code? The reference project is https://github.com/knative-sandbox/sample-source.

Knative Sources can be used as a reference.

Other ways

With the approach in this tutorial, you will create a CRD and a controller for the event source which makes it reusable.

You can also write your own event source using a ContainerSource which is an easy way to turn any dispatcher container into an Event Source. Similarly, another option is using SinkBinding which provides a framework for injecting environment variables into any Kubernetes resource which has a spec.template that looks like a Pod (aka PodSpecable).

Target Audience

The target audience is already familiar with Kubernetes and Go development and wants to develop a new event source, importing their custom events via Knative Eventing into the Knative system.

Before You Begin

You’ll need these tools installed:

You’re encouraged to clone the sample source and make changes there.


  1. Separation of Concerns
  2. API Definition
  3. Controller
  4. Reconciler
  5. Receive Adapter
  6. Example YAML
  7. Moving the event source to the knative-sandbox organization