> ## Documentation Index
> Fetch the complete documentation index at: https://docs.allium.so/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Create, deploy, and consume your first Beam pipeline in minutes.

<Info>
  **Beta access required.** Beam is currently in beta. Contact [support@allium.so](mailto:support@allium.so) to get access before starting.
</Info>

<Frame>
  <video src="https://mintcdn.com/allium-e770e2b7/ZgQ-lWhjN067a64Z/videos/Beam_Demo.mp4?fit=max&auto=format&n=ZgQ-lWhjN067a64Z&q=85&s=d739cfa5a471a51a7a680d4c928d5d53" autoPlay muted loop playsInline data-path="videos/Beam_Demo.mp4" />
</Frame>

## Create your first pipeline

<Steps>
  <Step title="Open the pipeline builder">
    Navigate to [app.allium.so/build/beam](https://app.allium.so/build/beam) and click **New** to create a blank pipeline, or **Start with Template** for a pre-built example.
  </Step>

  <Step title="Configure your source">
    Select a blockchain and entity type to stream. For example, **Polygon** + **log** to stream all Polygon logs.

    <Frame>
      <img src="https://mintcdn.com/allium-e770e2b7/S-ldIAoT5ra2szWK/images/beam/beam-quickstart-source.png?fit=max&auto=format&n=S-ldIAoT5ra2szWK&q=85&s=73ddb0e313f3e112bc885690b8618d3b" alt="Beam source configuration" width="614" height="328" data-path="images/beam/beam-quickstart-source.png" />
    </Frame>
  </Step>

  <Step title="Add a filter">
    Add a **Set Filter** to narrow down to specific events. Select the field to match against using a filter expression.

    For example, to filter to USDC on Polygon, set the expression to `root = this.address`. Then click **Edit** on the filter node to open the filter set editor, where you can add the USDC contract address. You can add values individually, paste multiple values, or bulk upload from a `.txt`/`.csv` file.

    <Frame>
      <img src="https://mintcdn.com/allium-e770e2b7/S-ldIAoT5ra2szWK/images/beam/beam-quickstart-filter.png?fit=max&auto=format&n=S-ldIAoT5ra2szWK&q=85&s=0e2e542a445b02f5827787cdfbea1e97" alt="Beam set filter configuration" width="1378" height="612" data-path="images/beam/beam-quickstart-filter.png" />
    </Frame>
  </Step>

  <Step title="Add a sink">
    Add a **Kafka** sink and give it a name (e.g., `usdc-logs`). This determines where your filtered data gets delivered.

    <Frame>
      <img src="https://mintcdn.com/allium-e770e2b7/S-ldIAoT5ra2szWK/images/beam/beam-quickstart-sink.png?fit=max&auto=format&n=S-ldIAoT5ra2szWK&q=85&s=653e828fdc3071a2c3578799db444282" alt="Beam Kafka sink configuration" width="728" height="322" data-path="images/beam/beam-quickstart-sink.png" />
    </Frame>
  </Step>

  <Step title="Deploy">
    Click **Deploy**. Beam creates Kafka topics, provisions credentials, and spins up workers — typically in under 30 seconds.
  </Step>

  <Step title="Consume your data">
    After deployment, click **Get Cooking** to view your Kafka credentials and ready-to-use code snippets.

    <Frame>
      <img src="https://mintcdn.com/allium-e770e2b7/S-ldIAoT5ra2szWK/images/beam/beam-quickstart-deploy.png?fit=max&auto=format&n=S-ldIAoT5ra2szWK&q=85&s=e03110dfe0e5a51b20b24d00a312825a" alt="Beam deployment credentials" width="1212" height="1694" data-path="images/beam/beam-quickstart-deploy.png" />
    </Frame>

    <CodeGroup>
      ```python Python theme={null}
      from confluent_kafka import Consumer

      conf = {
          "bootstrap.servers": "<bootstrap-server>",
          "group.id": "<consumer-group>",
          "security.protocol": "SASL_SSL",
          "sasl.mechanisms": "PLAIN",
          "sasl.username": "<username>",
          "sasl.password": "<password>",
          "auto.offset.reset": "latest",
      }

      consumer = Consumer(conf)
      consumer.subscribe(["beam.<config_id>.usdc-logs"])

      while True:
          msg = consumer.poll(1.0)
          if msg is None:
              continue
          print(msg.value().decode("utf-8"))
      ```

      ```typescript TypeScript theme={null}
      import { Kafka } from "kafkajs";

      const kafka = new Kafka({
        brokers: ["<bootstrap-server>"],
        ssl: true,
        sasl: {
          mechanism: "plain",
          username: "<username>",
          password: "<password>",
        },
      });

      const consumer = kafka.consumer({ groupId: "<consumer-group>" });

      await consumer.connect();
      await consumer.subscribe({ topic: "beam.<config_id>.usdc-logs" });

      await consumer.run({
        eachMessage: async ({ message }) => {
          console.log(message.value?.toString());
        },
      });
      ```
    </CodeGroup>

    Replace the placeholder values with the credentials shown in the **Get Cooking** panel.
  </Step>
</Steps>

## Verify your deployment

After deploying, check worker health in the Beam UI. You should see:

* **Total workers** — number of worker pods running
* **Healthy workers** — workers processing data normally
* **Unhealthy / crashing / OOM** — should all be 0

Use the **Metrics** panel to confirm messages are flowing (1h, 1d, or 1w time range).

## Updating a pipeline

To change your pipeline config, edit the source, transforms, or sinks in the UI and click **Deploy** again. Deployment is **idempotent with zero downtime** — changes apply in place.

<Warning>
  Do **not** teardown before redeploying. That causes unnecessary downtime. Just redeploy directly.
</Warning>

## Next steps

<CardGroup cols={2}>
  <Card title="Configuration reference" icon="sliders" href="/beam/configuration">
    Full reference for sources, transforms, and sinks
  </Card>

  <Card title="Examples" icon="book-open" href="/beam/examples">
    Copy-paste pipeline configs for common use cases
  </Card>
</CardGroup>
