---
title: Branching | Developer Documentation
description: Details about branching in workflows
---

Branching in Workflows is the concept of one handler emitting multiple possible event types.

In the most simple form, you might have a workflow that has different handlers for different input types.

```
import {
  createWorkflow,
  workflowEvent,
} from "@llamaindex/workflow-core";


const workflow = createWorkflow();
const inputEvent = workflowEvent<string | number>();
const processStringEvent = workflowEvent<string>();
const processNumberEvent = workflowEvent<number>();
const successEvent = workflowEvent<string>();


workflow.handle([inputEvent], async (context, event) => {
  if (typeof event.data === "string") {
    return processStringEvent.with(event.data);
  } else {
    return processNumberEvent.with(event.data);
  }
});


workflow.handle([processStringEvent], async (context, event) => {
  return successEvent.with(`Processed string ${event.data}`);
});


workflow.handle([processNumberEvent], async (context, event) => {
  return successEvent.with(`Processed number ${event.data}`);
});




let context1 = workflow.createContext();
context1.sendEvent(inputEvent.with("I am some data"));


const result = await context1.stream.until(successEvent).toArray();
console.log(result.at(-1)!.data);


let context2 = workflow.createContext();
context2.sendEvent(inputEvent.with(1));


const result2 = await context2.stream.until(successEvent).toArray();
console.log(result2.at(-1)!.data);
```
