Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Channels

Channels enable multi-tenant pipeline customization. A single pipeline definition can be run with different configurations per client, environment, or business unit – without duplicating or modifying the base YAML.

Channel structure

Each channel lives in its own directory under a channels/ folder, with a channel.yaml manifest:

project/
  pipeline.yaml
  channels/
    acme-corp/
      channel.yaml
    globex/
      channel.yaml

Channel manifest

# channels/acme-corp/channel.yaml
_channel:
  id: acme-corp
  name: "Acme Corporation"
  description: "Custom config for Acme Corp"
  contact: "ops@acme.example.com"
  active: true
  tags: [enterprise, priority]
  tier: gold

variables:
  EXPRESS_SURCHARGE: "8.99"
  TAX_RATE: "0.095"
  OUTPUT_DIR: "/data/acme/output"

Channel metadata fields

FieldRequiredDescription
idYesUnique channel identifier (used in CLI and logs)
nameYesHuman-readable display name
descriptionNoChannel purpose and notes
contactNoResponsible team or person
activeNoWhether the channel is enabled (default: true)
tagsNoArbitrary tags for filtering and grouping
tierNoService tier classification

Running with a channel

Use the --channel flag to run a pipeline with a specific channel’s configuration:

clinker run pipeline.yaml --channel acme-corp

Clinker looks for the channel manifest in the workspace’s channels/ directory, loads the variable overrides, and applies them before pipeline execution begins.

Variable overrides

The variables: section in a channel manifest provides values that override pipeline-level vars: defaults. This lets each tenant customize thresholds, paths, labels, and other parameters:

# Pipeline defaults
pipeline:
  name: invoice_processing
  vars:
    late_fee: 25.00
    output_path: "./output/"

# Channel override
variables:
  LATE_FEE: "50.00"
  OUTPUT_PATH: "/data/acme/invoices/"

Channel variables support ${ENV_VAR} syntax for referencing system environment variables – these are resolved at channel load time.

Workspace discovery

Channels are part of the broader workspace system. Clinker discovers workspaces via clinker.toml files, which can define the channel directory layout and other workspace-level settings.

Current status

Note: The channel system is being rebuilt in Phase 16c. The current implementation supports variable overrides. Full channel documentation – including path overrides, schema overrides, and channel inheritance – will be expanded when the rebuild is complete.

Complete example

# channels/globex/channel.yaml
_channel:
  id: globex
  name: "Globex Industries"
  active: true
  tier: standard

variables:
  COMMISSION_RATE: "0.15"
  MIN_ORDER: "250"
  REPORT_LABEL: "Globex Monthly"
# Run the pipeline with Globex's configuration
clinker run sales_pipeline.yaml --channel globex