Kaoto Glossary

July 20, 2026 ยท View on GitHub

This glossary defines the canonical terminology for Kaoto's visual editor and how each concept maps to the underlying integration domain.

Terms are organized from broad to specific:

  • DSL -- the supported file formats and their capabilities.
  • Generic layer -- concepts that belong to the visual editor itself and are DSL-agnostic.
  • Camel DSL layer -- concepts specific to Apache Camel Routes, Kamelet, and Pipe DSLs.

DSL

A DSL (Domain-Specific Language) in Kaoto is a file format for describing integrations. Kaoto detects the DSL from the file being edited and switches its visual editing rules accordingly -- which nodes are available in the catalog, how the canvas is laid out, and how many flows the file can contain.

Kaoto currently supports four DSLs:

DSLFile formatFlows per file
Camel Routes.camel.yamlMultiple
Kamelet.kamelet.yamlSingle
Pipe.pipe.yamlSingle
CitrusCitrus YAML testSingle

Generic Layer

Flow

A top-level unit of work rendered on the Kaoto canvas. Every top-level entity in a DSL file produces exactly one flow in the visualization. A flow owns a graph of nodes.

Flows come in two kinds:

  • Executable flows -- have a consumer start point and an end, representing a runnable integration path. Examples: a Camel route, a Kamelet, a Pipe, a Citrus test.
  • Configuration flows -- define cross-cutting rules or settings with no consumer start point. Examples: routeConfiguration, onException, intercept, onCompletion, restConfiguration.

Both kinds are equally valid flows in Kaoto's model; the distinction is informational.

Camel mapping: Each of the following produces one flow: route, routeConfiguration, rest, onException, intercept, onCompletion, restConfiguration.


Group

A node whose isGroup flag is true, rendered as an expandable container that holds child nodes. A group is not a separate model type -- it is a regular IVisualizationNode / CanvasNode promoted to group status when its underlying processor declares child step properties.

When expanded, a group renders as a bordered rectangle (CustomGroupExpanded) with a title bar, icon, and its children laid out inside. When collapsed, it renders as a normal node with a child-count badge.

Camel mapping: Any processor that can contain child steps: choice, split, filter, doTry, circuitBreaker, multicast, loadBalance, aggregate, loop, pipeline, saga, resequence, step, and the from / when / otherwise / doCatch / doFinally / onFallback clauses. The top-level route node is always a group.


Node

A single visual element on the canvas, representing one executable step or structural element within a Flow. Corresponds to IVisualizationNode in the code.

Nodes form a doubly-linked list for sequential flow (previousNode / nextNode) and a tree for nesting (parentNode / children). Every node carries an IVisualizationNodeData payload with its name, path into the underlying definition, icon, label, and JSON schema for its configuration form.

Camel mapping: An EIP processor instance (e.g. log, to, choice), the from consumer, or the route group node.


Placeholder

A special node (isPlaceholder: true) that represents an insertion point where new steps can be added. Placeholders are not executable -- they exist purely as interaction affordances.

Two fixed types:

TypeNamePurpose
Placeholder'placeholder'Generic "add step" target at the end of a branch
PlaceholderSpecialChild'placeholder-special-child'Empty-state target for special children (e.g. empty REST DSL)

Dynamic placeholders are also created for specific clause slots (e.g. a when placeholder inside a choice group), using the clause name as the placeholder name.


Edge

A directional connection between two nodes, representing flow of execution. Corresponds to CanvasEdge in the code (extending PatternFly Topology's EdgeModel).

Edges are derived automatically from the nextNode linked-list relationships in the IVisualizationNode tree. Each edge renders as a straight SVG path with a connector arrow and an "add step" icon that appears on hover at the midpoint.

Edge ID format: "sourceId >>> targetId".


Node Identity

Status: in progress -- the NodeIdentity interface is defined; population across all DSLs is being rolled out incrementally.

A single piece of identity information for a node: a name and its catalog kind.

interface NodeIdentity {
  name: string;
  catalogKind: CatalogKind;
}

Primary / Secondary / Tertiary Node ID

Status: in progress -- see Node Identity above.

The ordered set of identities that describe what a node is. The primary is always required; secondary and tertiary are optional and DSL-specific.

Each DSL is described below from simplest (one level) to most complex (up to three levels).


Pipe

A Pipe node always has exactly one identity: the Kamelet it represents. There is no secondary or tertiary level.

primaryNodeId   { name: 'timer-source', catalogKind: CatalogKind.Kamelet }

Citrus

A Citrus test action node always has exactly one identity: the test action name.

primaryNodeId   { name: 'echo', catalogKind: CatalogKind.TestAction }

The Citrus root group node (the flow container) is also enriched as a CatalogKind.TestAction.


Camel Routes (and Kamelet DSL)

The Kamelet DSL shares the same internal node structure as Camel Routes -- both use from, standard processors, and the same mappers -- so the rules below apply to both DSLs.

Simple case -- processor only (no URI):

A processor that carries no component URI (e.g. log, choice, split) has only a primary identity.

primaryNodeId   { name: 'log', catalogKind: CatalogKind.Processor }

Standard case -- processor + Component URI:

A processor that carries a component URI (e.g. to: timer:tick) adds a secondary identity for the resolved Component.

primaryNodeId    { name: 'to',    catalogKind: CatalogKind.Processor }
secondaryNodeId  { name: 'timer', catalogKind: CatalogKind.Component }

Kamelet URI case -- processor + Kamelet URI:

When the URI references a Kamelet (e.g. to: kamelet:weather-source), the secondary identity is the kamelet Camel Component and the tertiary identity is the resolved Kamelet itself.

primaryNodeId    { name: 'to',             catalogKind: CatalogKind.Processor }
secondaryNodeId  { name: 'kamelet',        catalogKind: CatalogKind.Component }
tertiaryNodeId   { name: 'weather-source', catalogKind: CatalogKind.Kamelet  }

Root group node:

The invisible container node that wraps an entire Camel route or Kamelet flow. It carries the entity name as its primary identity and has no secondary or tertiary.

primaryNodeId   { name: 'route', catalogKind: CatalogKind.Entity }

from node:

The consumer start node. Its primary identity is always from. When a URI is configured the secondary identity is the resolved Component; when no URI is present the node is treated as a placeholder.

primaryNodeId    { name: 'from',  catalogKind: CatalogKind.Entity     }
secondaryNodeId  { name: 'timer', catalogKind: CatalogKind.Component  }  โ† present when URI is set

Camel DSL Layer

EIP (Enterprise Integration Pattern)

A pattern-based processing element such as Choice, Filter, Split, Aggregate. The term is used when referring specifically to the structural/behavioral role of a processor.

Camel mapping: Maps to CatalogKind.Pattern and CatalogKind.Processor in the catalog. In the Camel processor type system, ProcessorDefinition.

Scope: The generic layer should use NodeKind or primaryNodeId.catalogKind to represent this concept.

Deprecated aliases: processor (when used to mean "an EIP" -- overloaded; see below), element (as in ICamelElementLookupResult).


Processor

In Camel specifically: any executable unit in a ProcessorDefinition -- this includes EIPs, the from consumer, and structural containers. In Kaoto code: the DSL-level name of a node type (e.g. 'log', 'to', 'choice') as defined by the Camel catalog.

Use carefully -- this term is scoped to Camel.

Camel mapping: keyof ProcessorDefinition from @kaoto/camel-catalog/types. Maps to CatalogKind.Processor or CatalogKind.Pattern.

Scope: Camel DSL layer. The generic layer must not use this term.

Deprecated aliases: In current code, processorName is used as a field on the generic IVisualizationNodeData -- this is the primary target for removal.


Component

A transport-layer adapter such as AMQP, Timer, HTTP, File. Bound to a from, to, toD, or poll EIP via a URI. Maps to CatalogKind.Component.

Camel mapping: ICamelComponentDefinition; resolved from the URI string (e.g. timer:tick -> componentName: 'timer').

Scope: Camel DSL layer. In the generic model, the "component" role is captured by secondaryNodeId.

Deprecated aliases: componentName as a field in the generic data layer.


Kamelet

A reusable integration snippet packaged as a Camel extension, usable as a source, sink, or action. In Pipes: the primary node type. In Camel Routes: a specialization of the Component layer (attached via kamelet: URI prefix).

Camel mapping: CatalogKind.Kamelet; IKameletDefinition.

Scope: Camel DSL and Pipes DSL layers. In the generic model, a Kamelet-sourced node may appear as primaryNodeId (in Pipes) or tertiaryNodeId (in Camel Routes with kamelet: URI).


Route

The top-level structural container for a Camel integration flow. In Kaoto's visualization, the root IVisualizationNode of type EntityType.CamelRoute or EntityType.Kamelet.

Camel mapping: processorName: 'route', CatalogKind.Entity.

Scope: Camel DSL layer. In the generic model, this corresponds to a Flow's root node, identified by data.entity !== undefined.


Step

Avoid as a generic term. Use Node for the generic concept. Reserve step only for:

  1. The Camel step EIP specifically -- a scoped sequential sub-pipeline within a route.
  2. steps as an array property name in route definitions.

Camel mapping: CatalogKind.Pattern, name 'step'.


Pattern (catalog kind)

A catalog category grouping EIPs that have JSON schema definitions but are not from / route entities.

Camel mapping: CatalogKind.Pattern in code.

Scope: Camel catalog infrastructure layer. Do not use in user-facing documentation.

Deprecated aliases: processor (when used as a catalog-kind synonym for Pattern).


Entity (catalog kind)

A top-level Camel catalog entry representing a first-class flow element: route, from, routeConfiguration, intercept, onException, etc. Distinguished from Patterns because they appear at the root of a route definition.

Camel mapping: CatalogKind.Entity in code.


Branch Types

The three ways a processor can contain nested processors, as defined by CamelProcessorStepsProperties.type:

TypeDescriptionExamples
branchA steps[] array of sequential processorsfrom.steps, when.steps, filter.steps
single-clauseA single nested processorchoice.otherwise, circuitBreaker.onFallback, doTry.doFinally
array-clauseAn array of clause-type processorschoice.when[], doTry.doCatch[], rest.get[]

These types determine how the node mapper creates child visualization nodes and how placeholders are generated for each slot.