> 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/getting-started/comparison.md).

# How It Compares

How Binding System 3 compares with other Unity binding tools.

Unity has several ways to connect one value to another. This page lists them, says what each one requires of you, and says which cases each one suits.

Every asset below was checked on the Asset Store, and every capability was checked against that tool's own documentation.

## What is available

{% hint style="info" %}
Checked **September 2026**. Prices, versions and dates change.
{% endhint %}

<table><thead><tr><th width="210">Asset</th><th width="130">Publisher</th><th width="90">Price</th><th width="110">Last update</th><th width="100">Min Unity</th><th>Reviews</th></tr></thead><tbody><tr><td><a href="https://assetstore.unity.com/packages/tools/utilities/soap-scriptableobject-architecture-pattern-232107">Soap</a></td><td>Obvious Game</td><td>€64.40</td><td>Jul 2026</td><td>2019.4</td><td>48</td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/visual-scripting/playmaker-368">PlayMaker</a></td><td>Hutong Games</td><td>€59.80</td><td>Aug 2026</td><td>2022.3</td><td>3,420</td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/utilities/aspid-mvvm-298463">Aspid MVVM</a></td><td>VPD</td><td>€55.20</td><td>Oct 2025</td><td>6000.2</td><td>none yet</td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/gui/data-bind-for-unity-28301">Data Bind for Unity</a></td><td>Slash Games</td><td>€41.39</td><td>Aug 2025</td><td>6000.0</td><td>32</td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/utilities/binding-system-2-304762">Binding System 2</a></td><td>GGPostica</td><td>€40.48</td><td>Aug 2026</td><td>2022.3</td><td>32</td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/utilities/bindables-343480">Bindables</a></td><td>Virtual Maker</td><td>€35.88</td><td>Jun 2026</td><td>6000.3</td><td>6</td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/utilities/advanced-binding-tool-331088">Advanced Binding Tool</a></td><td>TupiCode</td><td>€18.40</td><td>Feb 2026</td><td>6000.1</td><td>none yet</td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/utilities/data-bind-framework-191263">Data Bind Framework</a></td><td>Yusuf Işık</td><td>€18.40</td><td>Mar 2021</td><td>2018.4</td><td>none yet</td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/utilities/property-binding-260452">Property Binding</a></td><td>Nela System</td><td>€4.59</td><td>Dec 2023</td><td>2021.3</td><td>none yet</td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/visual-scripting/displayfab-ui-data-binding-display-instantiation-solution-59263">DisplayFab</a></td><td>Techooka Labs</td><td>€55.20</td><td>Apr 2019</td><td>5.3</td><td>12</td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/gui/mvvm-4-ugui-44793">MVVM 4 uGUI</a></td><td>yedo-factory</td><td>free</td><td>Mar 2019</td><td>2018.3</td><td>10</td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/gui/loxodon-framework-2-0-178583">Loxodon Framework 2.0</a></td><td>vovgou</td><td colspan="3"><strong>Deprecated</strong>, no longer sold. Still <a href="https://github.com/vovgou/loxodon-framework">maintained on GitHub</a> under MIT.</td><td></td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/gui/peppermint-data-binding-90687">Peppermint Data Binding</a></td><td></td><td colspan="3"><strong>Deprecated</strong>, no longer sold, unsupported.</td><td></td></tr></tbody></table>

Three points are worth noting before any feature comparison.

**Many of these are no longer maintained.** Two of the thirteen are deprecated, and four more have had no update since 2021. A binding layer ends up serialized into your scenes, so how recently it was updated matters.

**Most of them are user interface tools.** Of the maintained assets, only PlayMaker and the Binding System line treat "connect two values" as a general problem rather than a screen problem.

**Most of them require you to write the source first.** This is the largest practical difference, and it is the next section.

## What each tool requires of you

Every tool here can move a value. What separates them is what is allowed to be the source, and who has to write it.

<table><thead><tr><th width="210">Tool</th><th width="260">What the source must be</th><th>Code you have to write first</th></tr></thead><tbody><tr><td><strong>Binding System 3</strong></td><td><strong>Any member of any object.</strong> A field, property, method, indexer or parameter, on your component or on one you cannot recompile.</td><td><strong>None.</strong></td></tr><tr><td>Unity's built-in binding</td><td>A field or property on a data source object. Not a method, not an event, not a static type, and support for Unity's own built-in components is limited.</td><td>The data source type, usually one you write for the purpose.</td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/gui/data-bind-for-unity-28301">Data Bind for Unity</a></td><td>A <code>Property&#x3C;T></code> on a class deriving from <code>Context</code>.</td><td>The <code>Context</code> subclass and its properties.</td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/utilities/bindables-343480">Bindables</a></td><td>A <code>Bindable&#x3C;T></code> you declared.</td><td>The <code>Bindable&#x3C;T></code> fields, plus the binding calls themselves in <code>Start()</code>.</td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/utilities/aspid-mvvm-298463">Aspid MVVM</a></td><td>A property on a ViewModel, marked up for the source generator.</td><td>The ViewModel and its attributes.</td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/utilities/soap-scriptableobject-architecture-pattern-232107">Soap</a></td><td>A ScriptableVariable asset.</td><td>None, but you create and name an asset per value.</td></tr><tr><td><a href="https://assetstore.unity.com/packages/tools/visual-scripting/playmaker-368">PlayMaker</a></td><td><strong>Any member of any object</strong>, via Get Property.</td><td><strong>None</strong>, but you build and maintain an FSM per connection.</td></tr></tbody></table>

PlayMaker is the closest to Binding System 3 on this point: it can read and write any member of any object, with no code. The difference is what each connection costs, which the [visual scripting](#visual-scripting) section covers.

## Capabilities

A row of **No** does not mean a weak tool. It means a tool built for something else.

<table><thead><tr><th width="200">Tool</th><th align="center">No code</th><th align="center">Members you do not own</th><th align="center">Beyond UI</th><th align="center">Transforms in transit</th><th align="center">Per-binding timing</th><th align="center">Project-wide view</th></tr></thead><tbody><tr><td><strong>Binding System 3</strong></td><td align="center"><strong>Yes</strong></td><td align="center"><strong>Yes</strong></td><td align="center"><strong>Yes</strong></td><td align="center"><strong>Yes</strong></td><td align="center"><strong>Yes</strong></td><td align="center"><strong>Yes</strong></td></tr><tr><td>Unity's built-in binding</td><td align="center">Partly</td><td align="center">Partly</td><td align="center">No</td><td align="center">Partly</td><td align="center">No</td><td align="center">No</td></tr><tr><td>Data Bind for Unity</td><td align="center">No</td><td align="center">No</td><td align="center">Partly</td><td align="center"><strong>Yes</strong></td><td align="center">No</td><td align="center">No</td></tr><tr><td>Bindables</td><td align="center">No</td><td align="center">No</td><td align="center"><strong>Yes</strong></td><td align="center"><strong>Yes</strong></td><td align="center">Partly</td><td align="center">No</td></tr><tr><td>Aspid MVVM</td><td align="center">No</td><td align="center">No</td><td align="center">Partly</td><td align="center">Partly</td><td align="center">No</td><td align="center">No</td></tr><tr><td>Soap</td><td align="center">Partly</td><td align="center">No</td><td align="center"><strong>Yes</strong></td><td align="center">No</td><td align="center">No</td><td align="center">Partly</td></tr><tr><td>PlayMaker</td><td align="center"><strong>Yes</strong></td><td align="center"><strong>Yes</strong></td><td align="center"><strong>Yes</strong></td><td align="center"><strong>Yes</strong></td><td align="center">Partly</td><td align="center">No</td></tr><tr><td>R3 (reactive, free)</td><td align="center">No</td><td align="center">No</td><td align="center"><strong>Yes</strong></td><td align="center"><strong>Yes</strong></td><td align="center">Partly</td><td align="center">No</td></tr><tr><td>A hand-written glue class</td><td align="center">No</td><td align="center"><strong>Yes</strong></td><td align="center"><strong>Yes</strong></td><td align="center"><strong>Yes</strong></td><td align="center"><strong>Yes</strong></td><td align="center">No</td></tr></tbody></table>

**Price.** Unity's built-in binding, R3, Unity Atoms, Loxodon and a hand-written class are all free.

**Architecture.** Binding System 3 is opt in per field and per instance. It provides no view model lifecycle, no message bus, no dependency injection and no state container, and it does not prevent anyone on the team from ignoring it. Aspid MVVM, Data Bind and Soap impose structure deliberately, and for some teams that is the point of using them.

## Tool by tool

### Unity's built-in data binding

Unity 6 includes runtime binding for UI Toolkit. It is the only option here with no third-party dependency.

<table><thead><tr><th width="110"></th><th>Notes</th></tr></thead><tbody><tr><td><strong>Strengths</strong></td><td>Free, first party, maintained by the engine team, nothing extra in your project. Change notification is efficient and explicit through <code>INotifyBindablePropertyChanged</code>. Authored in UI Builder, where UI people already are.</td></tr><tr><td><strong>Limits</strong></td><td>UI Toolkit only, so nothing outside a <code>UIDocument</code> is reachable. The generated property bags see fields and properties, so <strong>methods and events cannot be bound</strong>. Static types cannot be a data source. Support for Unity's own built-in components is limited, so the data source is usually a type you wrote for the purpose. No project-wide view of what is bound.</td></tr></tbody></table>

Binding System 3 does not replace it. It reaches further: it binds UXML element properties, inline styles and USS classes from UI Builder, and the same row can also bind a `Rigidbody`, a material property or a `ScriptableObject`. See [UI Toolkit and UXML](/binding-system-3/overview/ui-toolkit.md).

### Data Bind for Unity

The oldest tool in this category still being updated, on the store since 2015.

<table><thead><tr><th width="110"></th><th>Notes</th></tr></thead><tbody><tr><td><strong>Strengths</strong></td><td>A mature, coherent MVVM and MVP architecture with a large library of prebuilt setters, getters, converters, formatters, commands and triggers. Ships adapters for uGUI, TextMeshPro and NGUI. Once the <code>Context</code> exists, most of the presentation side genuinely needs no code.</td></tr><tr><td><strong>Limits</strong></td><td>The <code>Context</code> class and its <code>Property&#x3C;T></code> fields are not optional, so the no-code route stops at the data side. Aimed at UI, so component-to-component connections are out of scope. Adopting it is a project-wide architectural decision rather than a per-field one.</td></tr></tbody></table>

### Bindables

The newest of the tools here, from Virtual Maker. It replaces the author's older `com.virtualmaker.bindings` package.

<table><thead><tr><th width="110"></th><th>Notes</th></tr></thead><tbody><tr><td><strong>Strengths</strong></td><td>A clean reactive model. <code>Bindable&#x3C;T></code> holds the value and notifies observers, and a source generator writes typed <code>Bind…</code> extension methods for the Unity types you enable, so binding to TextMeshPro, uGUI or UI Toolkit is one strongly typed call. Derived state, lists, dictionaries, intervals, animations and two-way input bindings all have first-class support, and a component only updates when the value actually changes.</td></tr><tr><td><strong>Limits</strong></td><td>Bindings are written in C#, in <code>Start()</code>, one call per connection: <code>_healthBar.BindValue(_health, _maxHealth, (h, m) => h / m)</code>. The source must be a <code>Bindable&#x3C;T></code> you declared, so a value on a component you did not write cannot be a source without wrapping it. The generated extensions are on the <em>target</em> side. There is no designer route and no project-wide inventory.</td></tr></tbody></table>

The difference in one line: Bindables is built to propagate state you own, and Binding System 3 is built to reach state you do not.

### Aspid MVVM

A source-generated MVVM framework, MIT licensed on GitHub and also sold on the store.

<table><thead><tr><th width="110"></th><th>Notes</th></tr></thead><tbody><tr><td><strong>Strengths</strong></td><td>No reflection and no boxing in the binding path, because the source generator emits the plumbing. All four binding modes, including <code>OneWayToSource</code>. Prebuilt Binders connect a ViewModel property to a component property from the Inspector. MIT licensed, so the store price buys support rather than access.</td></tr><tr><td><strong>Limits</strong></td><td>The ViewModel and its attributes are the entry fee, so there is no no-code route and no retrofit path into an existing codebase that has no ViewModels. Unity 6.0+ only, no reviews on the store yet, and the preview package needs two git dependencies installed by hand in a specific order.</td></tr></tbody></table>

### Soap, and the ScriptableObject pattern

<table><thead><tr><th width="110"></th><th>Notes</th></tr></thead><tbody><tr><td><strong>Strengths</strong></td><td>The most established tool on this page by adoption, and deservedly so. Superb for cross-scene and cross-prefab state, save data and designer-tunable values. Scriptable Variables, Lists, Dictionaries, Events, Saves and a central wizard to manage them. Very cheap at runtime, and back to Unity 2019.4. <a href="https://github.com/unity-atoms/unity-atoms">Unity Atoms</a> covers the same pattern free and MIT, off the store.</td></tr><tr><td><strong>Limits</strong></td><td>Every connected value needs an asset, so a large project accumulates hundreds to name, organise and keep. It only connects things written to use it: a field on a third-party component cannot participate without a wrapper script. It is push, not path, so <code>enemy.transform.position.x</code> is not something you can point at.</td></tr></tbody></table>

These work alongside Binding System 3 rather than against it. [Bind variables](/binding-system-3/overview/bind-variables.md) cover the same named-value ground inside the package, and a Scriptable Variable asset is a valid [source](/binding-system-3/overview/sources.md) for a binding.

### Visual scripting

PlayMaker and Unity Visual Scripting can read and write any property on any object without code, which makes PlayMaker the closest overlap on the store.

<table><thead><tr><th width="110"></th><th>Notes</th></tr></thead><tbody><tr><td><strong>Strengths</strong></td><td>Unbounded. Anything expressible as logic can be built, by a designer. PlayMaker has a fifteen-year ecosystem of prebuilt actions and more reviews than every other asset on this page combined. Unity Visual Scripting is free and first party.</td></tr><tr><td><strong>Limits</strong></td><td>An FSM is a heavy instrument for "keep this value equal to that one". A hundred of them are a hundred assets to review, and graph diffs are effectively unreviewable in a pull request. Reflection-driven Get Property costs more per frame than a resolved accessor. Nothing tells you which graphs touch a member you are about to rename.</td></tr></tbody></table>

The practical distinction: visual scripting is for behaviour. Keeping one value equal to another is not behaviour, and a state machine is a large instrument for it.

### Reactive streams

[R3](https://github.com/Cysharp/R3) is the current version of UniRx, free and not on the store.

<table><thead><tr><th width="110"></th><th>Notes</th></tr></thead><tbody><tr><td><strong>Strengths</strong></td><td>Free, open source, actively developed, low allocation. The operator set is the right tool for anything with time in it. Composes across the whole .NET ecosystem, not only Unity.</td></tr><tr><td><strong>Limits</strong></td><td>A code tool end to end, with no Inspector story and no designer story. Both ends must be written to participate, so a plain <code>float</code> on someone else's component is not a stream and cannot become one.</td></tr></tbody></table>

### Writing the connecting class yourself

The baseline most projects actually use: a serialized reference to each side, a null check and an `Update`.

<table><thead><tr><th width="110"></th><th>Notes</th></tr></thead><tbody><tr><td><strong>Strengths</strong></td><td>No dependency, no licence, nothing to learn, and exactly as fast as the machine allows. Fully visible in code review and in <code>git blame</code>, which is not a small thing on a large team.</td></tr><tr><td><strong>Limits</strong></td><td>It scales linearly: one class and one component per connection, forever, each a place a null reference can live. Changing a connection means a programmer, an edit and a recompile, so designers queue behind engineering for work that is not engineering.</td></tr></tbody></table>

## Where Binding System 3 is ahead

<table><thead><tr><th width="250">Area</th><th>Detail</th></tr></thead><tbody><tr><td><strong>What it can bind</strong></td><td>Of everything surveyed, only PlayMaker can also bind a member of an object you did not write. Unity's own components, packages you cannot recompile, Asset Store plugins, <code>ScriptableObject</code>s, material and shader properties, UXML element properties and USS classes. See <a href="/binding-system-3/overview/proxy-bindings.md">Proxy Bindings</a>.</td></tr><tr><td><strong>Adoption cost</strong></td><td>Opt in per field and per instance, reversible with one click, and nothing is recompiled. No <code>Context</code>, no view model, no <code>Bindable&#x3C;T></code> and no asset per value. No other tool here can be adopted one field at a time and left out of the next field.</td></tr><tr><td><strong>Source modes</strong></td><td>Eight ways to name a source: direct reference, named variable, name or path, tag, pattern, context, scene search and static type. A prefab can bind to something each scene supplies, which a direct reference cannot do. See <a href="/binding-system-3/overview/sources.md">Sources</a>.</td></tr><tr><td><strong>Changing the value in transit</strong></td><td><a href="/binding-system-3/pipeline/converters.md">Converters</a> and more than thirty <a href="/binding-system-3/pipeline/modifier-catalogue.md">modifiers</a> shape the value on its way, and every modifier parameter can itself be a binding. Clamping, formatting, smoothing and expressions, with no code. Data Bind and Bindables both transform values well, but not without code.</td></tr><tr><td><strong>Project-wide tools</strong></td><td><a href="/binding-system-3/project-tools/diagnostics/live-debug.md">Live Debug</a>, the <a href="/binding-system-3/project-tools/diagnostics/bindings-monitor.md">Bindings Monitor</a>, <a href="/binding-system-3/project-tools/diagnostics/dependencies.md">Dependencies</a>, the <a href="/binding-system-3/project-tools/diagnostics/dependency-graph.md">graph</a>, the <a href="/binding-system-3/project-tools/diagnostics/validator.md">Validator</a> and <a href="/binding-system-3/project-tools/diagnostics/refactoring.md">rename repair</a>. Nothing else surveyed has an inventory of every binding in the project.</td></tr><tr><td><strong>Runtime cost</strong></td><td>Reflection resolves the path once and never again: a field segment becomes a direct read, and everything else a typed delegate. Reading a value type through any number of modifiers allocates <strong>nothing</strong>. <a href="/binding-system-3/project-tools/performance/optimized-accessors.md">Generated accessors</a> reduce qualifying paths to a static call at build time. Figures in <a href="/binding-system-3/project-tools/performance/benchmarks.md">Benchmarks</a>.</td></tr><tr><td><strong>Timing control</strong></td><td>Per binding: which player-loop stage it runs on, on what interval, whether to skip frames where nothing changed, and whether it runs at <strong>edit time</strong>. Nothing else surveyed offers the last one.</td></tr></tbody></table>

## When another tool is the better choice

<table><thead><tr><th width="290">If</th><th>Then</th></tr></thead><tbody><tr><td><strong>Your project is on Unity 2022 or older</strong></td><td>3.x requires Unity 6000.0. <a href="https://assetstore.unity.com/packages/tools/utilities/binding-system-2-304762">Binding System 2</a> supports 2022.3 and is still maintained, but it is a different product.</td></tr><tr><td><strong>Code review is where your team catches problems</strong></td><td>A binding is stored in a scene or a prefab, not in a <code>.cs</code> file, so it does not appear in a readable diff. The <a href="/binding-system-3/project-tools/diagnostics/dependencies.md">dependency tools</a> exist for this and answer the question well, but they are not a diff. Teams with a strict rule about this should decide before adopting.</td></tr><tr><td><strong>The problem is the architecture itself</strong></td><td>Binding System 3 connects an existing codebase efficiently. It does not restructure one. If the problem is that every class knows about every other class, Aspid MVVM, Data Bind or Soap address that directly.</td></tr><tr><td><strong>You need one connection, once</strong></td><td>A single forwarded field does not justify a package. Write the few lines instead.</td></tr></tbody></table>

Bindings are serialized into your scenes and prefabs. Removing the package from a project that contains thousands of them is real work, not a single delete. The same is true of Soap, of Data Bind and of every MVVM framework here: it is the normal cost of a structural dependency.

## Which one to use

<table><thead><tr><th width="330">Your situation</th><th>What to use</th></tr></thead><tbody><tr><td>A UI Toolkit screen bound to a view model you wrote</td><td>Unity's built-in binding. Add <strong>Binding System</strong> when you need to reach outside the document or have more control over the data.</td></tr><tr><td>A designer needs to rewire a scene without a programmer</td><td><strong>Binding System 3</strong>, or PlayMaker if the connection is really logic.</td></tr><tr><td>You need to drive a field on a component you cannot edit</td><td><strong>Binding System 3.</strong> Only PlayMaker also does this, at the cost of an FSM per connection.</td></tr><tr><td>Two scenes need to share a value</td><td>Soap or Unity Atoms, or <strong>Binding System 3's</strong> <a href="/binding-system-3/overview/bind-variables.md">bind variables</a>. Either is fine, and they mix.</td></tr><tr><td>Reactive state you own, driving UI, in code</td><td>Bindables or R3. Both are good at this and Binding System is not trying to be.</td></tr><tr><td>The whole project needs a UI architecture</td><td>Aspid MVVM or Data Bind for Unity. Then bind the parts they do not reach with <strong>Binding System 3</strong>.</td></tr><tr><td>Complex conditional behaviour, authored visually</td><td>PlayMaker or Unity Visual Scripting. This is not a binding problem.</td></tr><tr><td>Hundreds of small value connections across a real project</td><td><strong>Binding System 3</strong>, and this is the case it was built for.</td></tr></tbody></table>

{% hint style="success" %}
Most of these are **and**, not **or**. Binding System 3 sits beside R3, Soap, Odin and Unity's own binding without conflict, because it adds nothing to the objects it binds. See [Odin Inspector](/binding-system-3/reference/integrations/odin-inspector.md) and [TextMeshPro and Unity UI](/binding-system-3/reference/integrations/unity-ui.md).
{% endhint %}

## Related pages

* [Two Ways to Bind](/binding-system-3/overview/two-ways-to-bind.md)
* [Core Concepts](/binding-system-3/getting-started/concepts.md)
* [Benchmarks](/binding-system-3/project-tools/performance/benchmarks.md)
* [FAQ](/binding-system-3/help/faq.md)
