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

# Connecting Nodes

> Wire data between nodes in three ways: drawing edges on the canvas, inline references with Tab, and publishing parameters as connection points.

Running nodes one at a time is fine for quick experiments. The real power of Runchat is chaining nodes together so the output of one flows straight into the next. There are three ways to connect nodes: drawing edges, inline references with `Tab`, and publishing parameters.

<Frame>
  <img src="https://mintcdn.com/runchat/aYbzuIlYJ8oJiA8J/images/workshop/connecting-nodes/connection-overview.png?fit=max&auto=format&n=aYbzuIlYJ8oJiA8J&q=85&s=178673b3020eb4405dc8459e436f0c6f" alt="Two nodes connected by a coloured edge" width="2804" height="1072" data-path="images/workshop/connecting-nodes/connection-overview.png" />
</Frame>

<iframe width="100%" height="400" src="https://www.youtube.com/embed/g_H8NRB72s8" title="Connecting nodes in Runchat" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen />

## Drawing an edge

To connect two nodes, drag from an output handle on the right side of one node to an input handle on the left side of another. From then on, whenever you run the downstream node, Runchat automatically grabs the latest result from the upstream one and feeds it in.

Runchat checks compatibility as you connect. If you try to plug a video into a parameter that expects text, it won't let you, and it'll show why.

## Edge colours

Edges are colour-coded by the type of data flowing through them. You don't need to memorise these, at a glance the colour tells you what kind of data is moving:

| Colour                                                                                                                                                                          | Data type                 |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- |
| <span style={{ display: "inline-block", width: "1rem", height: "1rem", borderRadius: "0.25rem", verticalAlign: "middle", backgroundColor: "oklch(0.55 0.17 260)" }} /> Blue     | Text                      |
| <span style={{ display: "inline-block", width: "1rem", height: "1rem", borderRadius: "0.25rem", verticalAlign: "middle", backgroundColor: "oklch(0.75 0.17 80)" }} /> Yellow    | Images                    |
| <span style={{ display: "inline-block", width: "1rem", height: "1rem", borderRadius: "0.25rem", verticalAlign: "middle", backgroundColor: "oklch(0.55 0.17 25)" }} /> Coral     | Video                     |
| <span style={{ display: "inline-block", width: "1rem", height: "1rem", borderRadius: "0.25rem", verticalAlign: "middle", backgroundColor: "oklch(0.55 0.17 0)" }} /> Pink       | Audio                     |
| <span style={{ display: "inline-block", width: "1rem", height: "1rem", borderRadius: "0.25rem", verticalAlign: "middle", backgroundColor: "oklch(0.55 0.17 170)" }} /> Teal     | 3D models / meshes        |
| <span style={{ display: "inline-block", width: "1rem", height: "1rem", borderRadius: "0.25rem", verticalAlign: "middle", backgroundColor: "oklch(0.55 0.17 300)" }} /> Lavender | Numbers and booleans      |
| <span style={{ display: "inline-block", width: "1rem", height: "1rem", borderRadius: "0.25rem", verticalAlign: "middle", backgroundColor: "oklch(0.55 0.17 200)" }} /> Cyan     | Messages and chat context |

For the full list of types and how Runchat casts between them, see [Data Types](/concepts/data/data-types).

## Inline references with Tab

Sometimes you don't want to draw an edge, you want to drop a node's output value into the middle of a prompt. Use the `Tab` key inside any text field.

Hit `Tab` to open a panel listing every output from other nodes on the canvas. Pick one and it drops into your text as a tag. When you run the workflow, the tag gets replaced with the live value from the other node.

<Frame>
  <img src="https://mintcdn.com/runchat/J8Y8DQ43swL1M50L/images/editor/connecting-nodes-tab-picker.webp?fit=max&auto=format&n=J8Y8DQ43swL1M50L&q=85&s=9bee5c5de4857a5f6178a6d1a66d6a08" alt="The Tab reference picker open inside a prompt field" width="1897" height="512" data-path="images/editor/connecting-nodes-tab-picker.webp" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/runchat/J8Y8DQ43swL1M50L/images/editor/connecting-nodes-tab-picked.webp?fit=max&auto=format&n=J8Y8DQ43swL1M50L&q=85&s=268c58c880e0cb3056f6190a2cdb6aaf" alt="A reference tag inserted into a prompt after selection" width="1461" height="501" data-path="images/editor/connecting-nodes-tab-picked.webp" />
</Frame>

<Info>
  Typing `@` does the same thing, but also zooms the canvas out so you can
  visually see which node you're about to reference. Useful when you have a lot
  of nodes and can't remember what's named what.
</Info>

For the full mechanics of references, see [Data Referencing](/concepts/data/data-referencing).

## Publishing a parameter

Any parameter in a node's "All parameters" menu can be published onto the node, which turns it into an input handle you can connect to from another node.

<Frame>
  <img src="https://mintcdn.com/runchat/J8Y8DQ43swL1M50L/images/editor/connecting-nodes-expose-as-input.webp?fit=max&auto=format&n=J8Y8DQ43swL1M50L&q=85&s=2c533fa7a4b1380c2b45e8b29d3142c9" alt="The All parameters menu showing a parameter being published as an input" width="406" height="504" data-path="images/editor/connecting-nodes-expose-as-input.webp" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/runchat/J8Y8DQ43swL1M50L/images/editor/connecting-nodes-exposed-input.webp?fit=max&auto=format&n=J8Y8DQ43swL1M50L&q=85&s=55d7efa7decffe1b7089211d8d453df8" alt="The node now has a new input handle for the published parameter" width="458" height="165" data-path="images/editor/connecting-nodes-exposed-input.webp" />
</Frame>

This is how you make settings like aspect ratio, number of variations, or model temperature controllable from the outside, driven by:

* A number input or slider
* An agent's output
* A dropdown filled in by someone using your workflow as an [App](/concepts/publishing/app-view)

Publishing parameters is what makes a workflow reusable as a [Tool](/concepts/publishing/agent-tools) or shareable as an [App](/concepts/publishing/app-view).

## When to use which

* **Edges** for primary data flow (the prompt, the image, the result).
* **Tab references** for values you want to inline into a prompt or template, they keep your canvas tidier.
* **Published parameters** for settings you want exposed to a downstream node, an agent, or an end user of your App.
