> 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/reference/settings.md).

# Settings

Every option in Project Settings, what it does and when to change it.

**Project Settings ▸ Binding System**

Five sections. Nothing here has to be changed for the system to work; the defaults are the recommended configuration for a new project.

<figure><img src="https://3048705056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLUfBXR02sJ5i0MxwYbaV%2Fuploads%2FEGmNADlzBT3nuewMewfZ%2FScreenshot%202026-09-28%20at%2018.27.49.png?alt=media&amp;token=4fb3b024-57ee-48dd-b4c8-8e658159c48b" alt=""><figcaption><p>The Binding System settings page</p></figcaption></figure>

## Language

<table><thead><tr><th width="270">Setting</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Language Source</strong></td><td><strong>Unity Editor Language</strong> follows the editor. <strong>System Language</strong> follows the OS. <strong>Custom</strong> lets you pick.</td></tr><tr><td><strong>Specific Language</strong></td><td>Shown only for <strong>Custom</strong>. Lists the languages the package ships.</td></tr></tbody></table>

See [Language and Localization](/binding-system-3/reference/localization.md).

## Visualization

Everything the binding system draws for you, gathered in one panel as quick toggle cards, no matter which subsystem owns it. **None of these options change how a binding behaves.**

Three buttons at the top: **Enable All**, **Disable All**, and a reset that restores the values a fresh project starts with. A counter shows how many are on. **Enable All** sets **Visible Source** to **Auto**, and both buttons leave **Micro UI** alone, since turning it on draws less rather than more.

<figure><img src="https://3048705056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLUfBXR02sJ5i0MxwYbaV%2Fuploads%2FZHLTOSr8v00RsTKrm8Xo%2FScreenshot%202026-09-28%20at%2018.28.25.png?alt=media&amp;token=5d1d6d80-b4dc-4cd4-9694-d5cafd2edcf2" alt=""><figcaption><p>The Visualization panel</p></figcaption></figure>

### Bind fields

<table><thead><tr><th width="207.08203125">Option</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Micro UI</strong></td><td>A bound field keeps its own control, showing the value the binding produces, and only the hexagon beside it. The centre of the hexagon lights up to say which value the field shows: green for the binding's, red when it produced none. Click the hexagon to open the whole binding in a popup, right click it to unbind. Switching rebuilds the open Inspectors. See <a href="/binding-system-3/overview/micro-ui.md">Micro UI</a>.</td></tr><tr><td><strong>Visible Source</strong></td><td>Starts the path button with the binding's source, in the colour of its source mode: <code>Player (Transform)→Position</code>. <strong>Off</strong>, <strong>On</strong>, or <strong>Auto</strong> for only where the whole line fits. See <a href="/binding-system-3/overview/binding.md#the-source-on-the-path">The source on the path</a>.</td></tr><tr><td><strong>Popup Target</strong></td><td>Heads the bind popup with the bound object and the path of its field; clicking the object pings it. Useful where the popup opens away from the field, as from the <a href="/binding-system-3/project-tools/diagnostics/dependency-graph.md#editing-a-binding-from-the-graph">Dependency Graph</a>.</td></tr><tr><td><strong>Source Replacement</strong></td><td>Shows the control that replaces the source object of every binding in a header or group at once. Costs a little extra work when the UI is built, so turn it off if inspectors with many bindings are slow to appear.</td></tr><tr><td><strong>Debug At Edit Time</strong></td><td>Lets <a href="/binding-system-3/project-tools/diagnostics/live-debug.md">Live Debug</a> report outside play mode. The read side goes through the same accessors the binding uses, so a path that ends in a method is called on every Inspector tick. Turn it off to go back to reporting during play mode only.</td></tr><tr><td><strong>Realtime Debug</strong></td><td>Refreshes <a href="/binding-system-3/project-tools/diagnostics/live-debug.md">Live Debug</a> values at 60Hz instead of only when the Inspector repaints. Constant repaint. Leave it off unless you are actively debugging.</td></tr></tbody></table>

### Binding menu

<table><thead><tr><th width="187.1796875">Option</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Methods</strong></td><td>Lists methods next to fields and properties. Methods are the bulk of what a Unity type exposes, so turning this off makes the menu much shorter and noticeably quicker to build on large types. Bindings already pointing at a method keep working.</td></tr><tr><td><strong>Last Used Sources</strong></td><td>Recent sources at the top of the menu.</td></tr><tr><td><strong>Last Used Pins</strong></td><td>Recent <a href="/binding-system-3/overview/pinning.md">pinned paths</a> in the menu. Pinning itself keeps working when off.</td></tr></tbody></table>

### Scene and inspector

<table><thead><tr><th width="210.01171875">Option</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Proxy Bindings</strong></td><td>Shows the <a href="/binding-system-3/overview/proxy-bindings.md">proxy bindings</a> an object holds, to see at a glance everything it drives. A GameObject shows a read-only list in its Inspector; a ScriptableObject shows its <strong>Bindings</strong> sub-asset in the Project window. The sub-asset keeps its visibility in its asset's file, so switching this rewrites the assets that hold bindings.</td></tr><tr><td><strong>Scene Variables Object</strong></td><td>Reveals the GameObject carrying the <a href="/binding-system-3/overview/bind-variables.md">scene variables</a> in the Hierarchy. Hidden by default because nothing should depend on where it sits.</td></tr><tr><td><strong>Scene Visualizer</strong></td><td>Draws every binding of the loaded scenes as an arrow in the Scene view. The <strong>Bind Visualizer</strong> overlay in the Scene view carries the rest of its options. Unlike the other cards on this page, this one is a per-user setting rather than a project one, so it is not shared with the team. See <a href="/binding-system-3/project-tools/diagnostics/scene-visualizer.md">Scene Visualizer</a>.</td></tr></tbody></table>

## Optimization

Each option is a card, folded by default. The control sits on the right of the header, with the tag after it, so a folded panel can be read and changed without opening anything; opening one shows what the setting means and whatever extra settings it has. An on-or-off option is a pair of pills, **Enabled** and **Disabled**, rather than a checkbox: the state is in words, and it reads the same way as the options with three choices.

<table><thead><tr><th width="220.734375">Setting</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Max Bind Path Depth</strong></td><td>How deep the bind path menu walks into a single type. Editor only, capped at 4. <strong>Reduce this if the editor hangs when opening the binding menu.</strong> Existing deeper paths keep working.</td></tr><tr><td><strong>Phased Bindings</strong></td><td>Switches inspector-set bindings to <a href="/binding-system-3/project-tools/performance/phased-bindings.md">phased bindings</a>. On an unchanged source the converter and modifiers are skipped, at the cost of a slightly larger build. Read when a binding builds its pipeline, so a change in play mode only affects bindings that start afterwards.</td></tr><tr><td><strong>IL2CPP Specializations</strong></td><td>Names, at build time, the generic types the bindings will instantiate so IL2CPP compiles them specialised instead of through shared code. <strong>Standard types</strong> is a fixed set of numeric and Unity value types; <strong>All types</strong> adds whatever the build's own bindings reach. More code in the build and more memory at runtime, several times faster per call. IL2CPP builds only. See <a href="/binding-system-3/project-tools/performance/il2cpp-specializations.md">IL2CPP Specializations</a>.</td></tr><tr><td><strong>Universal Bind Control</strong></td><td>Lets <strong>any</strong> object update, pause or resume its own bindings through the engine, not only those implementing <code>IBindController</code>. Useful for third party components. Every bound object gets tracked, which costs a little memory. <strong>Requires a play mode restart.</strong> See <a href="/binding-system-3/overview/runtime-control.md">Controlling Bindings at Runtime</a>.</td></tr></tbody></table>

## Configuration

Nine collapsible managers. Each one owns a feature.

### General Settings

<table><thead><tr><th width="232.296875">Setting</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Bindings Path</strong> <a href="#bindings-path">#</a></td><td>Where the package stores its project data: bind types, meta values, global pins, field routes, generated standard modifiers. Relative to the project root. Defaults to <code>Packages/com.postica.binding-system/Bindings</code>. <strong>Apply and Move</strong> relocates the existing data; <strong>Browse</strong> picks a folder; the undo arrow reverts an unapplied edit.</td></tr><tr><td><strong>Performance Mode</strong></td><td>Editor only. Drops the decorative parts of the bind UI. See <a href="/binding-system-3/project-tools/performance/performance-mode.md">Performance Mode</a>.</td></tr><tr><td><strong>Auto Enable Above</strong></td><td>Turns Performance Mode on automatically for an Inspector holding at least this many proxy bindings. 0 never engages automatically. The hint below states the current rule in words.</td></tr><tr><td><strong>Auto Register Converters</strong> / <strong>Modifiers</strong> / <strong>Providers</strong></td><td>Find and register your custom extensions automatically. All on by default. See <a href="/binding-system-3/reference/extending.md">Extending</a>.</td></tr></tbody></table>

### Standard Modifiers

Generates the Set Value, Link To, Value Delayer, Value Logger, Value Events, Value Conditions and Null Check modifiers for types Unity cannot serialize generically.

<table><thead><tr><th width="252.8828125">Setting</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Generate Standard Modifiers</strong></td><td>The switch.</td></tr><tr><td><strong>+ Add Type</strong></td><td>Enables them for a type you cannot edit, such as a Unity or third party type. Types you own use <code>[EnableStandardModifiers]</code> instead.</td></tr><tr><td><strong>Standard Modifiers Path</strong></td><td>Where the generated file goes. Empty means the Bindings folder.</td></tr></tbody></table>

See [Standard Modifiers for Your Types](/binding-system-3/pipeline/standard-modifiers.md).

### Proxy Bindings

Manages the project-wide asset that holds [proxy bindings](/binding-system-3/overview/proxy-bindings.md) attached to project assets. Scenes and prefabs carry their own, embedded.

### Pinning

Lists every [pinned path](/binding-system-3/overview/pinning.md), grouped by the storage that holds it, with a **Children** badge on paths pinned with **Pin Children**. Remove them from here.

### Fields Rerouting

Lists every [field route](/binding-system-3/reference/extending/field-rerouting.md) in the project, with its type, source field and target member.

### Refactor Manager

<table><thead><tr><th width="270">Setting</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Enable Refactoring</strong></td><td>Get the review window and choose per member. <strong>Off means an unresolvable proxy binding is removed with no prompt.</strong></td></tr><tr><td><strong>Refactor Unity Classes</strong></td><td>Also handle members of Unity's own types.</td></tr><tr><td><strong>Prefer Renaming Auto Fix</strong></td><td>Follow <code>[FormerlySerializedAs]</code> and repair an unambiguous rename without asking.</td></tr></tbody></table>

Two buttons in the header, a line reporting how many members are currently waiting for a decision, and the list of **Rules**: every decision applied so far, one row each, with a **⌫** button to forget that one.

<table><thead><tr><th width="270">Button</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Open Refactor Window</strong></td><td>Shows the members bindings point at that no longer exist.</td></tr><tr><td><strong>Forget All Rules</strong></td><td>Forgets every rule in <code>Library/bs-refactors.json</code>. Bindings already rewritten stay as they are; each member is asked about again next time one of its bindings comes up. Confirms first.</td></tr></tbody></table>

See [Refactoring](/binding-system-3/project-tools/diagnostics/refactoring.md).

### Bindings Validator

No settings; the checks themselves are chosen in the window, per run. Two buttons in the header:

<table><thead><tr><th width="270">Button</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Validate Active Scene</strong></td><td>Checks every binding in the scene you are working in.</td></tr><tr><td><strong>Validate Project</strong></td><td>Checks every scene, prefab and asset. Scenes that are not open are opened one at a time and your original set of open scenes is restored afterwards. Slow, and stoppable at any point.</td></tr></tbody></table>

See [Bindings Validator](/binding-system-3/project-tools/diagnostics/validator.md).

### Dependencies

<table><thead><tr><th width="270">Setting</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Search in Children</strong></td><td>A GameObject in the dependency scope also contributes its children. On is usually what you want.</td></tr></tbody></table>

### Build-Time Optimized Accessors

<table><thead><tr><th width="270">Setting</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Generate Optimized Accessors</strong></td><td>Replace deterministic bound paths with generated direct-access methods at build time.</td></tr><tr><td><strong>Min Path Pieces</strong></td><td>Paths with fewer pieces than this skip codegen.</td></tr><tr><td><strong>On Stale Build</strong></td><td><strong>Ignore</strong>, <strong>Warn</strong> or <strong>Fail Build</strong> when the generated set would change. Use <strong>Fail Build</strong> on CI.</td></tr><tr><td><strong>Keep Generated File For Inspection</strong></td><td>Keep the file after the build.</td></tr><tr><td><strong>Generated Accessors Path</strong></td><td>Must be inside <code>Assets/</code>.</td></tr><tr><td><strong>↻ Generate Now</strong></td><td>Runs the scan and writes the file now.</td></tr></tbody></table>

A status card above reports state: *Never generated*, *Up to date*, *Out of date*, *Scanning*, or *Disabled*. See [Optimized Accessors](/binding-system-3/project-tools/performance/optimized-accessors.md).

### Default Bind Data

The bind data a newly created binding starts from. Out of the box that is **UPDATE** with **Optimized Update** on, in `Read` mode. Set the flags, mode and [update points](/binding-system-3/overview/modes-and-updates.md) you want as your project's default and every new binding begins there. The update points apply to [proxy bindings](/binding-system-3/overview/proxy-bindings.md), which is where they have an effect.

## Tools

Five launchers, each with a description.

<table><thead><tr><th width="290">Tool</th><th>What it shows</th></tr></thead><tbody><tr><td><a href="/binding-system-3/project-tools/diagnostics/bindings-monitor.md">Bindings Monitor</a></td><td>All active bindings, their status and their cost.</td></tr><tr><td><a href="/binding-system-3/project-tools/diagnostics/dependencies.md">Bindings Dependencies Analyzer</a></td><td>Dependencies between bindings, with a <strong>↗ Graph</strong> button for the <a href="/binding-system-3/project-tools/diagnostics/dependency-graph.md">graph view</a>.</td></tr><tr><td><a href="/binding-system-3/overview/bind-variables.md">Bind Variables Manager</a></td><td>Every variable container, scene and asset, in one place.</td></tr><tr><td><a href="/binding-system-3/project-tools/diagnostics/validator.md">Bindings Validator</a></td><td>Resolves every binding the way the runtime would and reports what it finds. <strong>↗ Validate Scene</strong> and <strong>↗ Validate Project</strong> start a run straight away.</td></tr><tr><td><a href="/binding-system-3/pipeline/templates.md">Templates</a></td><td>Modifiers, converters and paths saved with their values filled in. One button per tab: <strong>↗ Modifiers</strong>, <strong>↗ Converters</strong>, <strong>↗ Paths</strong>.</td></tr></tbody></table>

## Bindings Path

Worth its own note, because moving it is the one setting that touches files.

The folder holds the package's project data: registered bind types, meta values, global pins, field routes, and the generated standard modifiers file. It defaults to a folder inside the package, which keeps it out of `Assets` and out of your diff.

Move it into `Assets` if you want that data under your own version control layout rather than inside the package folder. **Apply and Move** relocates the existing data; it does not copy it, so there is only ever one.

{% hint style="info" %}
If the package finds a valid Bindings folder somewhere other than the configured path, for example after a manual move, it adopts it and logs that it has done so.
{% endhint %}

## Where settings are stored

`ProjectSettings/Packages/com.postica.binding-system/settings.json`, so they are project settings and shared with the team. Two of them, phased bindings and universal bind control, are stored as runtime options rather than editor settings, because the runtime needs them.
