# Visual Language

Being a low-code platform, ProcessMIX does not rely on a traditional text-based programming language, except for single-line conditional expressions. Instead, to express application logic it relies on a visual "language" - a well-defined set of visual constructs such as graphs, blocks and spreadsheet-like charts. This makes the logic more transparent and easy to understand, while at the same time reducing the chance for errors (bugs) to be inadvertenly introduced into it.

Below are main concepts and building blocks of the ProcessMIX visual language:

* **Flows**: directed graphs (flowcharts) with **nodes** representing individual steps or tasks, and with connections between them, which control the order of node execution. Flow nodes can evaluate **expressions** and invoke **functions**, decision supporting **assets** and **connectors**, call other flows (**subflows**), as well as raise and handle **exceptions** in abnormal situations. Flows have input and output parameters and can also declare **local variables**. Individual nodes in a flow also generate **node variables** that can be accessed later in the flow.
  * **Expressions** and built-in **function** calls are one-line snippets of code that are used for condition checks or for calculations of values to be assigned to a data structure fields.
  * **Variables** store intermediate flow information. Values returned from the execution of flow nodes are also stored automatically as node variables, and can be used by subsequent nodes.
  * **Exceptions** and **exception handlers** are specialized nodes that interrupt normal flow execution in case of rare/abnormal situations and redirect it to a completely different processing path.
  * Flow **channel** setting controls how this flow will be called - as a **REST** or **SOAP** service from the Web, as a **scheduled** task (batch job), or as a **subflow** to be included as a task node into another flow.
* **Data structures**: data definitions that are used by flows and other project conmponents to make decisions or use as return values. They can be as simple as a single field, or as complex as hierarhical data trees with nested lists (**array**) and key-value lookup tables (**map**). Individual fields can have various types, such as **String**, **Boolean** (true/false indicator), I**nteger** (whole number), **Float** (real/decimal number), **Date** (date/time value), or a complex type (another data structure).
* **Assets**: specialized entities that visually represent various types of decision-making logic and supporting data in a form that is most convenient for viewing and understanding. Among their types are **decision tables** (collections of business rules expressed in a spreadsheet format), **dictionaries** (another type of spreadsheet containing frequently used lookup data such as lists of business codes with their descriptions), **scorecards** (a special type of predictive analytic model for calculating risks in a form of easily explained scores), and **PMML** models (other types of predictive models that can be trained with machine learning algorithms and imported into ProcessMIX to make predictions).
* **Connectors**: integration components that can be configured to connect to external data sources or services and added to flows as nodes to make calls to them at the right moment. Standard connector types include **REST** and **SOAP** connectors, **DB** (relational database) connector, **S3** (Amazon Simple Storage Service) connector, **EVM Blockchain** connector. Other types can be provided on as-needed basis, e.g. **Kafka** connector for integration with message queues and publish/subscribe topics.
* **Global variables**: project environment settings, connector parameters and secrets (e.g. passwords) that are accessible from all flows. They can be overriden by administrators at the deployment time, so that different parameter values can be used in different environments.

More details can be found in the [Language Reference Guide](../../specification).
