# Build your First Pipeline

A **Pipeline** in Condense is the visual and functional representation of data flow between deployed connectors, transforms, and utilities inside a workspace. It is automatically materialized when a connector or transform is deployed. No manual creation needed.

{% hint style="info" %}
**Before you begin**, make sure you have:

* A workspace created and configured
* At least one environment linked to the workspace
* Workspace Admin or Maintainer role
  {% endhint %}

## What You'll Build

```
[ Input Connector ]  →  [ Kafka Topic ]  →  [ Transform ]  →  [ Output Connector ]
   (Data Source)            (Stream)          (Process)          (Destination)
```

By the end of this guide, you will have a live pipeline ingesting data from a source, processing it through a transform, and delivering it to a destination, all inside your Condense workspace.

***

## Step 1 - Deploy an Input Connector

An **Input Connector** receives data from an external system and injects it into your pipeline.

1. Navigate to your **Workspace** → click **Connectors** in the left sidebar
2. Click **+ Add Connector**
3. Select **Input** as the connector role
4. Choose your connector type (e.g. Kafka, HTTP, Teltonika, Pub/Sub)
5. Fill in the required configuration fields:
   * **Title** - a unique name for this connector
   * **Output Topic** - the Kafka topic this connector will publish data to
   * **Environment Variables** - credentials, endpoints, or protocol settings<br>
6. Click **Deploy**<br>

   <div data-gb-custom-block data-tag="hint" data-style="success" class="hint hint-success"><p>Once deployed, your Input Connector will appear as a block on the Pipeline canvas and begin publishing data to the configured output topic.</p></div>

***

## Step 2 - Add a Transform

A **Transform** processes messages as they flow between your Input and Output connectors.

#### Option A - Prebuilt Transform

1. On the **Pipeline canvas**, click **+ Add Transform**
2. Select **Prebuilt**
3. Choose a transform type:
   * **Geofence** - location-based event triggering
   * **Alert Utility** - trigger alerts when a condition is met
   * **Split Utility** - route messages based on rules
4. Configure the required parameters:
   * **Input Topic** - must match the Output Topic from your Input Connector
   * **Output Topic** - the topic the transform will publish results to
5. Click **Deploy**

#### Option B - Custom Transform

1. Go to **Applications** → create or select an existing application
2. Build, test, and publish the application
3. Back on the Pipeline canvas, click **+ Add Transform** → **Custom**
4. Select your published application and version
5. Configure input/output topics and environment variables
6. Click **Deploy**

***

## Step 3 - Deploy an Output Connector

An **Output Connector** takes the processed data and delivers it to an external destination.

1. Navigate to **Connectors** → click **+ Add Connector**
2. Select **Output** as the connector role
3. Choose your connector type (e.g. PostgreSQL, Big Query, S3, Kafka)
4. Fill in the required configuration fields:
   * **Title** - a unique name for this connector
   * **Input Topic** - must match the Output Topic from your Transform
   * **Environment Variables** - destination credentials and settings
5. Click **Deploy**

   <div data-gb-custom-block data-tag="hint" data-style="success" class="hint hint-success"><p>Condense automatically draws a connecting line between blocks that share matching topics. Your pipeline is now live.</p></div>

***

## Step 4 - View Your Pipeline

Click **Pipeline** in the left sidebar. You will see all deployed blocks connected by lines:

<div data-with-frame="true"><img src="https://docs.zeliot.in/condense/~gitbook/image?url=https%3A%2F%2F1775139360-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FvbacpakLuL4x2VBp2174%252Fuploads%252FFXdRmLlbVOIi01MBO9Z9%252Fimage.png%3Falt%3Dmedia%26token%3Da34c67b8-847c-4c06-ad37-9da5cc5f65c2&#x26;width=768&#x26;dpr=3&#x26;quality=100&#x26;sign=9bc098d7&#x26;sv=2" alt="Pipeline Canvas Showing Connected Blocks"></div>

Clicking any block opens its **Component Detail Panel** showing the connector name, category, type, status, and Kafka topic information:

<div data-with-frame="true"><img src="https://docs.zeliot.in/condense/~gitbook/image?url=https%3A%2F%2F1775139360-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FvbacpakLuL4x2VBp2174%252Fuploads%252Fr9UecWjLEuGH0UP4zqLv%252Fimage.png%3Falt%3Dmedia%26token%3Dfbc7862e-7a17-4186-8b55-2edbc9d329cc&#x26;width=768&#x26;dpr=3&#x26;quality=100&#x26;sign=f9f5657&#x26;sv=2" alt="Node Details Panel"></div>

{% hint style="info" %}
Pipelines are automatically materialized. They appear automatically as soon as connectors and transforms are deployed. You do not manually create a pipeline.
{% endhint %}

***

## Step 5 - Monitor Your Pipeline

#### Real-Time Metrics

Each block displays live CPU and memory utilization:

<div data-with-frame="true"><img src="https://docs.zeliot.in/condense/~gitbook/image?url=https%3A%2F%2F1775139360-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FvbacpakLuL4x2VBp2174%252Fuploads%252FQp8wuZOvEnHSpZhwjr2w%252Fimage.png%3Falt%3Dmedia%26token%3Da3255060-fc68-4ecf-92be-72784b95f6bf&#x26;width=768&#x26;dpr=3&#x26;quality=100&#x26;sign=2c701f87&#x26;sv=2" alt="Real-Time Resource Utilization Metrics"></div>

Colour-coded status indicators let you instantly identify Running, Stopped, or Error states:

<div data-with-frame="true"><img src="https://docs.zeliot.in/condense/~gitbook/image?url=https%3A%2F%2F1775139360-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FvbacpakLuL4x2VBp2174%252Fuploads%252FtzQPdQe4Ewy6WuOOc20U%252Fimage.png%3Falt%3Dmedia%26token%3Da4fd837f-4b79-47c5-b4d5-5fbdbbf35640&#x26;width=768&#x26;dpr=3&#x26;quality=100&#x26;sign=3257c45c&#x26;sv=2" alt="Colour-Coded Pipeline Status Indicators"></div>

#### Logs and Debugging

Access detailed real-time logs for each block with customizable streaming intervals (5 seconds by default):

<div data-with-frame="true"><img src="https://docs.zeliot.in/condense/~gitbook/image?url=https%3A%2F%2F1775139360-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FvbacpakLuL4x2VBp2174%252Fuploads%252FqftlDVlvswS9JJguZ5Hs%252Fimage.png%3Falt%3Dmedia%26token%3Ddcaf415d-29c2-4b10-a69f-8b31fd817f84&#x26;width=768&#x26;dpr=3&#x26;quality=100&#x26;sign=1289680e&#x26;sv=2" alt="Logs and Debugging Panel"></div>

### Editing Your Pipeline

If you need to fix a misconfiguration after deployment, use **Edit Configurations**:

<div data-with-frame="true"><img src="https://docs.zeliot.in/condense/~gitbook/image?url=https%3A%2F%2F1775139360-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FvbacpakLuL4x2VBp2174%252Fuploads%252FqvpSspmI0uQswtrcO8hz%252Fimage.png%3Falt%3Dmedia%26token%3D9f0378c4-0e15-44d1-9921-cb715670f0fc&#x26;width=768&#x26;dpr=3&#x26;quality=100&#x26;sign=e8b9fd48&#x26;sv=2" alt="Edit Configurations Panel"></div>

1. Click the block you want to edit on the Pipeline canvas
2. Click **Edit Configuration**
3. Update the required fields
4. Click **Save Changes**<br>

   <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p>Fields with a <strong>lock icon</strong> cannot be edited after deployment. To change locked fields, delete and redeploy the component.</p></div>

### Roles and Permissions

| Operation                           |                              Admin                              |                            Maintainer                           |                            Developer                            |                              Viewer                             |
| ----------------------------------- | :-------------------------------------------------------------: | :-------------------------------------------------------------: | :-------------------------------------------------------------: | :-------------------------------------------------------------: |
| Deploy pre-built connectors         | <img src="/files/3VPLlKQJsONndhKM7ILb" alt="" data-size="line"> | <img src="/files/3VPLlKQJsONndhKM7ILb" alt="" data-size="line"> | <img src="/files/wTGZUHo17KYqFf1KK4XM" alt="" data-size="line"> | <img src="/files/wTGZUHo17KYqFf1KK4XM" alt="" data-size="line"> |
| Deploy custom connectors/transforms | <img src="/files/3VPLlKQJsONndhKM7ILb" alt="" data-size="line"> | <img src="/files/3VPLlKQJsONndhKM7ILb" alt="" data-size="line"> | <img src="/files/wTGZUHo17KYqFf1KK4XM" alt="" data-size="line"> | <img src="/files/wTGZUHo17KYqFf1KK4XM" alt="" data-size="line"> |
| Configure deployed components       | <img src="/files/3VPLlKQJsONndhKM7ILb" alt="" data-size="line"> | <img src="/files/3VPLlKQJsONndhKM7ILb" alt="" data-size="line"> | <img src="/files/wTGZUHo17KYqFf1KK4XM" alt="" data-size="line"> | <img src="/files/wTGZUHo17KYqFf1KK4XM" alt="" data-size="line"> |
| Delete deployed components          | <img src="/files/3VPLlKQJsONndhKM7ILb" alt="" data-size="line"> | <img src="/files/3VPLlKQJsONndhKM7ILb" alt="" data-size="line"> | <img src="/files/wTGZUHo17KYqFf1KK4XM" alt="" data-size="line"> | <img src="/files/wTGZUHo17KYqFf1KK4XM" alt="" data-size="line"> |
| View pipelines and connections      | <img src="/files/3VPLlKQJsONndhKM7ILb" alt="" data-size="line"> | <img src="/files/3VPLlKQJsONndhKM7ILb" alt="" data-size="line"> | <img src="/files/3VPLlKQJsONndhKM7ILb" alt="" data-size="line"> | <img src="/files/3VPLlKQJsONndhKM7ILb" alt="" data-size="line"> |
| View component logs/configuration   | <img src="/files/3VPLlKQJsONndhKM7ILb" alt="" data-size="line"> | <img src="/files/3VPLlKQJsONndhKM7ILb" alt="" data-size="line"> | <img src="/files/3VPLlKQJsONndhKM7ILb" alt="" data-size="line"> | <img src="/files/3VPLlKQJsONndhKM7ILb" alt="" data-size="line"> |

***

## Best Practices

<img src="/files/yZdzKQlDWWPeaUw5Me4V" alt="" data-size="line">  Use **clear topic naming** to make the pipeline canvas self-explanatory

<img src="/files/yZdzKQlDWWPeaUw5Me4V" alt="" data-size="line">  **Group related connectors and transforms** logically to simplify understanding

<img src="/files/yZdzKQlDWWPeaUw5Me4V" alt="" data-size="line">  **Avoid unused topic links** to reduce visual clutter

<img src="/files/yZdzKQlDWWPeaUw5Me4V" alt="" data-size="line">  **Regularly check component logs** to catch issues early

<img src="/files/yZdzKQlDWWPeaUw5Me4V" alt="" data-size="line">  Document the pipeline purpose in the workspace description

***

## Common Pitfalls

* **Misaligned Topic Names** - Double-check that Output Topic of one block exactly matches the Input Topic of the next block
* **Unused Components Left Running** - Remove or disable unused connectors to prevent unnecessary resource usage
* **Overcrowded Canvas** - Use multiple workspaces when a single pipeline becomes too dense


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.zeliot.in/condense/v2.4.0/overview/build-your-first-pipeline.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
