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

# Nodes

> Individual messages and replies that make up a branch.

export const EdgeChip = ({type = 'continuation', children}) => <span className="np-edge-chip" data-type={type}>{children}</span>;

A node is one message on the canvas. User messages, assistant replies, and in-progress drafts all behave like nodes in the graph. Most NodePad actions start by selecting a node or branching from one.

## What a node carries

<Columns cols={3}>
  <Card title="Message content" icon="type">
    Rendered as Markdown — lists, code blocks, links — so the message stays readable inside the graph.
  </Card>

  <Card title="Attachments" icon="paperclip">
    Uploaded files, images, and tool-call artifacts that stay part of the node's context footprint.
  </Card>

  <Card title="Model metadata" icon="sparkles">
    Assistant nodes show which model produced the reply. References can also live on a node — the visible `@` token is only the UI layer; the cross-message link is stored separately.
  </Card>
</Columns>

## How nodes become branches

Nodes connect in sequence. Each link forward is a <EdgeChip type="continuation">continuation edge</EdgeChip>. When you branch from a node, NodePad creates a new path from that point — a <EdgeChip type="fork">fork edge</EdgeChip> — without changing the original branch.

## What you can do from a node

<Columns cols={3}>
  <Card title="Branch" icon="git-branch">
    Start a new path from the exact context at that point.
  </Card>

  <Card title="Edit or re-run" icon="refresh-cw">
    Available depending on the node type and position.
  </Card>

  <Card title="Reference or merge" icon="at-sign">
    Pull this node into another message through an `@` reference or a merge flow.
  </Card>
</Columns>

## Behaviors worth knowing

<AccordionGroup>
  <Accordion title="Branches preserve history">
    Branching does not rewrite the original path. It creates a new one.
  </Accordion>

  <Accordion title="References are explicit">
    Mentioning `@B1-2` in text is not enough on its own. The reference picker records the actual linked node so NodePad knows what to include.
  </Accordion>

  <Accordion title="Node IDs are useful">
    You can copy a node ID from the context menu. That is handy when you want to reference a specific message cleanly.
  </Accordion>

  <Accordion title="Text notes are different">
    Text notes are not conversation nodes. They are standalone annotations on the canvas.
  </Accordion>
</AccordionGroup>

<Tip>
  If you are unsure whether a follow-up belongs in the current branch, branch first. It is cheaper to keep two clean paths than to untangle one noisy one later.
</Tip>

## Continue

<Columns cols={2}>
  <Card title="Forking" icon="git-branch" href="/concepts/forking">
    When and how to branch.
  </Card>

  <Card title="References" icon="at-sign" href="/concepts/references">
    How `@` works across branches.
  </Card>
</Columns>
