> 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/help/troubleshooting.md).

# Troubleshooting

Symptom, cause, fix.

## A binding does nothing

<table><thead><tr><th width="290">Check</th><th>Why</th></tr></thead><tbody><tr><td>Is the bind toggle actually on?</td><td><strong>Check this first.</strong> An unbound field uses its plain value and looks normal. Note that <strong>Enable Binding</strong> alone does not bind a field: it adds the hexagon, and the hexagon has to be on. Switching it off keeps the setup, so a binding you configured and then toggled off is still there, just idle. See <a href="/binding-system-3/overview/proxy-bindings.md#the-toggle-and-disable-binding-are-different-actions">Proxy Bindings</a>.</td></tr><tr><td>Is there an error on the row?</td><td>See <a href="/binding-system-3/project-tools/diagnostics/errors.md">Error Visualization</a>. Hover the error point.</td></tr><tr><td>Does it have an update point?</td><td>A <a href="/binding-system-3/overview/proxy-bindings.md">proxy binding</a> needs one, and a new one starts with <strong>UPDATE</strong> already ticked, so this is only a problem if it was unticked or the project default was changed. Before treating an empty panel as the bug, check whether the binding is meant to be <a href="/binding-system-3/overview/modes-and-updates.md#no-update-point-on-purpose">driven from code or by a <code>UnityEvent</code></a>, in which case the panel is correct and the missing piece is the call. A <code>Bind&#x3C;T></code> resolves when your code reads it, so check that your code reads it.</td></tr><tr><td>Is the mode right?</td><td>A <code>Read</code> binding will not push a value out. Click the mode icon.</td></tr><tr><td>Is the source resolving?</td><td>Name, tag and pattern modes show a <a href="/binding-system-3/overview/sources.md#the-status-light">status light</a>. Red means nothing matched.</td></tr><tr><td>Is it paused?</td><td>Check the <a href="/binding-system-3/project-tools/diagnostics/bindings-monitor.md">Bindings Monitor</a> with <strong>Show Inactive</strong> on.</td></tr></tbody></table>

Turn on [Live Debug](/binding-system-3/project-tools/diagnostics/live-debug.md) and the answer is usually visible immediately.

If it is more than one binding, or you would rather be told than go looking, run the [validator](/binding-system-3/project-tools/diagnostics/validator.md) over the scene. It resolves every binding the way the runtime would and names the ones that cannot work, which covers most of the table above in one pass.

## The value is wrong, not absent

Live Debug shows every stage. Read it top to bottom and find the first stage whose output surprises you.

<table><thead><tr><th width="290">The wrong value appears at</th><th>What it means</th></tr></thead><tbody><tr><td>The path stage</td><td>The path points somewhere other than you thought. Turn on the <a href="/binding-system-3/project-tools/diagnostics/path-value-preview.md">preview</a> and re-check.</td></tr><tr><td>The converter</td><td>An unsafe conversion is falling back. Check the fallback value and the input.</td></tr><tr><td>A modifier</td><td>Check the order. Clamp then remap is not remap then clamp.</td></tr><tr><td>The output only</td><td>Something else is writing to your field after the binding does. Look for another binding, or your own code.</td></tr></tbody></table>

## Two things fight over one value

Symptom: the value flickers, or one control appears to be ignored.

Usually two bindings write to the same target, or a binding writes to something your `Update` also assigns. The [Dependency Graph](/binding-system-3/project-tools/diagnostics/dependency-graph.md) with the target in **Focus** shows every binding pointing at it.

For a value that genuinely has several controls, that is what **Link To Bindable** and **Set Value** are for. See [multi-controlled values](/binding-system-3/pipeline/modifiers.md#multi-controlled-values).

## It works in the editor, not in a build

<table><thead><tr><th width="290">Cause</th><th>What to do</th></tr></thead><tbody><tr><td>The binding used the <strong>EDITOR</strong> update point only</td><td>That point does not exist in a build. Add a real one.</td></tr><tr><td>The source is an editor-only object</td><td>Nothing in <code>UnityEditor</code> exists in a build. Static source mode already filters those out, but a direct reference can still be wrong.</td></tr><tr><td>Code stripping removed the member</td><td>Add a <code>link.xml</code> entry, or lower the managed stripping level.</td></tr><tr><td>The scene is not in the build</td><td>Check the <strong>Build only</strong> filter in <a href="/binding-system-3/project-tools/diagnostics/dependencies.md">Bindings Dependencies</a>.</td></tr></tbody></table>

## An exception in the Console, from a binding

Binding System prefixes its own log output, so filter on that first.

<table><thead><tr><th width="330">Message shape</th><th>What to do</th></tr></thead><tbody><tr><td>Null somewhere in the path</td><td>Decide what you want: <strong>Propagate Nulls</strong> on to get a default and silence, or off to keep the error. See <a href="/binding-system-3/overview/paths.md#nulls-along-the-path">Nulls along the path</a>.</td></tr><tr><td><em>is not write enabled</em></td><td>Something wrote to a <code>Read</code> binding. Check the mode, or guard with <code>CanWrite</code>.</td></tr><tr><td>An exception inside a converter or modifier</td><td>Turn on <a href="/binding-system-3/project-tools/diagnostics/live-debug.md">Live Debug</a>: the exception is shown at the stage that threw, with its stack trace.</td></tr></tbody></table>

## The bind path menu is empty, or missing what I want

<table><thead><tr><th width="290">Cause</th><th>What to do</th></tr></thead><tbody><tr><td>Nothing on the source can feed this type</td><td>The menu only lists compatible members. Check the field's type, and whether a converter exists for the pair.</td></tr><tr><td>Methods are hidden</td><td>Turn <strong>Methods</strong> back on in the <a href="/binding-system-3/reference/settings.md#visualization">Visualization panel</a>.</td></tr><tr><td>The member is hidden by an attribute</td><td><code>[HideMember]</code> on the member, or a global filter. See <a href="/binding-system-3/reference/attributes.md">Attributes</a>.</td></tr><tr><td>The path is deeper than the limit</td><td>Raise <a href="/binding-system-3/overview/paths.md#depth-limits">Max Bind Path Depth</a>, or bind in two hops.</td></tr><tr><td>The mode restricts it</td><td>A read-only binding does not list write-only members, and the reverse.</td></tr></tbody></table>

## Bind fields draw as raw serialized data

The editor assembly did not load. Check the Console for compile errors and reimport the package. With Odin installed, see [Odin Inspector](/binding-system-3/reference/integrations/odin-inspector.md).

## The project-wide tools see less than expected

The scanner reads serialized YAML, so **Project Settings ▸ Editor ▸ Asset Serialization** has to be **Force Text**. Under Force Binary or Mixed you get the [legacy window](/binding-system-3/project-tools/diagnostics/dependencies.md#the-legacy-window) instead, which only sees objects that are currently loaded.

If serialization is already text, delete `Library/BindDB.json`, `PrefabsDB.json` and `BindDeltaDB.json` and reimport. They are caches.

## Renaming broke things

Start by running the [validator](/binding-system-3/project-tools/diagnostics/validator.md) over the whole project. It names every binding a rename broke, including the ones in scenes nobody has open, which is the half that used to go unnoticed.

<table><thead><tr><th width="290">Case</th><th>What happens</th></tr></thead><tbody><tr><td>A field or method rename</td><td>Reported as <em>Path no longer exists</em>. <a href="/binding-system-3/project-tools/diagnostics/refactoring.md">Refactoring</a> redirects every binding of that member in one decision. Use <strong>Refactor renamed members</strong> in the validator, and check that <strong>Enable Refactoring</strong> is on.</td></tr><tr><td>A class rename</td><td>Reported as <em>Source type no longer exists</em>. Refactoring works on members, not on the type a binding starts from, so this one is repointed by hand: assign a source of the new type, or switch the binding off.</td></tr><tr><td>A converter or modifier <em>class</em> rename, or a namespace or assembly move</td><td><strong>Orphans every saved instance.</strong> They are stored by class name through <code>[SerializeReference]</code>, so there is no path to rewrite. Reported as <em>Modifier type is missing</em> or <em>Read converter type is missing</em>; pick the modifier or converter again, or restore the old class name.</td></tr><tr><td>A converter or modifier <code>Id</code> rename</td><td><strong>Safe.</strong> The <code>Id</code> is a menu label and a registry key, and is never written into the saved data.</td></tr><tr><td>A generated standard modifier class rename</td><td>Same as any other modifier class rename: it orphans the saved instances. Do not rename that file or its classes.</td></tr></tbody></table>

## No binding counts in VS Code or Rider

The extension reads `Library/BindingSystem/IdeIndex.json`, which Unity writes. Check that **Export for IDEs** is on in **Project Settings ▸ Binding System ▸ Configuration ▸ IDE Integration**, that the line under it reports a recent export, and that VS Code was reloaded or Rider restarted since the extension was installed. A binding you just made shows once its scene or prefab is saved. See [VS Code and Rider](/binding-system-3/reference/integrations/vscode-and-rider.md#troubleshooting).

## Performance

<table><thead><tr><th width="290">Symptom</th><th>Where to look</th></tr></thead><tbody><tr><td>The game is slow</td><td><a href="/binding-system-3/project-tools/diagnostics/bindings-monitor.md">Bindings Monitor</a>, then the <a href="/binding-system-3/project-tools/performance.md#a-tuning-order-that-works">tuning order</a>.</td></tr><tr><td>The Inspector is slow</td><td><a href="/binding-system-3/project-tools/performance/performance-mode.md">Performance Mode</a>.</td></tr><tr><td>The bind path menu is slow</td><td>Lower the path depth, hide methods.</td></tr><tr><td>The Inspector repaints constantly</td><td>Turn off <strong>Realtime Debug</strong>, and check for a binding with <a href="/binding-system-3/project-tools/diagnostics/live-debug.md">Live Debug</a> left on.</td></tr><tr><td>Import takes a long time</td><td>The dependency database is being built. It settles after the first pass.</td></tr></tbody></table>

## UI Toolkit

See the [dedicated table](/binding-system-3/overview/ui-toolkit.md#troubleshooting), which covers every message the UI Builder integration produces.

## Still stuck

[Support](/binding-system-3/help/support.md) has the contact details, and what to include so the answer arrives on the first reply.
