> ## 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 in beta. Contact [support@allium.so](mailto:support@allium.so) to request access before you begin.
</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">
    Go to [app.allium.so/build/beam](https://app.allium.so/build/beam) and click **New** for a blank pipeline, or **Start with Template** to begin from an example.
  </Step>

  <Step title="Configure your source">
    Select a blockchain and entity to stream. For example, choose **Polygon** and **log** to stream every Polygon log.

    <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 keep only the events you care about. Choose the field to match on.

    For example, to keep only USDC on Polygon, set the expression to `root = this.address`. Click **Edit** on the filter node and add the USDC contract address. You can add values one at a time, paste a list, or upload a `.txt` or `.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 name it, for example `usdc-logs`. The name becomes part of the topic you consume from.

    <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 provisions your Kafka topic and credentials and starts the pipeline, usually in under 30 seconds.
  </Step>

  <Step title="Consume your data">
    Once deployed, click **Get Cooking** to view your Kafka credentials and consumer code samples.

    <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 placeholders with the values from the **Get Cooking** panel.
  </Step>
</Steps>

## Verify your deployment

Check worker health in the Beam UI after deploying:

* **Total workers**: workers running for the pipeline
* **Healthy workers**: workers processing data normally
* **Unhealthy, crashing, or out of memory**: should all be 0

Open the **Metrics** panel to confirm messages are flowing over the last hour, day, or week.

## Updating a pipeline

Edit the source, transforms, or sinks in the UI and click **Deploy** again. Deploys are **idempotent and zero-downtime**; changes apply in place.

<Warning>
  Don't tear down before redeploying. Tearing down causes unnecessary downtime.
</Warning>

## Next steps

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

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