A trigger is a component that detects changes in an app and sends a message to its output port as soon as such a change is detected. You can connect action components to a trigger to continue your workflow and do something useful with the data received from the trigger. Trigger components don't have input ports.
An action component does something with the data it receives on its input port(s). It can produce new data, send data to an API or simply transform the data it receives for other connected components to consume. You can connect as many action components to any output port of other components. Action components can also represent conditionals (a.k.a if-else or filters) that, based on a certain condition, pass data to either of their output ports.
By chaining triggers with actions and filters, you can create arbitrarily sophisticated business logic, visually and without a single line of code.
In any of your action components, you can use data of any other component back in the chain of connected components. This data is only known at flow runtime and so for the purpose of designing your flows, we call them variables.
All flows should contain at least one trigger component. Otherwise, no action would take place and so the flow would not do any useful job.