> For the complete documentation index, see [llms.txt](https://postica.gitbook.io/binding-system-3/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://postica.gitbook.io/binding-system-3/overview/pinning.md).

# Pinned Paths

Put the sources you use most at the top of every bind path menu.

Some objects get bound over and over: the player, the game manager, the settings asset, one particular property on one particular material. Hunting for them through the hierarchy every time is friction that adds up.

**Pinning** puts them at the top of the bind path menu, everywhere.

## Pinning something

<table><thead><tr><th width="330">Where</th><th>Menu item</th></tr></thead><tbody><tr><td>A component header, right click</td><td><strong>Binding ▸ Pin to Bind Sources</strong></td></tr><tr><td>A GameObject in the Hierarchy, right click</td><td><strong>Binding ▸ Pin to Bind Sources</strong></td></tr><tr><td>An asset in the Project window, right click</td><td><strong>Binding ▸ Pin to Bind Sources</strong></td></tr><tr><td>Any serialized property, right click</td><td><strong>Binding ▸ Pin to Bind Sources</strong>, which pins that exact path rather than the object</td></tr></tbody></table>

The same menus offer **Unpin from Bind Sources** on anything already pinned, and **Pin Children to Bind Sources** when what you actually want is everything *under* a path rather than the path itself.

<figure><img src="https://3048705056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLUfBXR02sJ5i0MxwYbaV%2Fuploads%2FHdc0kypzAfMkJQ0x26ej%2FScreenshot%202026-09-28%20at%2011.05.20.png?alt=media&amp;token=3c01777e-c38d-4f9b-9a27-5bb692851047" alt="" width="563"><figcaption><p>Pinning a component</p></figcaption></figure>

## Using a pin

Pinned entries appear in the bind path menu under **Pinned**, above the components of the current source. Click one and you are straight into its members.

<figure><img src="https://3048705056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLUfBXR02sJ5i0MxwYbaV%2Fuploads%2FE9iRlHrQnwknJ0PAy5jU%2FScreenshot%202026-09-28%20at%2011.06.53.png?alt=media&amp;token=1e850e6b-ddab-4fae-8089-42fc06294a64" alt="" width="563"><figcaption><p>The Pinned group in the bind path menu</p></figcaption></figure>

Alongside it, **Last Used** lists the sources and pins you reached for most recently, which handles the case where you did not think to pin something but keep coming back to it.

Both groups can be turned off in [Visualization](/binding-system-3/reference/settings.md#visualization) if you prefer a shorter menu. Pinning keeps working either way; only the listing goes away.

## Where pins are stored

<table><thead><tr><th width="290">Pinned thing</th><th>Where it is stored</th></tr></thead><tbody><tr><td>Something in a scene</td><td>A <code>PinnedStorage</code> GameObject in that scene. Pins travel with the scene, so the team shares them.</td></tr><tr><td>A project asset</td><td><code>global-pins.asset</code> in the <a href="/binding-system-3/reference/settings.md#bindings-path">Bindings folder</a>. Project wide.</td></tr></tbody></table>

The bind path menu offers the pins of the current scene plus the global ones, so both sets are always available.

## Reviewing and removing pins

**Project Settings ▸ Binding System ▸ Configuration ▸ Pinning** lists every pinned path, grouped by the storage that holds it, and lets you remove them. Paths pinned with **Pin Children** are marked with a **Children** badge, since they behave differently in the menu.

<figure><img src="https://3048705056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLUfBXR02sJ5i0MxwYbaV%2Fuploads%2FrrTsNazikTBBBaF4nn5l%2FScreenshot%202026-09-28%20at%2011.09.10.png?alt=media&amp;token=50393f61-9037-45a1-9ff9-a93830f2a5b8" alt="" width="563"><figcaption><p>The pinning manager in the settings page</p></figcaption></figure>

## Pins versus variables

They solve neighbouring problems and it is worth being clear about which one you want.

<table><thead><tr><th width="230"></th><th>Pinned path</th><th>Bind variable</th></tr></thead><tbody><tr><td>What it saves you</td><td>Navigation while authoring</td><td>A concrete reference at runtime</td></tr><tr><td>Effect on the binding</td><td>None. The binding ends up with an ordinary source.</td><td>The binding resolves through the variable every time.</td></tr><tr><td>Changing it later</td><td>Does not affect existing bindings</td><td>Changes every binding that uses it</td></tr><tr><td>Good for</td><td>The objects you bind to constantly</td><td>Prefabs, spawned objects, shared values</td></tr></tbody></table>

In short: a pin is a bookmark, a variable is an indirection. See [Bind Variables](/binding-system-3/overview/bind-variables.md).

## From code

```csharp
using Postica.BindingSystem;

// Any component or asset can act as pinned storage.
IPinnedStorage storage = /* PinnedStorageComponent or PinnedStorageAsset */;

storage.AddPath(new PinnedPath(context, "position.x", typeof(Vector3)));
storage.RemovePath(existingPath);

foreach (var path in storage.AllPaths)
    Debug.Log(path);
```
