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

# Connecting Nodes

> Handle types, connection validation rules, and auto-routing behavior.

# Connecting Nodes

Voiceblox enforces typed connections — not every node can connect to every other node. The rules are defined in `connectionRules.ts` and validated both in the UI and at runtime.

## Handle types

| Type        | Color  | Used for                           |
| ----------- | ------ | ---------------------------------- |
| `control`   | Purple | Conversation step chain            |
| `framework` | Blue   | Start → Framework link             |
| `context`   | Green  | Tools/context injection (MCP, Exa) |
| `llm`       | Gray   | LLM component wiring               |
| `tts`       | Gray   | TTS component wiring               |
| `stt`       | Gray   | STT component wiring               |
| `persona`   | Gray   | Persona component wiring           |
| `avatar`    | Gray   | Avatar component wiring            |

## Connection rules

### Component → Framework

| Source node | Connects to | Handle       |
| ----------- | ----------- | ------------ |
| Persona     | Framework   | `persona_in` |
| LLM         | Framework   | `llm_in`     |
| TTS         | Framework   | `tts_in`     |
| STT         | Framework   | `stt_in`     |
| Avatar      | Framework   | `avatar_in`  |

### Conversation chain

| Source node | Target handle                            | Notes                                       |
| ----------- | ---------------------------------------- | ------------------------------------------- |
| Framework   | Start `framework_in`                     | Starts the step chain                       |
| Start       | Any step `in`                            | One outgoing connection                     |
| Burst       | Any step `in` or Framework `transfer_in` | One outgoing connection                     |
| Open Talk   | Any step `in` or Framework `transfer_in` | One outgoing connection                     |
| Timer       | Any step `in` or Framework `transfer_in` | One outgoing connection                     |
| If/Else     | Two targets: `true` and `false` handles  | Cannot target Start, If/Else, or Categorize |
| Categorize  | One target per category                  | Cannot target Start, If/Else, or Categorize |
| End         | Webhook `in`                             | Optional, fires webhook before disconnect   |
| Transfer    | Framework `transfer_in`                  | One outgoing connection                     |

### Integration → Framework

| Source node | Connects to | Handle                 |
| ----------- | ----------- | ---------------------- |
| MCP         | Framework   | `tools_in` (unlimited) |
| Exa         | Framework   | `tools_in` (unlimited) |

## Auto-routing

When you drag an edge from an output handle and release it on a target node (not a specific handle), Voiceblox automatically routes the connection to the correct handle using `findTargetRule()`. This works for all component nodes wiring into the Framework node.

## Validation

Invalid connections are rejected visually during drag. If a connection would violate the rules (wrong handle type, wrong source category, max connections exceeded), the edge snaps back and the connection is not created.

<Note>
  IfElse and Categorize nodes cannot immediately follow a Start node. You need at least one Burst, Open Talk, or Timer step between Start and a branching node.
</Note>
