PRODUCT

Logic.

Visual programming applied to any value or parameter.

Pictogram of Logic nodes

Logics are one of the core concepts in the EMS. It's all about retrieving, combining, and transforming data based on different nodes that evaluate as an abstract syntax tree.

Anything from simple things like getting a single value from a JSON object, formatting a date or concatenating a few values – all the way to involved math calculations or filtering functions.

Once you start working in the EMS you'll likely use Logics a lot. Both for making visual properties on a Layout dynamic as well as handling Workflow parameters. Logics are everywhere.

hover / tap

false

hover color

#fff6e2

Text

If

condition

then

else

Output

#ffe9bb

Logics can live directly on a property or value – but as soon as you create something you want to use in more than one place you want to move them to live either on the Layout, or for even more reusable Logics, on a Graph node. The latter is also a great way for engineers to create pure Logics that then a team member working on a Layout can use.

Logics can also define parameters, making them reusable like utility functions that adapt to different inputs.

Logic node types

Each node type has a specific purpose, from simple constants to dynamic inputs, environment data, or advanced processors. Combined, they form powerful trees that can transform values, control behavior, and connect data across devices.

Fixed values for starting points.

Text

Number

True / False

Null

Object (JSON)

Information about the device or system environment.

Device brand

Device name

Device type

Is landscape

OS name

OS version

Platform

Screen width

Screen height

Safe area top

Safe area bottom

Safe area left

Safe area right

Time

Time zone

Nodes for animating values or colors.

Motion Config

Motion Interpolate Color

Motion Interpolate Value

Motion Sequence

Standard mathematical functions and constants.

Floor

Ceil

Round

Min

Max

Add

Multiply

Divide

Subtract

Modulo

Cos

Sin

Log

Log10

Tan

Abs

Sqrt

Pow

Atan2

Random

Pi

Transform, format, and manipulate values and data structures.

Base64 Decode

Base64 Encode

Coalesce

Concatenate

Date To Timestamp

Filter

Find

Find And Replace

First

Flat

Get

Hash

Includes

Index Of

Join

JSON Stringify

Last

Length

Map

Merge

Now

Object Keys To Array

Parse Date

Parse JSON

Parse Number

Parse String

Set

Slice

Sort

Split

Substring

Uuid

Unique Array

URI Decode

URI Decode Component

URI Encode

URI Encode Component

Change the format or style of values.

Uppercase

Lowercase

Format Date

Format

Conditional and logical operators.

And

Equals

Greater Than

Less Than

If

Not

Or

Value Between

Nodes for creating arrays and key-value entries.

Array

Entries

Store and reuse values across layouts. Variables can hold anything from user data to system states, and can be scoped locally, per device, per user devices, or globally. This makes them powerful tools for sharing state across devices and creating synchronized multi-screen experiences.

Dynamic values passed into a Layout, Workflow, or Logic. They make Logics reusable, since they allow the same definition to behave differently depending on the data provided. Designers and developers can define which properties can be controlled from outside, enabling flexibility without duplication.

Reusable Logic trees that can be referenced inside other Logics. This allows you to create utility functions once, and apply them across multiple contexts. Logics can accept parameters, making them adaptable building blocks for more complex functionality.

Why Logic, not code?

Sometimes people ask why engineers can't just write code in the EMS directly? There are two reasons.

1. Approachability

Logics should be usable by non-developers. Designers and Editors can make Layouts dynamic without writing code.

2. Cross-platform execution

Logic trees compile into native code for every platform, so you define once and run everywhere.