# Indirect Tags versus Tag() function

**URL:** <https://forum.inductiveautomation.com/t/indirect-tags-versus-tag-function/95947>\
**Category:** General Discussion\
**Tags:** vision\
**Created:** [September 13, 2024, 12:38pm UTC](https://forum.inductiveautomation.com/t/indirect-tags-versus-tag-function/95947 "2024-09-13T12:38:54Z")\
**Posts on this page:** 1\
**Showing post:** 2

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [September 13, 2024, 12:46pm UTC](https://forum.inductiveautomation.com/t/indirect-tags-versus-tag-function/95947/2 "2024-09-13T12:46:41Z")

</div>

Every difference in behavior between the `tag()` function and indirect tag bindings is a negative against the `tag()` function.

- `tag()`, like any expression function, must deliver an answer in the thread that is running the whole expression. But on expression startup that means waiting on the tag subsystem to establish the subscription and deliver the initial value. This creates stalls. Indirect tag bindings deliver asynchronously.

- The string expression within the parentheses of `tag()` must re-execute every time `tag()` delivers a value, or anything else in the expression changes, whether the string would produce a new result or not. Indirect bindings' string source only re-executes when a fragment changes. (You can mitigate by moving the string computation to another custom property, but if you can do that, you might as well move the whole thing.)

Use `tag()` only where indirect binding is unavailable (expression tags).

---

_[View the full topic](https://forum.inductiveautomation.com/t/indirect-tags-versus-tag-function/95947)._
