Variables are used by module builders to configure how data moves through a Workshop module. A list of available variable types can be found below.
To access existing variables in a Workshop module or define new variables, open the Variables menu found in the left sidebar.

The Variables panel (shown above) displays a list with the current variables that exist within a module, a plus + option to add a new variable, an input to search variables by their name or unique ID, an option to open the variable lineage graph, and a filter to display variables based on their definition type or what settings are enabled. The variable list includes partitions to help you quickly find relevant variables: when a widget is selected, a partition displays variables used by that widget; when no widget is selected, a partition displays variables used in the active page.
Selecting a variable from the list on the left allows you to view and modify the configuration of that variable in a window that opens to the right of the variables list. The following configuration options are available:
The screenshot below shows an example configuration for an Object Set variable:

The screenshot below shows an example configuration for a string array variable:

In both view and edit mode, Workshop variables will compute and recompute lazily only when displayed by a visible widget or layout. This means that variables used in non-visible pages, tabs, overlays, or non-visible pages of a looped layout will not be computed until they are shown. This behavior is the same for non-visible variables used in embedded modules.
Workshop supports the following variable types:
true or false. Initialized from either a static value or the output of a function, aggregation, or object property.Workshop offers the following configurable recompute behavior options for variable definition types:
The recompute options behave in the following ways:
The Object set definition variable definition type does not offer recompute behavior configuration, and functions similarly to Automatic recompute behavior. If this is undesirable, the recompute behavior may be set on upstream variables. If you wish to manage the recompute behavior of object set variables explicitly, you can use a function backed variable.

Use the Variable lineage graph option found in the header of the Variables panel, to visualize how variables and widgets in your module depend on one another. Use it to debug recompute behavior, trace which widgets read or write a variable, and better understand complex relationships between application elements.

Each node on the graph represents a variable or widget. Nodes with dependencies have chevron arrows on their top and bottom edges. Select an arrow to expand a node's parents (upstream dependencies) or children (downstream consumers) and trace a chain of relationships through the module. Use the Show all action in the graph header to expand to the full application graph or Clear to remove all nodes.
Undo and redo options in the graph header step backward and forward through expand, collapse, and selection actions, mirroring the module's own undo/redo controls.

Each node can display the pages and overlays where a variable is used and the time at which a variable was computed.
Nodes are tagged with the pages and overlays where they are referenced. Toggle Show pages and overlays in the header to display a legend that lists each page and overlay in use. The legend only lists pages and overlays that appear on visible graph nodes, so the list stays scoped to what you can see in the graph.
Toggle Show computation time in the header to display per-variable timing information. Computation time refers to when the value of the variable was last computed in the application (as it appears to the user), not when the underlying data was last updated outside of the application. Variables that take longer to recompute may be candidates for restructuring: for example, splitting a complex function-backed variable into smaller pieces or changing the recompute behavior on upstream variables to avoid unnecessary work.