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.
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.