# Node Groups

In Yarn Spinner, you can also create node groups. A **node group** is collection of nodes that share the same name that Yarn Spinner will choose from.

To create a node group, you create multiple nodes that all share the same name, and ensure that each of the nodes have at least one `when:` header.

The `when:`header tells Yarn Spinner about the conditions that must be met in order to run the node:

<pre class="language-html"><code class="lang-html">title: Guard
<a data-footnote-ref href="#user-content-fn-1">when: once</a>
---
Guard: You there, traveller!
Player: Who, me?
Guard: Yes! Stay off the roads after dark!
===
title: Guard
<a data-footnote-ref href="#user-content-fn-2">when: always</a>
---
Guard: I hear the king has a new advisor.
===
title: Guard
<a data-footnote-ref href="#user-content-fn-3">when: $has_sword</a>
---
Guard: No weapons allowed in the city!
===

</code></pre>

Node groups are combined into a single node that performs the appropriate checks and then runs one of the node group’s members. You start dialogue with a node group using its name. You can also use the `jump` or `detour` statements to run a node group from somewhere else in your Yarn scripts.

Node groups will be visualised in a box of their own in the Graph View of Yarn Spinner for Visual Studio Code:

<figure><img src="https://463139507-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGAKWviXNATe9kDFWZAco%2Fuploads%2Fgit-blob-9d0763ac4e5ce574e1880820719f4410b9cefa51%2FScreenshot%202025-05-15%20at%2012.38.40%E2%80%AFpm.png?alt=media" alt=""><figcaption><p>Node groups are shown in the Graph View.</p></figcaption></figure>

{% hint style="info" %}
Node groups are similar to [line groups](https://docs.yarnspinner.dev/write-yarn-scripts/scripting-fundamentals/line-groups) in their behaviour, but give you more room to create longer passages of content. Your C# code can also check to see how many (if any) nodes can run, which is covered in the Saliency section.
{% endhint %}

You can add as many `when:` headers to a node as you want.

[^1]: this version of the node can only run once

[^2]: this version is the line can run any time

[^3]: this version of the node can only run if the variable `$has_sword` is true
